0

3枚の画像があります。

  1. GreenBackground.png
  2. RedCircle.png
  3. BlueCircle.png

それらはすべて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)

私が間違っているかもしれないアイデアはありますか?

4

1 に答える 1

1

使用している Bitmap コンストラクターは、渡されたグラフィックス オブジェクトの DPI のみを使用します。

新しい Bitmap の解像度を指定する Graphics オブジェクト。MSDN リファレンス

基本的に、現時点では新しい空のビットマップを作成しています。グラフィックス オブジェクトは背景画像を変更するように設定されているため、必要なことは次のとおりです。

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
于 2012-11-19T16:46:55.103 に答える