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;
}
}
→ Bitmap クラス?(System.Drawing)
Bitmap クラスは、BMP ファイルのイメージをカプセル化したものです。
Stream やファイル名で JPEG を指定できますが、読み込んだデータは BMP のデータに変換されて、そのインスタンスに保持されます。
BMP は 1画素あたり24bit のデータになるのが普通(他にも持ち方はありますが)なので、24bit→3byte で、4000×5000×3=60MB のデータを最低限保持します。
それが 30枚分だと、イメージのデータだけで 1.8GB くらいになります。
Bitmap クラスは、他にも内部には色々なメンバを抱えていますし、プログラムの実行時には他のクラスのインスタンスもたくさんありますから、3GB くらい使うのは、特に不思議なことではありません。
コメント(0件)