将2个透明图像合并到Picturebox中

时间:2011-01-17 05:04:17

标签: vb.net visual-studio-2010 .net-4.0 gdi+ transparency

我正在尝试使用GDI +将两个PNG与我存储在ImageList中的透明度合并,然后在PictureBox中显示。我的PictureBox大小,第一个图像大小和第二个图像大小都是相同的。我认为这很简单,但下面的代码不起作用,我不知道为什么。我搜索过,但找不到任何专门处理PictureBoxes的代码片段。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    PictureBox1.Image = Nothing
    Dim myGraphic As Graphics = PictureBox1.CreateGraphics
    myGraphic.DrawImageUnscaled(ImageList1.Images(0), 0, 0)
    myGraphic.DrawImageUnscaled(ImageList1.Images(1), 0, 0)        
End Sub

有谁知道我错过了什么?在我点击按钮的那一刻,我看到PictureBox闪烁着图像一瞬间。

提前致谢。

2 个答案:

答案 0 :(得分:0)

首先,您在完全相同的位置绘制图像,因此您可能会冒一个图像完全覆盖另一个图像的风险。

尽管如此,仅仅依靠图形是不够的。您也需要使图片框控件无效。这将迫使它重绘自己。

作为对您当前程序的粗略测试,您可以将其最小化然后最大化它并查看PNG是否存在。这也将强制重绘图片框。

答案 1 :(得分:0)

啊,现在我明白我做错了什么。

这是我修改后的代码。问题解决了。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim newimage As New Bitmap(ImageList1.Images(0).Width, ImageList1.Images(0).Height)
        Dim g As Graphics = Graphics.FromImage(newimage)
        g.DrawImage(ImageList1.Images(0), 0, 0)
        g.DrawImage(ImageList1.Images(1), 0, 0)
        PictureBox1.Image = newimage
        g.Dispose()    
End Sub