如何把图片的紫色部分设为透明?请高手举个小程序例子!

良鹿 2005-01-23 12:29:55
如何把图片的紫色部分设为透明?请高手举个小程序例子!

例如:picture1,picture2 怎样把picture2中的图片显示在picture1中,但picture2中的背景为紫色的部分去掉呢?用了好长时间也没有做对,请高手举个小程序例子!
...全文
282 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jadeluo 2005-01-29
  • 打赏
  • 举报
回复
怎么会“边上”还有一点背景色?

是不是"边上"那些是类似背景色的某种颜色(由图片处理软件在柔化处理边缘时产生的)。
xinliangyu 2005-01-29
  • 打赏
  • 举报
回复
怎么会“边上”还有一点背景色?
xinliangyu 2005-01-29
  • 打赏
  • 举报
回复
在win2000中测试,源也目标尺寸都是300×500,每秒运行10次左右,连接几分钟没有明显问题,应该是安全的。至于在win98下的情况,就不得而知了。
xinliangyu 2005-01-29
  • 打赏
  • 举报
回复
“内存泄漏”?如真是那样,是值得当心的。抽时间试看
homezj 2005-01-29
  • 打赏
  • 举报
回复
部分实验表明:TransparentBlt在Win98系统中有内存泄漏问题,长时间多次使用,会发生系统资源耗尽现象。
xinliangyu 2005-01-28
  • 打赏
  • 举报
回复
'以下示例中,在窗体中加两个picturebox,分别名为picture1,picture2,设计时在picture1加一幅图片;加一个按钮,名command1:

Private Declare Function TransparentBlt Lib "msimg32.dll" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal crTransparent As Long) As Boolean

Private Sub Command1_Click()
'将picture1的一部图像[甚至示被图片覆盖住的背景色]拷贝到picture2中,覆盖其全部空间,并
'将picture1中黑色部分作透明化处理
TransparentBlt Picture2.hdc, 0, 0, ScaleX(Picture2.Width, ScaleMode, vbPixels), ScaleX(Picture2.Height, ScaleMode, vbPixels), _
Picture1.hdc, 0, 0, ScaleX(Picture1.Width, ScaleMode, vbPixels), ScaleX(Picture1.Height, ScaleMode, vbPixels), vbBlack
End Sub
xinliangyu 2005-01-28
  • 打赏
  • 举报
回复
看在分的份上:
比如你要把“紫色”透明化处理,则最后参数传rgb(255,0,255),蓝色传rgb(0,0,255)等等
良鹿 2005-01-28
  • 打赏
  • 举报
回复
crTransparent怎样使用呀!
良鹿 2005-01-28
  • 打赏
  • 举报
回复
xinliangyu(yxl) 你好!

例子我已经会做了,只是做出来的图片为什么边还有一点背景?
熊孩子开学喽 2005-01-26
  • 打赏
  • 举报
回复
如楼上所说,用TransparentBlt 这个API可以把一种指定的颜色作为透明色。
VBToy 2005-01-25
  • 打赏
  • 举报
回复
用下面的API函数,crTransparent就是要变成透明的颜色。
Private Declare Function TransparentBlt Lib "msimg32" (ByVal hdcDest As Long, ByVal nXOriginDest As Long, ByVal nYOriginDest As Long, ByVal nWidthDest As Long, ByVal nHeightDest As Long, ByVal hdcSrc As Long, ByVal nXOriginSrc As Long, ByVal nYOriginSrc As Long, ByVal nWidthSrc As Long, ByVal nHeightSrc As Long, ByVal crTransparent As Long) As Long
xinliangyu 2005-01-25
  • 打赏
  • 举报
回复
或者使用getpixel判断源图各点颜色是否为“紫色”。不是的用setpixel画到目标对象上,是的忽略。
jadeluo 2005-01-25
  • 打赏
  • 举报
回复
1. 生成Picture2图片(Original)的掩码图片(Mask), 生成的方法是Original图片中的紫色部分在Mask中是白色的, 其他部分全部是黑色的;

2. 按以下步骤显示Picture2的图片:
(1) Picture1 <= Picture1 AND Mask
(2) Picture1 <= Picture1 AND (Original OR Mask)
GHOSTSEA 2005-01-24
  • 打赏
  • 举报
回复
学习中,帮你顶一下

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧