游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5997|回复: 19

[求助]透明色问题

[复制链接]

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
发表于 2006-8-20 23:03:00 | 显示全部楼层 |阅读模式
用vb.net学ddraw中,透明色的设定是:
Dim key As DDCOLORKEY
key.low = xxx
key.high = xxx
objDDOffSurf.SetColorKey(CONST_DDCKEYFLAGS.DDCKEY_SRCBLT, key)

但是我并不知道图片的透明色的值啊,我只知道图片左上角的第一个像素就是透明色,有什么函数能取到那个值吗?还需不需要转换成ddraw能识别的值呢?

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 2006-8-21 00:50:00 | 显示全部楼层

Re:[求助]透明色问题

就是如何将32,24,16位argb值转换成key所要求的integer型的

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 2006-8-21 01:09:00 | 显示全部楼层

Re:[求助]透明色问题

错了是要求的DDCOLORKEY类型

10

主题

411

帖子

411

积分

中级会员

Rank: 3Rank: 3

积分
411
发表于 2006-8-21 08:13:00 | 显示全部楼层

Re:[求助]透明色问题

示例:(从DX9 SDK代码里抽出来的)

Dim S2 As Surface

Dim key As ColorKey

key.ColorSpaceHighValue = 0

key.ColorSpaceLowValue = 0

S2.SetColorKey(ColorKeyFlags.SourceDraw, key)


学VB.NET 必须把原来的VB6设计思想扔掉。

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2006-8-21 12:00:00 | 显示全部楼层

Re:[求助]透明色问题

看来楼主用的是Dx7吧。

如果想知道某一个点的颜色的话,那么把那个表面Lock,
之后GetLockedArray ,就可以取出对应点的颜色值了。
当然之后还必须UnLock。

DDCOLORKEY里面的high和low都是颜色值,如果当前显示器的色深是24位的话,就和RGB函数得出的颜色值是一样的,如果是16位的话,必须另外编写颜色产生函数。

20

主题

451

帖子

470

积分

中级会员

Rank: 3Rank: 3

积分
470
发表于 2006-8-21 13:49:00 | 显示全部楼层

Re:[求助]透明色问题

用RGB函数就可以得到颜色 的integer值:
dim aa as integer=RGB(32,12,56)

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
发表于 2006-8-21 17:58:00 | 显示全部楼层

Re:[求助]透明色问题

16位色详细原理解释

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

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
发表于 2006-8-21 18:00:00 | 显示全部楼层

Re:[求助]透明色问题

http://bbs.gameres.com/showthread.asp?threadid=34669
是我以前这个贴的完整内容

我还有个软件直接转换24位色为16位int类型的颜色
可以取色并且直接将值转换位16位色的软件
http://bbs.gameres.com/showthread.asp?threadid=36597

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2006-8-21 18:59:00 | 显示全部楼层

Re:[求助]透明色问题

其实目前大多数显卡的16位颜色模式是RGB565的。不过极少数使用的是RGB555的模式。

Public Function DxRGB1(ByVal R, ByVal G, ByVal B, ByVal Type1 As String) As Long
Dim Bpp As Integer, n1 As Long
Type1 = UCase$(Type1)
If Type1 = "X1R5G5B5" Then
  Bpp = 5
ElseIf Type1 = "R8G8B8" Then
  Bpp = 8
ElseIf Type1 = "X8R8G8B8" Then
  Bpp = 8
ElseIf Type1 = "R5G6B5" Then
  Bpp = 5
End If

DxRGB1 = B
DxRGB1 = DxRGB1 + G * (2 ^ Bpp)
n1 = 2 ^ Bpp * (2 ^ IIf(Type1 = "R5G6B5", 6, Bpp))
DxRGB1 = DxRGB1 + R * n1 'Dx中的RGB位置和标准RGB函数刚好相反

End Function

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 2006-8-21 20:17:00 | 显示全部楼层

Re: Re:[求助]透明色问题

游戏之家5世: Re:[求助]透明色问题

示例:(从DX9 SDK代码里抽出来的)

Dim S2 As Surface

Dim key As ColorKey

key.ColorSpaceHighV...


我用ddraw7,没有colorkey这个类
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 05:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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