首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么FreeImage以BGR格式加载图像?

为什么FreeImage以BGR格式加载图像?
EN

Stack Overflow用户
提问于 2015-06-28 18:12:24
回答 2查看 3.2K关注 0票数 2

我使用Android和FreeImage库编写游戏,将图像加载到游戏中。它以BGR格式加载图像。是否可以以RGB格式加载?还是我需要手动交换R和B组件?

编辑的

我的设备是三星Galaxy S4(armv7架构)。这是代码`

代码语言:javascript
复制
FIMEMORY* fiStream = FreeImage_OpenMemory((BYTE*)data, size);
FREE_IMAGE_FORMAT fif = FreeImage_GetFileTypeFromMemory(fiStream);
if (FreeImage_FIFSupportsReading(fif))
{
    dib = FreeImage_LoadFromMemory(fif, fiStream, 0);
}

if (!dib)
    return;

data_ = FreeImage_GetBits(dib);
width_ = FreeImage_GetWidth(dib);
height_ = FreeImage_GetHeight(dib);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width_, height_, 0, GL_RGB, GL_UNSIGNED_BYTE, data_ );
EN

回答 2

Stack Overflow用户

发布于 2015-06-29 19:40:30

FreeImage实际上不需要使用BGR(A)排序。FreeImage文档中的"Pixel函数“一节包含以下语句(重点是我的):

然而,模型所使用的像素布局依赖于操作系统。使用逐字节的内存顺序来标记像素布局,然后FreeImage在小终端处理器(Windows )下使用BGRA像素布局,并在大端处理器(Mac或任何大端Linux / Unix)下使用RGBA像素布局。做出这一选择是为了简化图形API对FreeImage的使用。 然而,这种微妙的差别对用户来说是透明的。为了使像素访问操作系统独立,FreeImage定义了一组宏,用于在24位或32位DIB中设置或获取单个颜色组件。

但是,当您想要使用FreeImage的原始像素数据作为OpenGL的源时,这些宏将不会对您有所帮助。

但我不知道你对此有什么意见。OpenGL将接受BGR(A)和RGB(A)作为图像数据。实际上,FreeImage的选择并不坏,因为BGR(A)很可能是此类平台上的原生数据格式,因此使用这种格式是传输图像数据的最有效方法。

票数 5
EN

Stack Overflow用户

发布于 2017-01-09 17:36:05

可以构建FreeImage,使其始终以RGB顺序加载,而不依赖于体系结构。使用#define FREEIMAGE_COLORORDER=FREEIMAGE_COLORORDER_RGB.如果使用Android.mk构建FreeImage,请向其中添加以下行:

代码语言:javascript
复制
LOCAL_CPPFLAGS += -DFREEIMAGE_COLORORDER=FREEIMAGE_COLORORDER_RGB

如果您搜索FREEIMAGE_COLORORDER,可以在Source/FreeImage.h中找到这方面的文档:

颜色顺序: 指定的颜色分量(红色、绿色和蓝色)顺序会影响FIT_BITMAP类型的24位和32位图像以及作为调色板一部分的颜色。所有其他图像总是使用RGB顺序。默认情况下,颜色顺序与endianness耦合: 小端-> BGR 大端-> RGB 但是,您始终可以将FREEIMAGE_COLORORDER定义为任何已知的顺序-- FREEIMAGE_COLORORDER_BGR (0)和FREEIMAGE_COLORORDER_RGB (1),以指定首选的颜色顺序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31103121

复制
相关文章

相似问题

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