2017-03-07 2 views
0

一般的な方法で、ピクチャボックスを描画します。ピクチャボックスは、最初にビットマップ上に描画され、その内容がピクチャボックスイメージにコピーされた後に描画されます。picturebox1.Image = bmp VS picturebox1.Image =新しいビットマップ(bmp)?

Bitmap bmp; 
bmp = new Bitmap(pb.Width, pb.Height); 

Graphics g = Graphics.FromImage(bmp); 
g.Draw(...); 

私はすべての描画スタッフを冠した後、次の使用の間に何か違いがあるのだろうか?

pb.Image = bmp; 

又は

pb.Image = new Bitmap(bmp); 
+0

第2構文はバグです。無駄なメモリの浪費*と*は、Dispose()を正しく呼び出すことを忘れるための確率を高めます。 Imageに割り当てられた古いビットマップを破棄することを忘れてしまったことももう一つの古典的なバグです。 –

+0

これはバグではなく、実際にはビットマップの新しいクリーンコピーを作成します。彼はオリジナルを処分すべきだと認めていますが、これは悪い方法ではありません。スピードのために私は非常にクローンを提案します。適切にしかし、私は、ピクチャボックスの画像がnullであるかどうかをチェックしたいと思います。私の経験では、メモリ管理を本当に吸います。 – Trey

+0

ああサイドノートは、グラフィックスオブジェクトに使用してください。 – Trey

答えて

1

はいpb.Image = BMPがあります。既存のビットマップをプロパティに割り当てます。 pb.Image =新しいビットマップ(bmp)。新しいビットマップを作成します。基本的にディープコピーです。

+0

あなたは正しいです。 .NETの他のクラスと同じ動作です。変更を見るためにピクチャボックスに最新表示が必要なので、私は混乱しました。割り当てを行うときに、リフレッシュが自動的に行われます。そのため、参照を設定するのではなく、深いコピーを作成するように見えます。 – tarpista