2011-01-05 22 views
2

私のアプリケーションには2つ(実際には多くの)PNG(.png)の画像があります。どちらも透明なエリアがあります。.NETを使用して2つのPNG画像を1つの画像に結合する

私のアプリケーションでは、両方の画像を取得し、それらを結合し、結果を画像ボックスに表示したいと考えています。後で結果をボタンで保存したい。

これまでのところ、私は2つの画像を見つけてそれらを組み合わせることができましたが、透明性の問題はうまくいかないようです。つまり、ある画像を別の画像に重ねると、画像の背景が白い箱になっているため、上の画像だけが結果として表示されます。それはない。ここで

は、私のコードのビットです:

Dim Result As New Bitmap(96, 128) 
    Dim g As Graphics = Graphics.FromImage(Result) 
    Dim Name As String 
    For Each Name In BasesCheckList.CheckedItems 
     Dim Layer As New Bitmap(resourcesPath & "Bases\" & Name) 
     For x = 0 To Layer.Width - 1 
      For y = 0 To Layer.Height - 1 
       Result.SetPixel(x, y, Layer.GetPixel(x, y)) 
      Next 
     Next 
     Layer = Nothing 
    Next 

resourcesPathは、私のリソースフォルダへのパスです。 Basesはその中のフォルダです。画像の名前はNameです。

答えて

1

あなたのスケーリングの問題は、おそらく異なるDPIを持つ画像に関係していると思います。この場合、DrawImage()の画像は、グラフィックオブジェクトのDPIと一致するように画像を再スケーリングするため、実際には必要です。 1つの注意点:にサイズを指定しない場合、DrawImage()と同じ理由があるので、DrawImageUnscaled()と同じことを行います。

Dim result As New Bitmap(96, 128) 

Dim directoryName As String = String.Format("{0}Bases", resourcesPath) 
Using g As Graphics = Graphics.FromImage(result) 
    For Each imageName As String In BasesCheckList.CheckedItems 
     Dim fileName As String = IO.Path.Combine(directoryName, imageName) 
     Using layer As New Bitmap(fileName) 
      g.DrawImage(layer, 0, 0, 96, 128) 
     End Using 
    Next 
End Using 

より詳しい議論は、クロスポストすることを決めたXtreme VB Talkフォーラムです。それはワイヤが交差し、誰もが時間を無駄にする確率を高めてしまうので、将来それをしないでください。

3

問題は手作業で行うことです。しないでください。画像を描画するためのライブラリルーチンがたくさんあり、透明性を正しく処理する方法を知っています。

Dim Result As New Bitmap(96, 128) 
Dim g As Graphics = Graphics.FromImage(Result) 
Dim Name As String 
For Each Name In BasesCheckList.CheckedItems 
    Dim Layer As New Bitmap(resourcesPath & "Bases\" & Name) 
    g.DrawImageUnscaled(Layer, 0, 0); 
    Layer = Nothing 
Next 
+0

ありがとうございます、それは1つのことを除いて動作するようです:画像のプレビューに使用する画像ボックスは、画像の「サイズが変更された、より大きな」バージョンを表示するようです。最後に私はPictureBox.Image =結果を使用しました。なぜ画像がそのように表示されるのか分かりません。 – Voldemort

+0

@Omega:あなたの画像はあなたが書いているビットマップと同じサイズですか? –

+0

はい、ビットマップ "結果"は96x128で、私がテストに使用している2つのビットマップも96x128です。しかし、画像ボックスは2つまたは何か結果をズームするようだ... – Voldemort

関連する問題