質問
私は、他の画像のカップルと画像をオーバーレイしようとしています。私はそれを行うには、このコードを使用します:
Dim gbkn As Bitmap = New Bitmap(7001, 7001, Imaging.PixelFormat.Format32bppArgb)
Dim g As Graphics = Graphics.FromImage(CType(gbkn, Image))
g.DrawImage(Image.FromFile("C:\background.png"), New Point(0, 0))
g.DrawImage(Image.FromFile("C:\firstlayer.png"), New Point(0, 0))
g.DrawImage(Image.FromFile("C:\secondlayer.png"), New Point(0, 0))
これは最初の二つの絵で動作します。その後OutOfMemoryException例外がスローされます。 私は、画像のサイズが大きい実現します。 しかし、それはオーバーレイを行うと、どこかにそれらをchacheする何とかことができないのですか?
私は、ディスクへの最初のオーバーレイ、空きメモリの結果を保存し、私はまだ例外を取得別の層を追加した場合でもます。
どのように私はこの問題にアプローチする必要がありますか?
JosP
解決
は分からないのですが、あなたは、あなたがビットマップに描画された画像を廃棄されていません。これは助けていますか?
Dim gbkn As Bitmap = New Bitmap(7001, 7001, Imaging.PixelFormat.Format32bppArgb)
Dim g As Graphics = Graphics.FromImage(CType(gbkn, Image))
Dim img As Image = Image.FromFile("C:\background.png")
g.DrawImage(img, New Point(0, 0))
img.Dipose()
img As Image = Image.FromFile("C:\firstlayer.png")
g.DrawImage(img, New Point(0, 0))
img.Dispose()
img As Image = Image.FromFile("C:\secondlayer.png")
g.DrawImage(Image.FromFile("C:\secondlayer.png"), New Point(0, 0))
img.Dispose()
私は真剣に、私はその問題ない画像2-3倍の大きさで働いているとして、それはイメージとは何かを持っている疑い。また、OutOfMemoryErrorの例外は、GDIが頻繁にメモリとは何の関係もないことをスローします<皮肉>非常に便利な皮肉>のいずれかのエラーのようです。
他のヒント
あなたが最初の空のビットマップを必要ですか?それがなければ、あなただけの3 * 200メガバイトの代わりに、4 * 200メガバイトを割り当て、おそらくこれは動作します:
Dim g As Graphics = Graphics.FromImage("C:\background.png")
g.DrawImage(Image.FromFile("C:\firstlayer.png"), New Point(0, 0))
// and so on
これは、いくつかのステップでオーバーレイが機能しないことを奇妙だ、私はあなたがこのケースで正しくメモリを解放していないと思います。おそらくあなたがこのアプローチを使用しているコードを投稿する方がよいでしょう。
私はまた、あなたがどこかに元の画像が必要なのですか、いくつかの画像編集プログラムを使用してPNGファイルをマージすることは非常に容易になるよう具体的には、この使用してC#の/ GDI +をしたくないと仮定します。