游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4086|回复: 5

哪个朋友可以帮忙解答一下RGB565转RGB888的函数(位运算)

[复制链接]

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2011-3-15 09:36:00 | 显示全部楼层 |阅读模式
struct PIXEL
{
    unsigned char R;
    unsigned char G;
    unsigned char B;
    unsigned char A;
};

PIXEL RGB565to888(unsigned short color, unsigned char Alpha)
{
    PIXEL pixel;
    unsigned int r = (color>>11) & 0x1f;
    unsigned int g = (color>> 5) & 0x3f;
    unsigned int b = (color    ) & 0x1f;

    pixel.A = Alpha;
    pixel.R = (r<<3) | (r>>2);   // 就是这个地方我看不明白,为什么这么算就能转成8位的值了。
    pixel.G = (g<<2) | (g>>4);
    pixel.B = (b<<3) | (b>>2);

    return pixel;
}



函数的功能是将一个r5g6b5的颜色值转换成r8g8b8的值,
如:在r5g6b5里rgb的值可能是:r:22 g:52 b:15 在8位下就应该是:r:180 g:210 b:123
代码中我不明白的地方,如果是我自己算的话,我可能是将r g b分别除以31然后再乘以255,但它仅用了3个位运算就可以算出来了,我实在看不明白,有朋友知道么?

11

主题

190

帖子

255

积分

中级会员

Rank: 3Rank: 3

积分
255
发表于 2011-3-15 10:45:00 | 显示全部楼层

Re:哪个朋友可以帮忙解答一下RGB565转RGB888的函数(位运算

其实就是左移三位将5bit颜色变成8bit,但后三位变成0,颜色会偏暗,所以拿高三位补上缺失的后三位




-----------------
欢迎光临我的博客 http://www.thecodeway.com

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2011-3-15 12:59:00 | 显示全部楼层

Re:哪个朋友可以帮忙解答一下RGB565转RGB888的函数(位运算

恩,有点感觉了。

21

主题

296

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
发表于 2011-3-15 14:38:00 | 显示全部楼层

Re:哪个朋友可以帮忙解答一下RGB565转RGB888的函数(位运算

  1. pixel.R = (r<<3) | (r>>2);
复制代码

高效率的转换方式啊。
既保证了前五位,又填补了后3位。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2011-3-15 16:40:00 | 显示全部楼层

Re: Re:哪个朋友可以帮忙解答一下RGB565转RGB888的函数(位运

thejinchao: Re:哪个朋友可以帮忙解答一下RGB565转RGB888的函数(位运算)??

其实就是左移三位将5bit颜色变成8bit,但后三位变成0,颜色会偏暗,所以拿高三位补上缺失的后三位

[img]h...


一位大侠给出的回答:
这个拿代数转换下就明白了:)
pixel.R = (r<<3) | (r>>2); // 就是这个地方我看不明白,为什么这么算就能转成8位的值了。

y = (x << 3) | (x >> 2);
  = (x * 8) + (x / 4);
  = 8.25 * x;

五进制转八进制,公式你也给了:y = (x / 31) * 255 = 8.225 * x;

现在更加清晰了。

0

主题

9

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2011-3-24 01:23:00 | 显示全部楼层

Re:哪个朋友可以帮忙解答一下RGB565转RGB888的函数(位运算

解释的相当精确到位,收藏了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-7 04:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表