unsigned * read_texture(const char *name, int *width, int *height, int *components) { unsigned *base, *lptr; unsigned char *rbuf, *gbuf, *bbuf, *abuf; ImageRec *image; int y; image = ImageOpen(name); if(!image) return NULL; (*width)=image->xsize; (*height)=image->ysize; (*components)=image->zsize; base = (unsigned *)malloc(image->xsize*image->ysize*sizeof(unsigned)); rbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); gbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); bbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); abuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); if(!base || !rbuf || !gbuf || !bbuf) return NULL; lptr = base; for(y=0; y<image->ysize; y++) { if(image->zsize>=4) { ImageGetRow(image,rbuf,y,0); ImageGetRow(image,gbuf,y,1); ImageGetRow(image,bbuf,y,2); ImageGetRow(image,abuf,y,3); rgbatorgba(rbuf,gbuf,bbuf,abuf,(unsigned char *)lptr,image->xsize); lptr += image->xsize; } else if(image->zsize==3) { ImageGetRow(image,rbuf,y,0); ImageGetRow(image,gbuf,y,1); ImageGetRow(image,bbuf,y,2); rgbtorgba(rbuf,gbuf,bbuf,(unsigned char *)lptr,image->xsize); lptr += image->xsize; } else if(image->zsize==2) { ImageGetRow(image,rbuf,y,0); ImageGetRow(image,abuf,y,1); latorgba(rbuf,abuf,(unsigned char *)lptr,image->xsize); lptr += image->xsize; } else { ImageGetRow(image,rbuf,y,0); bwtorgba(rbuf,(unsigned char *)lptr,image->xsize); lptr += image->xsize; } } ImageClose(image); free(rbuf); free(gbuf); free(bbuf); free(abuf); return (unsigned *) base; }
/* Added by David Bourguignon, iMAGIS-GRAVIR/IMAG-INRIA */ GLubyte * read_rgba_texture(char *name, int *width, int *height) { unsigned char *base, *ptr; unsigned char *rbuf, *gbuf, *bbuf, *abuf; ImageRec *image; int y; image = ImageOpen(name); if (!image) { return NULL; } (*width)=image->xsize; (*height)=image->ysize; if (image->zsize != 4) { ImageClose(image); return NULL; } base = (unsigned char *)malloc(image->xsize*image->ysize*sizeof(unsigned int)*4); rbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); gbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); bbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); abuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); if(!base || !rbuf || !gbuf || !bbuf || !abuf) { if (base) free(base); if (rbuf) free(rbuf); if (gbuf) free(gbuf); if (bbuf) free(bbuf); if (abuf) free(abuf); return NULL; } ptr = base; for(y=0; y<image->ysize; y++) { ImageGetRow(image,rbuf,y,0); ImageGetRow(image,gbuf,y,1); ImageGetRow(image,bbuf,y,2); ImageGetRow(image,abuf,y,3); rgbatorgba(rbuf,gbuf,bbuf,abuf,ptr,image->xsize); ptr += (image->xsize * 4); } ImageClose(image); free(rbuf); free(gbuf); free(bbuf); free(abuf); return (GLubyte *) base; }
static void ImageGetRawData( Image *image, char *data) { int i, j, k; int remain; switch ( image->sizeZ ) { case 1: remain = image->sizeX % 4; break; case 2: remain = image->sizeX % 2; break; case 3: remain = (image->sizeX * 3) & 0x3; if (remain) remain = 4 - remain; break; case 4: remain = 0; break; } for (i = 0; i < image->sizeY; i++) { for ( k = 0; k < image->sizeZ ; k++ ) ImageGetRow(image, image->tmp[k+1], i, k); for (j = 0; j < image->sizeX; j++) for ( k = 1; k <= image->sizeZ ; k++ ) *data++ = *(image->tmp[k] + j); data += remain; } }
bool SGIImageFileType::read( Image *pImage, std::istream &is, const std::string &mimetype) { ImageRec img; if(ImageOpen(img, is) == false) return false; if((img.zsize < 1) || (img.zsize > 4)) return false; pImage->set(zsize2pixelformat[img.zsize - 1], img.xsize, img.ysize); unsigned char *lptr = pImage->editData(); unsigned int lineStride = img.xsize * img.zsize; for(int y = 0; y < img.ysize; ++y) { for(int z = 0; z < img.zsize; ++z) { if(ImageGetRow(img, lptr + z, y, z, img.zsize) == false) return false; } lptr += lineStride; } return true; }
unsigned char * load_luminance(char *name, int *width, int *height, int *components) { unsigned char *base, *lptr; ImageRec *image; int y; image = ImageOpen(name); if (!image) return NULL; if (image->zsize != 1) return NULL; *width = image->xsize; *height = image->ysize; *components = image->zsize; base = (unsigned char *) malloc(image->xsize * image->ysize * sizeof(unsigned char)); if (!base) return NULL; lptr = base; for (y = 0; y < image->ysize; y++) { ImageGetRow(image, lptr, y, 0); lptr += image->xsize; } ImageClose(image); return base; }
GLubyte * read_alpha_texture(char *name, int *width, int *height) { unsigned char *base, *lptr; ImageRec *image; int y; image = ImageOpen(name); if (!image) { return NULL; } (*width)=image->xsize; (*height)=image->ysize; if (image->zsize != 1) { ImageClose(image); return NULL; } base = (unsigned char *)malloc(image->xsize*image->ysize*sizeof(unsigned char)); lptr = base; for(y=0; y<image->ysize; y++) { ImageGetRow(image,lptr,y,0); lptr += image->xsize; } ImageClose(image); return (GLubyte *) base; }
CPLErr SGIRasterBand::IReadBlock(CPL_UNUSED int nBlockXOff, int nBlockYOff, void* pImage) { SGIDataset* poGDS = (SGIDataset*) poDS; CPLAssert(nBlockXOff == 0); /* -------------------------------------------------------------------- */ /* Load the desired data into the working buffer. */ /* -------------------------------------------------------------------- */ return ImageGetRow(&(poGDS->image), (unsigned char*)pImage, nBlockYOff, nBand-1); }