首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RGB888到RGB565 /位移位

RGB888到RGB565 /位移位
EN

Stack Overflow用户
提问于 2012-07-13 21:05:49
回答 2查看 16.6K关注 0票数 11

我想使用位移位将三个字符组合成一个简短的字符。这是为了实现RGB565调色板(其中红色有5位,绿色有6位,蓝色有5位)。

这是我的示例程序,我只是在中间遗漏了一步,我想我需要做一些a运算。

代码语言:javascript
复制
#include <stdio.h>

int main( ){
        unsigned char r, g, b;
        unsigned short rgb;

        r = 255;        // 0xFF 1111 1111
        g = 100;        // 0x64 0110 0100
        b = 50;         // 0x32 0011 0010

        r = r >> 3;     // 0x31 0001 1111
        g = g >> 2;     // 0x19 0001 1001
        b = b >> 3;     // 0x06 0000 0110

        //r = r & something; //
        //g = g & something; //
        //b = b & something; //

        // Desired result:
        //          R      G     B
        // 0xFB26 11111 011001 00110
        rgb = r | g | b;

        printf( "r 0x%x g 0x%x b 0x%x, rgb 0x%08x\n", r, g, b, rgb );
}

你可以在最后看到我想要的结果。谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-13 21:23:17

代码语言:javascript
复制
rgb = ((r & 0b11111000) << 8) | ((g & 0b11111100) << 3) | (b >> 3);

我们将r左移11位,将g左移5位,并将这些与b右移3位进行逐位或。(注意:如果需要,假设这些值已经被正确屏蔽,以删除任何不需要的位。)

票数 16
EN

Stack Overflow用户

发布于 2017-08-24 03:15:43

谢谢你的A2A。我也曾面临过同样的问题。下面的代码将对您有所帮助。

代码语言:javascript
复制
unsigned int r,g,b; // Pixel data in the RGB
unsigned char x1,x2; // The container for resulting 2 bytes

x1 = (r & 0xF8) | (g >> 5); // Take 5 bits of Red component and 3 bits of G component

x2 = ((g & 0x1C) << 3) | (b  >> 3); // Take remaining 3 Bits of G component and 5 bits of Blue component

您可以在GIThub中找到python程序。https://github.com/ajay126z/RGB888ToRGB565-Converter

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

https://stackoverflow.com/questions/11471122

复制
相关文章

相似问题

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