C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 大きなサイズ(150MB)のビットマップ表示


(過去ログ 29 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■14108 / inTopicNo.1)  大きなサイズ(150MB)のビットマップ表示
  
□投稿者/ alianza (1回)-(2008/02/09(Sat) 09:40:38)

分類:[C#] 

開発環境:VS.NET 2003 C#

こんにちは。
ビットマップ画像を解析する為のソフトを
作成しています。

仕様上、約150MB(5000x30000)の画像が開ける様に
する必要があるのですが、下記エラーが出てしまいます。

----------------------------------------------------
このダイアログ ボックスではなく、Just-In-Time (JIT) デバッグを呼び出すための詳細については、 
このメッセージの最後を参照してください。

************** 例外テキスト **************
System.OutOfMemoryException: メモリが不足しています。
   at System.Drawing.Graphics.CheckErrorStatus(Int32 status)
   at System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y, Int32 width, Int32 height)
   at System.Drawing.Graphics.DrawImage(Image image, Rectangle rect)
   at System.Windows.Forms.PictureBox.OnPaint(PaintEventArgs pe)
   at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
   at System.Windows.Forms.Control.WmPaint(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
----------------------------------------------------


他の数個の画像ビューワでは問題なく表示できますので、PCに依存する
問題ではないかと思います。

コードは、下記の通りです。
this.pictureBox1.Image = Image.FromStream(hStream);

他にもいろいろ試しましたが、上手く行きませんでした。

申し訳ございませんが、アドバイスをお願い致します。

引用返信 編集キー/
■14109 / inTopicNo.2)  Re[1]: 大きなサイズ(150MB)のビットマップ表示
□投稿者/ やじゅ (136回)-(2008/02/09(Sat) 10:07:53)
やじゅ さんの Web サイト
2008/02/09(Sat) 10:13:16 編集(投稿者)

No14108 (alianza さん) に返信
>
> 他の数個の画像ビューワでは問題なく表示できますので、PCに依存する
> 問題ではないかと思います。
>

他の画像ビュワーは、表示範囲のみデータを読み込んでいるのでメモリオーバーには
ならないのでしょう。
ある程度スクロールしたら位置を計算してデータを読みにいっている

> コードは、下記の通りです。
> this.pictureBox1.Image = Image.FromStream(hStream);
>

このように簡単にはできません。ある程度プログラムを組む必要があります。

画像の一部を切り取って表示するhttp://dobon.net/vb/dotnet/graphics/triming.html
VB 2005での画像表示について
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43279&forum=7&2
引用返信 編集キー/
■14110 / inTopicNo.3)  Re[2]: 大きなサイズ(150MB)のビットマップ表示
□投稿者/ alianza (3回)-(2008/02/09(Sat) 11:16:23)
やじゅさん、
早速アドバイス本当にありがとうございます。

  > 他の画像ビュワーは、表示範囲のみデータを読み込んでいるのでメモリオーバーには
  > ならないのでしょう。
  > ある程度スクロールしたら位置を計算してデータを読みにいっている

  今回作成しているアプリケーションは、画像解析が目的になりますので、
 ズーム等をした際には、画像の一部を表示する形になりますが、
 画像全体を表示する必要もあります。

 画像分割というのは、例えば、PictureBoxを縦横に4つ並べて表示させる
 ということなのでしょうか。

 P.S:Windowsのビューア等がどの様に表示しているのかが
   非常に気になります。

引用返信 編集キー/
■14113 / inTopicNo.4)  Re[3]: 大きなサイズ(150MB)のビットマップ表示
□投稿者/ やじゅ (137回)-(2008/02/09(Sat) 12:09:42)
やじゅ さんの Web サイト
No14110 (alianza さん) に返信
> 今回作成しているアプリケーションは、画像解析が目的になりますので、
>  ズーム等をした際には、画像の一部を表示する形になりますが、
>  画像全体を表示する必要もあります。

画像全体を表示するとしても縮小されて表示することになります。
縮小するアルゴリズムはいろいろありますが、
簡単に例として4分の1に縮小するなら、4ドット間隔にデータを読んで
詰めて表示すればいいわけです。

>  画像分割というのは、例えば、PictureBoxを縦横に4つ並べて表示させる
>  ということなのでしょうか。

そうではありません、PictureBoxではなくあくまでメモリやファイル上です。
一括にデータをメモリ上にもっていくとメモリオーバーとなるため
ある程度の大きさを1単位1ページとし、メモリ上にページを入れ替えたりして
メモリオーバーにならないようにするのです。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -