正如标题中所述,我使用FreeImage在OpenGL游戏中加载纹理,但是如何获得子图像?
我的当前代码如下:
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;我需要更改什么才能得到子图像(例如左上角的32x32像素区域)?
发布于 2017-04-02 06:05:03
可以使用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");https://stackoverflow.com/questions/43157457
复制相似问题