質問

私は、他の画像のカップルと画像をオーバーレイしようとしています。私はそれを行うには、このコードを使用します:

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 +をしたくないと仮定します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top