游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5461|回复: 6

放置“透明”的图片

[复制链接]

66

主题

345

帖子

356

积分

中级会员

Rank: 3Rank: 3

积分
356
发表于 2004-6-27 08:12:00 | 显示全部楼层 |阅读模式
放置“透明”的图片
在 VB 中,如果你试着把一只有鸟的图片放到背景的一棵树上,你就会发现树会被鸟遮住一个矩形的区域(即鸟的图片矩形)。我们可以通过以下方法使图片上非鸟的其它部分变透明:
我们可以利用一个 WinAPI 函数 BitBlt 对图形进行一系列的位操作来达到此目的。
函数声明:
Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
参数解释:
目标环境:hDestDC——目标设备环境;x——左上角;y——顶端;nWidth——宽;nHeight——高
源环境:hSrcDC——源设备环境;xSrc——源左上角;ySrc——源顶端;
dwRop——位处理操作,如 vbSrcAnd;vbSrcAnd;vbSrcCopy;vbSrcErase;vbSrcInvert 等
(目标环境或源环境只能是 Picture, Form 或 Printer 对象。各单位为象素。)
进行处理之前,我们需要对鸟的图片进行处理:先复制一份相同的图形,将其应该透明之处(鸟的背景)设置为黑色(设此图为sPic),再将另一图做以下处理:要复制的地方(鸟)设置为黑色,其余地方设置(鸟的背景)为白色(设此图为Mask)。
设树的图形为名dPic。
最后,请加入以下代码:
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,Mask.hdc,0,0,vbScrCopy)
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,sPic.hdc,0,0,vbScrInvert)
后记:
1、VB 中的 PaintPicture 方法提供类似功能,但速度不及此方法;
2、在此方法上稍微加入一些代码,就不难实现动画的显示。
3、VB 例子中的 CallDlls 就使用此方法。

转载帖子,请注意版权!

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-7-3 23:04:00 | 显示全部楼层

Re:放置“透明”的图片

加入的代码要放在哪儿呢?

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-7-3 23:11:00 | 显示全部楼层

Re:放置“透明”的图片

为什么我执行之后"树"的图片变全黑?

我是放在timer控件中执行

25

主题

64

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2004-7-4 10:21:00 | 显示全部楼层

Re:放置“透明”的图片

你可能没有设置vbScrCopy和vbScrInvert的值

4

主题

32

帖子

32

积分

注册会员

Rank: 2

积分
32
发表于 2004-7-5 19:13:00 | 显示全部楼层

Re:放置“透明”的图片

那,vbScrCopy和vbScrInvert的值应该怎样设置呢?

2

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2004-7-12 16:21:00 | 显示全部楼层

Re:放置“透明”的图片

在vc里面也是差不多啊

4

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
发表于 2004-7-22 15:40:00 | 显示全部楼层

Re:放置“透明”的图片

用DirectX8不是更好吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-4 00:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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