- PR -

マルチスレッドによるDrawImageについて

投稿者投稿内容
たけうち
会議室デビュー日: 2007/12/13
投稿数: 7
投稿日時: 2007-12-19 15:26
あぶぽんさん、またまたありがとうございます。

Image.FromStreamを使用する場合、FileStreamは、閉じてはダメみたいです。

MSDNにも「Image の有効期間の間は、このストリームを開いておく必要があります。」
と記載されています。

試しに閉じてみたところ、「GDI+ 汎用エラー〜」ってのがDrawImageの呼び出しで発生しました(^^;

まだ、実験中なんで確信は無いですが、イメージの開き方によってDrawImageのパフォーマンスにも影響するみたいです。
FromStreamだと、イメージのオープンは速いけど、DrawImageが遅い。
new Bitmap() or Image.FromFileだと、オープンは遅いけど、DrawImageが速い。

あと、FromStreamにFileStream以外を渡せないかも研究してみます。

色々と研究する余地がありそうです!!
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2007-12-19 15:40
たびたび、失礼します。

実際、PictureBoxに貼り付けたときはOKな訳で、

このサイトの、
http://jeanne.wankuma.com/tips/image/picturebox.html

コード:
this.pictureBox1.Image = Image.FromStream(hStream);



↑ここで何が起きてるかがヒントです。。
って、分かってないんで、調べてもらえると嬉しいです。

もしくは、どなかたフォローを!
たけうち
会議室デビュー日: 2007/12/13
投稿数: 7
投稿日時: 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オブジェクト内のデータの持ち方に違いがあるのだと思います。

もう少し調査してみます。

スキルアップ/キャリアアップ(JOB@IT)