2017-04-01 21 views
0

제목에서 언급했듯이 FreeImage를 사용하여 OpenGL 게임에서 텍스처를로드하지만 서브 이미지를 얻는 방법은 무엇입니까?FreeImage로 부 영상을 얻는 방법

나의 현재 코드는 다음과 같습니다

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; 

나는 무엇 (왼쪽 상단 모서리에있는 예를 들어 픽셀의 32 × 32 영역) 서브 이미지를 얻기 위해 변경해야?

답변

1

FreeImage_Copy()을 사용하면 지정한 영역의 하위 이미지를 얻을 수 있습니다. FreeImage_Copy()left, top, right, bottom이며, x, y, width, height이 아니라는 점에 유의하십시오. 이 지정된 이미지의 문자 그대로의 사본이기 때문에

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

FreeImage_Unload(subimage)해야합니다.

수행하여 당신이 다음 PNG에 저장 할 수 필요한 경우 :

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