如何基于2个png的复合创建图像,每个png具有透明区域

时间:2012-11-19 14:24:07

标签: .net graphics

我有3张图片。

  1. GreenBackground.png
  2. RedCircle.png
  3. BlueCircle.png
  4. 它们都是80x60张照片

    红色和蓝色圆圈出现在该区域内的不同位置。

    我正在尝试通过首先加载背景,然后加载红色圆圈,最后加载蓝色圆圈来生成合成图像。

    然而,在资源管理器中,生成的Results.png图像显示为完全黑色,并且在Windows照片查看器中打开时,它看起来完全透明。

        Dim Background = Image.FromFile("GreenBackground.png", True)
        Dim RedCircle = Image.FromFile("RedCircle.png", True)
        Dim BlueCircle = Image.FromFile("BlueCircle.png", True)
    
        Dim Canvas = Graphics.FromImage(Background)
        Canvas.DrawImage(RedCircle, New Point(0, 0))
        Canvas.DrawImage(BlueCircle, New Point(0, 0))
        Dim Result As New Bitmap(Background.Width, Background.Height, Canvas)
        Result.Save("Result.png", System.Drawing.Imaging.ImageFormat.Png)
    

    任何想法我可能做错了什么?

1 个答案:

答案 0 :(得分:1)

您使用的Bitmap构造函数仅使用传递的图形对象的DPI:

  

Graphics对象,指定新Bitmap的分辨率。 MSDN Ref

所以基本上你现在正在创建一个新的空位图。您的图形对象设置为修改背景图像,因此您需要做的只是:

Background.Save("Result.png", System.Drawing.Imaging.ImageFormat.Png) 在修改结束时。

LinqPad示例:

Sub Main
    Dim image = System.Drawing.Image.FromFile("y.png", true)
    Dim overlay = System.Drawing.Image.FromFile("x.png", true)
    Dim g = System.Drawing.Graphics.FromImage(image)
    g.DrawImage(overlay, new System.Drawing.Point(0,0))
    image.Save("result.png", System.Drawing.Imaging.ImageFormat.Png)
End Sub