如何把图片的紫色部分设为透明?请高手举个小程序例子!例如:picture1,picture2 怎样把picture2中的图片显示在picture1中,但picture2中的背景为紫色的部分去掉呢?用了好长时间也没有做对,请高手举个小程序例子!

解决方案 »

  1.   

    1. 生成Picture2图片(Original)的掩码图片(Mask), 生成的方法是Original图片中的紫色部分在Mask中是白色的, 其他部分全部是黑色的;2. 按以下步骤显示Picture2的图片:
      (1) Picture1 <= Picture1 AND Mask
      (2) Picture1 <= Picture1 AND (Original OR Mask)
      

  2.   

    或者使用getpixel判断源图各点颜色是否为“紫色”。不是的用setpixel画到目标对象上,是的忽略。
      

  3.   

    用下面的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
      

  4.   

    如楼上所说,用TransparentBlt 这个API可以把一种指定的颜色作为透明色。
      

  5.   

    看在分的份上:
    比如你要把“紫色”透明化处理,则最后参数传rgb(255,0,255),蓝色传rgb(0,0,255)等等
      

  6.   

    '以下示例中,在窗体中加两个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 BooleanPrivate 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
      

  7.   

    xinliangyu(yxl) 你好!例子我已经会做了,只是做出来的图片为什么边还有一点背景?
      

  8.   

    部分实验表明:TransparentBlt在Win98系统中有内存泄漏问题,长时间多次使用,会发生系统资源耗尽现象。
      

  9.   

    在win2000中测试,源也目标尺寸都是300×500,每秒运行10次左右,连接几分钟没有明显问题,应该是安全的。至于在win98下的情况,就不得而知了。