游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5062|回复: 10

DirectDraw中我怎么只能对黑色或白色透明?

[复制链接]

26

主题

537

帖子

537

积分

高级会员

Rank: 4

积分
537
发表于 2007-2-7 08:56:00 | 显示全部楼层 |阅读模式
我将Colorkey的ColorSpaceHighValue和ColorSpaceLowValue都设为0,可以对黑色实现透明,设成FFFFFF也可以对白色实现透明,但是除此外设成其它任何值透明的都仍然是黑或白,对其它颜色不起作用。
ColorSpaceHighValue和ColorSpaceLowValue到底该用怎样的格式设置呢?

15

主题

129

帖子

129

积分

注册会员

Rank: 2

积分
129
QQ
发表于 2007-2-7 10:40:00 | 显示全部楼层

Re:DirectDraw中我怎么只能对黑色或白色透明?

要根据你程序当前的显示的位数确定,如果是16位的,一般情况下是5 6 5,然后把颜色转换成相应的值,如果是32位的 则为8 8 8 8,相同转换.下面是我转换的过程
#define _MY16RGB565(r,g,b) ( ((b)>>3) + (((g)>>2)<< 5) + (((r)>>3)<<11) )
#define _MY32RGB8888(a,r,g,b) ( (b) + ((g) << 8) + ((r) << 16) + ((a) << 24) )

26

主题

537

帖子

537

积分

高级会员

Rank: 4

积分
537
 楼主| 发表于 2007-2-7 12:40:00 | 显示全部楼层

Re:DirectDraw中我怎么只能对黑色或白色透明?

这样看也就是标准的整数格式,那么无论在哪种色度下,0xf000也不该是黑或白啊?

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2007-2-7 13:17:00 | 显示全部楼层

Re:DirectDraw中我怎么只能对黑色或白色透明?

从一开始学DirectDraw,你就已经落伍了,转来D3D阵营吧

26

主题

537

帖子

537

积分

高级会员

Rank: 4

积分
537
 楼主| 发表于 2007-2-7 16:40:00 | 显示全部楼层

Re:DirectDraw中我怎么只能对黑色或白色透明?

我暂时不打算进入3D领域,在纯2D方面DirectDraw毕竟比D3D开销要小

我说的现象有谁同样碰到过吗?

54

主题

2916

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
发表于 2007-2-7 18:18:00 | 显示全部楼层

Re: Re:DirectDraw中我怎么只能对黑色或白色透明?

系统崩溃: ReirectDraw中我怎么只能对黑色或白色透明?

我暂时不打算进入3D领域,在纯2D方面DirectDraw毕竟比D3D开销要小

我说的现象有谁同样碰到过吗?


如果是DX7的话,DirectDraw和D3D可以并用。

20

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2007-2-9 13:21:00 | 显示全部楼层

Re:DirectDraw中我怎么只能对黑色或白色透明?

这个,是什么意思?结果得什么?
#define _MY16RGB565(r,g,b) ( ((b)>>3) + (((g)>>2)<< 5) + (((r)>>3)<<11) )
#define _MY32RGB8888(a,r,g,b) ( (b) + ((g) << 8) + ((r) << 16) + ((a) << 24) )

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2007-3-11 07:46:00 | 显示全部楼层

Re: Re:DirectDraw中我怎么只能对黑色或白色透明?

千里马肝: ReirectDraw中我怎么只能对黑色或白色透明?

从一开始学DirectDraw,你就已经落伍了,转来D3D阵营吧


在跑之前你要学会走。
没有dshow和dos编程(包括文曲心basic)经验的,就。。。。。。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2007-3-11 08:00:00 | 显示全部楼层

Re:DirectDraw中我怎么只能对黑色或白色透明?

high是废的,不要管他,设置low即可。
dx的色彩和gdi色彩是不同的!!前者和硬件有关,后者永远是0x00bbggrr

不能指望自己完成这样的转换!

gdi色彩->ddraw色彩转换原理:

简单方法(测试通过):
随便建立一个表面,取得 dc,用gdi的SetPixel画一个点,比如SetPixel(hdc,0,0,GDIcolor)
然后ReleaseDC,再用dx的方法Lock表面,取得第一个点的色彩。即可。(GDI自动转换)

麻烦方法(按照ms的要求是用这种方法,但太麻烦,不推荐,
但用简单方法万一有的显卡出错,不过我试过N次。。。你自己取舍吧!):
为了防止同一个游戏的不同表面色彩格式不同,要这样做:

为每个表面都进行一次(这些表面是有用的,画完点要还原!):
取得dc,用gdi取得点(0,0)的 OLDcolor,然后SetPixel(hdc,0,0,GDIcolor)
releaseDC,然后Lock 取得转换后的色彩,
最后别忘了用gdi的SetPixel还原OLDcolor.

祥见(VB和C++):
http://ogdev.net/bbs/forum/ShowDoc.asp?AID=10277

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2007-3-12 18:26:00 | 显示全部楼层

Re:DirectDraw中我怎么只能对黑色或白色透明?

这个已经说过无数次了,在不同的颜色模式下需要将颜色值转换的。

直接Lock表面取得带透明色的点好了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 10:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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