游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3113|回复: 3

16bit色彩下如何取得RGB色彩值

[复制链接]

13

主题

62

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2003-10-27 10:46:00 | 显示全部楼层 |阅读模式
各位,求救一下。
16bit色彩下如何取得RGB色彩值,
以及给一个像素赋RGB值。。
谢谢。。
上次Sea_bug大哥提示了一下,但至今尚未搞定,唉。
麻烦大家了。。

http://www.gameres.com/bbs/showthread.asp?postid=5100

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20468
发表于 2003-10-27 11:26:00 | 显示全部楼层

Re:16bit色彩下如何取得RGB色彩值

16bit色彩是在16bit数据中保存RGB三基色,现在一般的显卡都是565排列,也就是16bit的前5bit是R,紧接着6Bit是G,最后5Bit是B。

也有少数显卡是555格式,方法就如上了,只是高位1bit是空的。

13

主题

62

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2003-10-27 11:39:00 | 显示全部楼层

Re:16bit色彩下如何取得RGB色彩值

这个我知道。。。
我给你看看我现在的方法,请指正一下吧。3Q

    Rmask=ddsd.ddpfPixelFormat.dwRBitMask;
    Gmask=ddsd.ddpfPixelFormat.dwGBitMask;
    Bmask=ddsd.ddpfPixelFormat.dwBBitMask;
for循环
{
s_red=   (sPtr[pos] & Rmask)  >> 11;
s_green=(sPtr[pos]  & Gmask) << 5 >> 10;
s_blue= (sPtr[pos] & Bmask)  << 11 >> 11;
sPtr[pos]=s_red |  s_green |  s_blue;
pos:=pos+2;
}


这段代码的意思就是把一块矩形中每个像素的RGB取出并放回。

sPtr是lock之后的指针数组,pos是位置。
这样有什么问题?
我的结果是R始终为0,这块矩形颜色偏蓝。。
再次感谢。。

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20468
发表于 2003-10-27 21:25:00 | 显示全部楼层

Re:16bit色彩下如何取得RGB色彩值

我不知道具体的运算数值,就只能根据代码来分析一下。

首先:
s_red=   (sPtr[pos] & Rmask)  >> 11;
s_green=(sPtr[pos]  & Gmask) << 5 >> 10;
s_blue= (sPtr[pos] & Bmask)  << 11 >> 11;

这里的s_red,s_green,s_blue三个变量应该就是用来保存RGB三基色值,

接下来:
sPtr[pos]=s_red |  s_green |  s_blue;

这里直接将这三基色进行与运算,假设s_res,s_green_s_blue为(255,255,255),
那么就变成了 sPtr[pos] = 255 | 255 | 255;

我们这样看吧:
s_red = 00000000000111111; // 假设为255
s_green = 00000000000111111; // 假设为255
s_blue = 00000000000111111; // 假设为255
这样“与”出来会是什么样的结果?

我们是不是应该把s_red的"111111"部分移到前面?把s_green移到中间?

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-23 20:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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