游戏开发论坛

 找回密码
 立即注册
搜索
查看: 12102|回复: 12

16位色详细原理解释

[复制链接]

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
发表于 2005-8-11 14:16:00 | 显示全部楼层 |阅读模式
记得以前有人问过16位色模式下设置关键色的问题,当时我也不清楚,想要知道。经过努力,终于找到了方法。发表出来帮助还不知道的朋友们。
16位色具体工作原理如下:
R     G      B
00000 111111 00000
前5位为红色,中间6位为绿色,后5位为蓝色。如上所例的二进制数字转换为16进制的数字就是&HF800,是纯绿色。同理还有红色&H7E0,蓝色&H1F。有兴趣的话也可以配出纯黄色、紫色……
这样的话,就可以使用更多的颜色作为背景透明色了。^-^

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
 楼主| 发表于 2005-8-11 14:17:00 | 显示全部楼层

Re: 16位色详细原理解释

有兴趣的朋友可以试试我做的取色软件,首先用DirectDraw在屏幕上随便用个16位颜色绘个点,截图,然后用软件就可以取得这点的24位颜色的值了,再涂在背景上,在程序中就可以把任意颜色设为关键色了。

sf_2005811141725.rar

10.65 KB, 下载次数:

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-8-11 14:28:00 | 显示全部楼层

Re:16位色详细原理解释

呵呵,补充一下

关于颜色格式,我们常用的是16位色,因为256色(8位)颜色太少,24位和32位内存和磁盘空间消耗太大,经典的做法就是使用16位色

大多数显卡支持的都是565格式,还有少数显卡用的是555格式

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-8-11 14:56:00 | 显示全部楼层

Re:16位色详细原理解释

还有一个,不要扔砖嫌我烦,在dx中设置那个colorkey,不能使用你提供的颜色值,比如红色&H7E0,红色应该是&HFF

因为参数是按照OLECOLOR类型设置的,也就是一个无符号的32位长整型,并不是16位的,而且是ABGR的顺序,高8位是alpha,低8位是红色

ddraw的SetColorKey参数是一个DDCOLORKEY结构,实际上是2个DWORD(无符号的32位长整型),为什么是2个,他表示了一个颜色范围,也就是说,ColorKey不仅能过滤一种颜色,还能过滤某一范围内的所有颜色。不过这个颜色范围有点不好理解,比如&HFF0000F0到&HFF0000FF,这个我们还可以理解,认为是红色F0到FF之间的颜色,但是如果是&HFF00F0FF到&HFF00FFFF,翻译成长整型就是4278251775到4278255615,如果单从长整型的数字来看,这个颜色并不表示是绿色F0到FF

那么微软有一个说法,显示设备自动会把四维颜色坐标转换为YUV三维颜色坐标,然后从低到高取一个线性的坐标值,但并不是所有的设备都支持或者说所有设备的转换都是一致的

哈哈,比较有意思


32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-8-11 16:01:00 | 显示全部楼层

Re:16位色详细原理解释

DDraw7的SetColorKey参数中的colorKey,经过我的多次测试,并不能滤去一个颜色范围,它指定的ColorKey完全由其中的Low决定,High你设定多少都无所谓。

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
 楼主| 发表于 2005-8-11 16:17:00 | 显示全部楼层

Re: Re:16位色详细原理解释

sandy_zc_1: Re:16位色详细原理解释

DDraw7的SetColorKey参数中的colorKey,经过我的多次测试,并不能滤去一个颜色范围,它指定的ColorKey完全由其中的Low决定,High你设定多少都无所谓。

是哦,不要太假!

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
 楼主| 发表于 2005-8-11 16:18:00 | 显示全部楼层

Re: Re:16位色详细原理解释

bigbook2000: Re:16位色详细原理解释

还有一个,不要扔砖嫌我烦,在dx中设置那个colorkey,不能使用你提供的颜色值,比如红色&H7E0,红色应该...

可是我就是在设置colorkey使用&H7E0才可以啊?
这到底是怎么回事呢?

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-8-11 21:22:00 | 显示全部楼层

Re: 16位色详细原理解释

DDraw7的SetColorKey参数中的colorKey,经过我的多次测试,并不能滤去一个颜色范围,它指定的ColorKey完全由其中的Low决定,High你设定多少都无所谓。


呵呵,不是说了吗,微软早就提示过你了

不能保证所有的设备都支持或者说所有设备的转换都是一致的

0

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2005-8-25 19:52:00 | 显示全部楼层

Re: 16位色详细原理解释

在传奇3中提取出来的位图很奇怪,其位深是 16 ,bifCompression 位是3,bifOffset为 66  (一般的应是 54)。用D3DXCreateTextureFromFile 加载失败,DirectX SDK 中的 texturetool 也不能识别。在某一看图软件中(非 ACDSee,记不清楚)查看属性是说这是 24位的。请问一下这是怎么回事

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
 楼主| 发表于 2005-8-26 00:18:00 | 显示全部楼层

Re:16位色详细原理解释

不会这么BT吧,你需要使用的话还是用软件转换一下吧,不要追究原因了……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 07:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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