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;
}
}

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2016/08/31 21:15:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:mai_mai_mail

仕様メモリ=使用メモリー

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

回答1件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント100pt

Bitmap クラス?(System.Drawing)

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

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

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません