Оттенок FreeImage при загрузке изображения - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь прочитать файл PNG, ранее я использовал SOIL, но решил использовать FreeImage, потому что он намного быстрее. Все работало нормально, так как я использовал только черно-белые изображения, но теперь, когда я начал использовать цветные изображения меньшего размера, я заметил, что оттенок был переключен.

Я загружаю изображения из файла .pak поэтому они сначала находятся в памяти, а затем передаются в FreeImage через функцию LoadFromHandle. Для ввода-вывода я использую тот, что на примерах FreeImage.

Texture texture(filter, alpha, wrapping);

BYTE* data = const_cast<unsigned char*>(reinterpret_cast<const unsigned char*>(&buffer.c_str()[0]));
MemIO memIO(data);

FIBITMAP* dib = FreeImage_LoadFromHandle(FIF_PNG, &memIO, (fi_handle)&memIO);   
dib = FreeImage_ConvertTo32Bits(dib);

int width = FreeImage_GetWidth(dib);
int height = FreeImage_GetHeight(dib);
int scan_width = FreeImage_GetPitch(dib);
BYTE* bits = (BYTE*)malloc(height * scan_width);
FreeImage_ConvertToRawBits(bits, dib, scan_width, 32, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, TRUE);

texture.GenerateTexture(width, height, bits);
FreeImage_Unload(dib);

return texture;

В качестве примера я загружаю спрайт Ness из привязки к земле, и результаты таковы:

NESS_HUE

...