トップページ > 過去ログ > 記事閲覧
画像を読み込んだときのメモリの使用量について
名前:Mynk 日時: 2007/04/06 10:19

管理人さんこんにちは! DXライブラリを使っていて、画像を読み込んだときの メモリの使用量について気になったことがあるので質問させてもらいます。 現在自作のプログラムで、画像や音声など、外部のファイルを一切読み込まずに起動すると ソフトが使用するメモリは18MBほどなのですが、 合計12MBほどの画像ファイルだけを読み込むようにしてソフトを起動すると、 メモリ使用量が一気に60MBを少し越えるほどになります。 こういったプログラムが内部でどういう処理に なっているのか…などは全くわからないのですが…。 単純に18MBに12MBの画像を読み込んで60MBになるのが ???だったので、この動作は正しいのかどうか教えてもらえればと思います(^^; ちなみに、DXライブラリのアーカイブ機能を使う設定で試しています。 アーカイブ化されたファイルを読み込む場合と、 アーカイブ化される前のフォルダを読み込む場合でも、 メモリ使用量は同じです。 また、メモリ使用量の確認はWindowsタスクマネージャで行いました。

Page: 1 |

Re: 画像を読み込んだときのメモリの使用量について ( No.1 )
名前: 日時:2007/04/07 03:37

Mynkさん始めまして。 少々質問なのですが、 その読み込ました画像のフォーマットは なんでしょうか? (PNG、256色BMPなどです) もし、PNGなどの容量が軽い画像を読み込ませていた場合、 読み込んだときのファイルは本来のファイルより 容量は増えることになります。
Re: 画像を読み込んだときのメモリの使用量について ( No.2 )
名前:Mynk 日時:2007/04/07 14:04

列さんはじめまして! 画像のフォーマットはほとんどが16〜256色(4〜8ビット)の BMPファイルです。 場合によっては、一つだけフルカラーのBMPを読み込むことがあります。 容量の節約にと思い、なるべく画像ファイル自体の容量は抑えようと したのですが、読み込んだ場合のメモリ使用量は 少なくはならない場合もあるのですね(^^; 以前は別のライブラリを使用していて、途中でDXライブラリに 乗り換えたので、ストレートにLoadGraph()関数を使うプログラムには なっていないのですが、簡略化して書くと enum{ BMP_01 = 0, BMP_02, BMP_03, MAX_BMP, }; int PIC_handle[MAXBMP]; void LoadGraphics( void ) { LoadCustom( BMP_01, "ファイル名", TRUE ); LoadCustom( BMP_02, "ファイル名", TRUE ); LoadCustom( BMP_03, "ファイル名", FALSE); } void LoadCustom( int Num, char *file, BOOL Trance ) { DeleteGraph( PIC_handle[ Num ] ); if( Trance == TRUE ) SetTransColor( 255,0,255 ); PIC_handle[ Num ] = LoadGraph( File ); } 読み込み部分はこのようなソースになっています。 DXライブラリを初期化した後、LoadGraphics()を呼び出して読み込んでいます。 ソース自体に間違いはあるでしょうか?(^^;
Re: 画像を読み込んだときのメモリの使用量について ( No.3 )
名前:管理人 日時:2007/04/08 14:03

 Mynkさんどうも、DXライブラリの管理人です。  列さんのご返答と殆ど同じですが、私も一応。  現時点では殆どのグラフィックスデバイスはパレットテクスチャに対応 していないので、元が4ビット〜8ビットパレットの画像であっても 読み込まれてテクスチャに転送された時点で16、32ビットカラーの 画像に変換されてしまいます。  なので、容量的には2〜8倍に増えることになります。 (16ビットになるか32ビットになるかは画面のカラービット深度によります)  ご掲載されたソースですが、SetTransColor は一度設定するとその後は ずっとその設定が生き続けますので、Trance が一度でも TRUE で呼ばれた 場合は以後の画像は Trance が TRUE でも FALSE でも SetTransColor(255,0,255); が適応された状態になってしまいます。
Re: 画像を読み込んだときのメモリの使用量について ( No.4 )
名前:Mynk 日時:2007/04/09 07:06

なるほど、そういうことでしたか! 確かソフトの使用メモリ使用量は50MB行ってないのを 数日前に確認した気がしていたので(不確かだったのですが) 60MB行くのはどこかミスしたのかと思いもしたんですが 画面の設定が原因だったのですね(^^; SetTransColorの方も指摘ありがとうございます。 列さん管理人さん、返信ありがとうございました(^^

Page: 1 |