gpt4 book ai didi

c++ - 使用 FreeImage 加载 RAW 灰度图像

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:16 26 4
gpt4 key购买 nike

如何使用 FreeImage 加载 RAW 16 位灰度图像?

我有包含原始数据的 unsigned char* 缓冲区。我知道它的像素尺寸,我知道它是 16 位灰度。

我正在尝试加载它

FIBITMAP* bmp = FreeImage_ConvertFromRawBits(buffer, 1000, 1506, 2000, 16, 0, 0, 0);

并得到损坏的 RGB888 图像。目前还不清楚我应该为灰度使用什么颜色蒙版,因为它只有一个 channel 。

最佳答案

经过多次实验,我发现使用 FreeImage_ConvertFromRawBitsEx 的部分解决方案:

FIBITMAP* bmp = FreeImage_ConvertFromRawBitsEx(true, buffer, FIT_UINT16, 1000, 1506, 2000, 16, 0xFFFF, 0xFFFF, 0xFFFF);

(感谢@1201ProgramAlarm 提供带掩码的提示)。

通过这种方式,FreeImage 以某种半自定义格式加载数据。大多数转换和保存功能(已尝试:JPG、PNG、BMP、TIF)都失败。

由于无法加载原生 16 位格式的数据,我更愿意将其转换为 8 位灰度

unsigned short* buffer = new unsigned short[1000 * 1506];

// load data

unsigned char* buffer2 = new unsigned char[1000 * 1506];
for (int i = 0; i < 1000 * 1506; i++)
buffer2[i] = (unsigned char)(buffer[i] / 256.f);

FIBITMAP* bmp = FreeImage_ConvertFromRawBits(buffer2, 1000, 1506, 1000, 8, 0xFF, 0xFF, 0xFF, true);

这真的不是最好的解决方案,我什至不想将其标记为正确答案(将等待更好的答案)。但在此之后,格式将对 FreeImage 很方便,它可以将数据保存/转换为任何格式。

关于c++ - 使用 FreeImage 加载 RAW 灰度图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48245949/

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