gpt4 book ai didi

c++ - 如何使用 FreeImage 获取子图像

转载 作者:行者123 更新时间:2023-11-28 05:13:09 24 4
gpt4 key购买 nike

如标题所述,我正在使用 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 像素区域)?

最佳答案

您可以使用 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");

关于c++ - 如何使用 FreeImage 获取子图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43157457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com