codice:
unsigned *read_texture(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;
}
tale funzione viene richiamata in questo modo: