2017-04-01 3 views
0

Wie im Titel erwähnt, verwende ich FreeImage, um Texturen in meinem OpenGL-Spiel zu laden, aber wie bekomme ich Unterbilder?Wie bekomme ich ein Unterbild mit FreeImage

Meine aktuellen Code sieht wie folgt aus:

FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; 
    FIBITMAP* dib = nullptr; 
    fif = FreeImage_GetFileType(filename, 0); 
    if (fif == FIF_UNKNOWN) 
     fif = FreeImage_GetFIFFromFilename(filename); 
    if (fif == FIF_UNKNOWN) 
     return nullptr; 

    if (FreeImage_FIFSupportsReading(fif)) 
     dib = FreeImage_Load(fif, filename); 
    if (!dib) 
     return nullptr; 

    BYTE* pixels = FreeImage_GetBits(dib); 
    *width = FreeImage_GetWidth(dib); 
    *height = FreeImage_GetHeight(dib); 
    *bits = FreeImage_GetBPP(dib); 

    int size = *width * *height * (*bits/8); 
    BYTE* result = new BYTE[size]; 
    memcpy(result, pixels, size); 
    FreeImage_Unload(dib); 
    return result; 

Was brauche ich, um die Unter-Bild zu bekommen zu ändern (zum Beispiel ein 32x32 Pixelbereich in der oberen linken Ecke)?

Antwort

1

Sie können FreeImage_Copy() verwenden, um ein Unterbild einer bestimmten Region zu erhalten. Beachten Sie, dass FreeImage_Copy()left, top, right, bottom und nicht x, y, width, height übernimmt.

FIBITMAP *image = ...; 

int x = 0; 
int y = 0; 
int width = 32; 
int height = 32; 

FIBITMAP *subimage = FreeImage_Copy(image, x, y, x + width, y + height); 

zu FreeImage_Unload(subimage) Denken Sie daran, wie es eine wörtliche Kopie des gegebenen Bildes ist.

Bei Bedarf Sie es dann, indem Sie auf ein PNG speichern könnte:

if (FreeImage_Save(FIF_PNG, subimage, "subimage.png")) 
    printf("Subimage successfully saved!\n"); 
else 
    printf("Failed saving subimage!\n"); 
Verwandte Themen