首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用FreeImage获取子图像

如何利用FreeImage获取子图像
EN

Stack Overflow用户
提问于 2017-04-01 13:25:02
回答 1查看 382关注 0票数 0

正如标题中所述,我使用FreeImage在OpenGL游戏中加载纹理,但是如何获得子图像?

我的当前代码如下:

代码语言:javascript
复制
    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像素区域)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-02 06:05:03

可以使用FreeImage_Copy()获取指定区域的子图像。注意,FreeImage_Copy()使用的是left, top, right, bottom,而不是x, y, width, height

代码语言:javascript
复制
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:

代码语言:javascript
复制
if (FreeImage_Save(FIF_PNG, subimage, "subimage.png"))
    printf("Subimage successfully saved!\n");
else
    printf("Failed saving subimage!\n");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43157457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档