- - PR -
マルチスレッドによるDrawImageについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-12-19 15:26
あぶぽんさん、またまたありがとうございます。
Image.FromStreamを使用する場合、FileStreamは、閉じてはダメみたいです。 MSDNにも「Image の有効期間の間は、このストリームを開いておく必要があります。」 と記載されています。 試しに閉じてみたところ、「GDI+ 汎用エラー〜」ってのがDrawImageの呼び出しで発生しました(^^; まだ、実験中なんで確信は無いですが、イメージの開き方によってDrawImageのパフォーマンスにも影響するみたいです。 FromStreamだと、イメージのオープンは速いけど、DrawImageが遅い。 new Bitmap() or Image.FromFileだと、オープンは遅いけど、DrawImageが速い。 あと、FromStreamにFileStream以外を渡せないかも研究してみます。 色々と研究する余地がありそうです!! | ||||
|
投稿日時: 2007-12-19 15:40
たびたび、失礼します。
実際、PictureBoxに貼り付けたときはOKな訳で、 このサイトの、 http://jeanne.wankuma.com/tips/image/picturebox.html
↑ここで何が起きてるかがヒントです。。 って、分かってないんで、調べてもらえると嬉しいです。 もしくは、どなかたフォローを! | ||||
|
投稿日時: 2007-12-19 16:07
あぶぽんさん、何度でも失礼してください(^^;
ありがとうございます。 FileStreamのCloseについて分かったことがあります。 どうやら、Image.FromStream (Stream, Boolean, Boolean) メソッドの第三引数で動作が異なるようです。 MSDNでは validateImageData イメージ データを検証する場合は true。それ以外の場合は false。 となっており、これを false にすると、FileStreamをクローズできません。 true にするとクローズできます。 new Bitmap()やFromFile()で作成した場合もクローズできます。 true にすると new Bitmap() や FromFile と同等のパフォーマンスになるので、 Imageオブジェクト内のデータの持ち方に違いがあるのだと思います。 もう少し調査してみます。 |