相关疑难解决方法(0)

如何将16位RGB565转换为24位RGB888?

我已经掌握了16位rgb565图像(特别是Android帧缓冲区转储),我想将其转换为24位rgb888,以便在普通显示器上查看.

问题是,如何将5位或6位通道转换为8位?明显的答案是改变它.我开始写这篇文章:

puts("P6 320 480 255");
uint16_t buf;
while (read(0, &buf, sizeof buf)) {
    unsigned char red = (buf & 0xf800) >> 11;
    unsigned char green = (buf & 0x07e0) >> 5;
    unsigned char blue = buf & 0x001f;
    putchar(red << 3);
    putchar(green << 2);
    putchar(blue << 3);
}
Run Code Online (Sandbox Code Playgroud)

但是,这没有我想要的一个属性,而是用于0xffff映射到0xffffff,而不是0xf8fcf8.我需要以某种方式扩展价值,但我不确定这应该如何运作.

Android SDK附带了一个名为ddms(Dalvik Debug Monitor)的工具,可以捕获屏幕截图.据我所知,通过阅读代码,它实现了相同的逻辑; 但它的截图不同,白色映射为白色.

这是原始帧缓冲,ddms 的智能转换,以及上述算法的哑转换.请注意,后者稍微更暗,更绿.

(顺便说一下,这个转换是在ffmpeg中实现的,但它只是执行上面列出的哑转换,使LSB全部为零.)

我想我有两个问题:

  • 将rgb565转换为rgb888最明智的方法是什么?
  • DDMS如何转换其截图?

algorithm rgb colors

20
推荐指数
4
解决办法
5万
查看次数

标签 统计

algorithm ×1

colors ×1

rgb ×1