GRESULT gsys::LoadTIFF(gsys::gfile *file,bitmap & clarr,int Options,int* pOptionsQuery) { TIFF* tif = TIFFClientOpen("","r",reinterpret_cast<thandle_t>(file), _tiff_read, _tiff_read, _tiff_seek, _tiff_close, _tiff_size, _tiff_map, _tiff_unmap); if(!tif) return GERR_INVALID_DATA; uint32 w, h; size_t npixels; uint32* raster; TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); npixels = w * h; raster = (uint32*) _TIFFmalloc((tsize_t)(npixels * sizeof (uint32))); if (raster != NULL) { if (TIFFReadRGBAImage(tif, w, h, raster, 0)) { //gsys::array2d<gsys::dwcolor> clarr(w,h); clarr.init(w,h); for(uint i=0;i<npixels;i++) { dwcolor cl; uint32 ucl = raster[i]; clarr(i) = dwcolor( (gbyte)TIFFGetR(ucl), (gbyte)TIFFGetG(ucl), (gbyte)TIFFGetB(ucl), (gbyte)TIFFGetA(ucl)); } } _TIFFfree(raster); } TIFFClose(tif); GTransformImage(clarr,ImagePremultipliedAlpha,Options,pOptionsQuery); return G_OK; }