freeimage.h
FreeImage_GetBits
DLL_API BYTE *DLL_CALLCONV FreeImage_GetBits(FIBITMAP *dib);
Devuelve un puntero a los bits de datos de un mapa de bits. Dependerá de ti interpretar estos datos correctamente, de acuerdo con los resultados de FreeImage_GetBPP, FreeImage_GetRedMask, FreeImage_GetGreenMask y FreeImage_GetBlueMask.
Por motivos rendimiento, la dirección devuelta por FreeImage_GetBits tiene un alineamiento de 16 bytes.
Nota: FreeImage_GetBits retornará NULL si el mapa de bits no contiene datos de pixels (es decir si sólo contiene la cabecera y posiblemente alguno o todos los metadatos). Ver también FreeImage_HasPixels.
// this code assumes there is a bitmap loaded and // present in a variable called 'dib' unsigned width = FreeImage_GetWidth(dib); unsigned height = FreeImage_GetHeight(dib); unsigned pitch = FreeImage_GetPitch(dib); FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(dib); // test pixel access avoiding scanline calculations // to speed-up the image processing if(image_type == FIT_RGBF) { BYTE *bits = (BYTE*)FreeImage_GetBits(dib); for(y = 0; y < height; y++) { FIRGBF *pixel = (FIRGBF*)bits; for(x = 0; x < width; x++) { pixel[x].red = 128; pixel[x].green = 128; pixel[x].blue = 128; } // next line bits += pitch; } } else if((image_type == FIT_BITMAP) && (FreeImage_GetBPP(dib) == 24)) { BYTE *bits = (BYTE*)FreeImage_GetBits(dib); for(y = 0; y < height; y++) { BYTE *pixel = (BYTE*)bits; for(x = 0; x < width; x++) { pixel[FI_RGBA_RED] = 128; pixel[FI_RGBA_GREEN] = 128; pixel[FI_RGBA_BLUE] = 128; pixel += 3; } // next line bits += pitch; } }