【问题标题】:Merging 2 Transparent Images Into a Picturebox将 2 个透明图像合并到一个图片框中
【发布时间】:2011-01-17 05:04:17
【问题描述】:

我正在尝试使用 GDI+ 将两个具有透明度的 PNG 合并到一个 ImageList 中,然后在 PictureBox 中显示它。 My PictureBox 尺寸、第一张图片尺寸和第二张图片尺寸都相同。我认为这很简单,但以下代码不起作用,我不知道为什么。我已经搜索过,但找不到任何专门处理 PictureBoxes 的代码 sn-ps。

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 与图像一起闪烁一瞬间。

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    首先,您将在完全相同的位置绘制图像,因此您确实存在一个图像完全覆盖另一个图像的风险。

    也就是说,仅在图形上绘图是不够的。您还需要使图片框控件无效。这将迫使它重新绘制自己。

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

    【讨论】:

    • 感谢您的回复。它应该覆盖它,因为第二个图像是具有透明度的叠加层。可以在这里找到我想要实现的示例:codeproject.com/KB/cs/Merge_Images_in_C_.aspx 我想这样做,但我不想写入文件,而是想在 PictureBox 中显示它(我的程序在 VB.Net 中而不是 C# 中)。您能否解释一下使图片框无效是什么意思?我尝试了最小化/最大化的事情,但什么也没发生。
    • 简单:只需调用 Control.Invalidate() 方法。见这里:msdn.microsoft.com/en-us/library/… 它的存在是因为绘制到实际屏幕是一个昂贵的过程。因此,不是在可绘制表面上显示您绘制的每件事的每一步,而是绘制所有这些并告诉表面自我更新。也就是说,我认为你的方法完全走错了路。您应该将所有绘图逻辑放在控件的 Paint-event 中。
    【解决方案2】:

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

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 2011-07-20
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 2014-08-24
      相关资源
      最近更新 更多