人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VS2015 C#について教えてください。以下は写真Viewerのようなものです。8MByte JPG(5K×4Kサイズ)を30枚読み込みます。仕様メモリは3Gです。1枚は約170Mです。なぜこれだけメモリを使うのかわかりません。どなたか教えていただけますか?

public partial class Form1 : Form {
string[] files = System.IO.Directory.GetFiles("C:\\test", "*", System.IO.SearchOption.AllDirectories);
Bitmap[] bmp =new Bitmap[300];
private void Form1_Load(object sender, EventArgs e) {
for(int i = 0; i < files.Length-1; i++) {
bmp[i] = new Bitmap("c:\\dummy.jpg");
}
for (int i = 0; i < 30; i++) {
switch (rote(files[i])) {
case 1://そのまま
bmp[i] = new Bitmap(files[i]);bmp[i].RotateFlip(RotateFlipType.Rotate180FlipX);break;
case 2://上下反転
bmp[i] = new Bitmap(files[i]);bmp[i].RotateFlip(RotateFlipType.Rotate180FlipX);break;
}
}
pictureBox1.Image = bmp[0];
}
public Int16 rote(string filename) {
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(filename);
foreach (System.Drawing.Imaging.PropertyItem item in bmp.PropertyItems) {
if (item.Id == 0x0112) {
return BitConverter.ToInt16(item.Value, 0);
}
}
bmp.Dispose();
return -1;
}
}

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

仕様メモリ=使用メモリー
配列は500個とっています。実際にfolder textに500枚あって、このプログラムでは30枚ロードしています。


1 ● a-kuma3
●100ポイント

Bitmap クラス?(System.Drawing)

Bitmap クラスは、BMP ファイルのイメージをカプセル化したものです。
Stream やファイル名で JPEG を指定できますが、読み込んだデータは BMP のデータに変換されて、そのインスタンスに保持されます。

BMP は 1画素あたり24bit のデータになるのが普通(他にも持ち方はありますが)なので、24bit→3byte で、4000×5000×3=60MB のデータを最低限保持します。
それが 30枚分だと、イメージのデータだけで 1.8GB くらいになります。

Bitmap クラスは、他にも内部には色々なメンバを抱えていますし、プログラムの実行時には他のクラスのインスタンスもたくさんありますから、3GB くらい使うのは、特に不思議なことではありません。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ