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;
    }
}