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

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

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

Re[1]: ビットマップをピクチャーBoxへ表示


(過去ログ 111 を表示中)

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

■65758 / inTopicNo.1)  ビットマップをピクチャーBoxへ表示
  
□投稿者/ 0777 (1回)-(2013/03/16(Sat) 13:24:42)

分類:[.NET 全般] 

	すいません。困っています。
15000x15000の1BitBmpファイルをピクチャーBoxへ表示したのですが、メモリ不足でエラーが発生します。
<<< 表示方法 >>>
ピクチャーBoxのペイントイベント内にて
e.Graphics.DrawImage(mImage,mRect)
を実行。
mImage:System.Draw.Image
mRect:System.Draw.Rectangle

<<< 開発環境 >>>
WindowsXP SP3 32bit
VS2010:vb.net

もちろん、画像サイズによっては正常に表示が可能です。
あるサイズを超えると以上のエラーが発生します。
このBmpを全て表示させるとして、(間引きや範囲指定無し)で
表示する方法はありませんか?
よろしくお願いします。

引用返信 編集キー/
■65761 / inTopicNo.2)  Re[1]: ビットマップをピクチャーBoxへ表示
□投稿者/ とっちゃん (57回)-(2013/03/16(Sat) 15:41:00)
とっちゃん さんの Web サイト
No65758 (0777 さん) に返信
> 15000x15000の1BitBmpファイルをピクチャーBoxへ表示したのですが、メモリ不足でエラーが発生します。
<<省略>>
> もちろん、画像サイズによっては正常に表示が可能です。

> あるサイズを超えると以上のエラーが発生します。
> このBmpを全て表示させるとして、(間引きや範囲指定無し)で
> 表示する方法はありませんか?

エラーはどこでどんなエラーが出るのでしょうか?
画像を読み込むときですか?表示するときですか?


引用返信 編集キー/
■65766 / inTopicNo.3)  Re[2]: ビットマップをピクチャーBoxへ表示
□投稿者/ saga (1回)-(2013/03/16(Sat) 17:52:19)
PictureBoxのペイントイベントで描画するのではなく、
PictureBoxのImageプロパティにそのビットマップを渡した場合、メモリ不足エラーになりますか?
ペイントイベントは頻繁に呼び出される可能性があるので、ペイントイベントでのGraphicsへの描画は
あまり大きなイメージの描画には向かないような気がします。
引用返信 編集キー/
■65772 / inTopicNo.4)  Re[1]: ビットマップをピクチャーBoxへ表示
□投稿者/ Azulean (121回)-(2013/03/16(Sat) 23:01:26)
No65758 (0777 さん) に返信
> 15000x15000の1BitBmpファイルをピクチャーBoxへ表示したのですが、メモリ不足でエラーが発生します。

どのプラットフォームか書かれていませんが、32bit プロセスとして実行するのなら無理だと思ってください。
どうしても実現したいのであれば、表示する領域だけメモリ上に読み込むような工夫が必要です。
(その部分は自力で作る必要あり。Bitmap クラスを通じて一部分だけ切り出すようなアプローチでは結局できないので…)

DrawImage はたいていの場合、同じ大きさの 24bit か 32bit のバッファを内部で必要とするようです。(経験上の話)
仮に 15,000*15,000 の 32bit ビットマップが内部で確保されると仮定すると、900MB の連続した領域が必要になります。
一方、32bit プロセスではユーザーが利用可能なメモリ空間は 2GB を下回りますし、DLL が読み込まれる、メモリの確保・解放で断片化する、.NET のヒープで使用されるなどして連続した空き領域がなくなります。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -