2
画像のチャンネル順を変更して複数の画像を生成するアプリケーションを作成しようとしています。私はこのコードを使用しましたが、1500x1500pxを超えるイメージをロードするとメモリが不足するというエラーが表示されます。小さな画像の場合、コードは機能しますビットマップエラー - メモリ不足
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
try
{
//Getting The Image From The System
OpenFileDialog open = new OpenFileDialog();
open.Filter =
"Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp";
if (open.ShowDialog() == DialogResult.OK)
{
Bitmap img = new Bitmap(open.FileName);
pictureBox1.Image = img;
//get image dimension
int width = img.Width;
int height = img.Height;
//3 bitmap for red green blue image
Bitmap a01img = new Bitmap(img);
Bitmap a02img = new Bitmap(img);
Bitmap a03img = new Bitmap(img);
Bitmap a04img = new Bitmap(img);
Bitmap a05img = new Bitmap(img);
Bitmap a06img = new Bitmap(img);
Bitmap a07img = new Bitmap(img);
Bitmap a08img = new Bitmap(img);
Bitmap a09img = new Bitmap(img);
Bitmap a10img = new Bitmap(img);
Bitmap a11img = new Bitmap(img);
Bitmap a12img = new Bitmap(img);
Bitmap a13img = new Bitmap(img);
Bitmap a14img = new Bitmap(img);
Bitmap a15img = new Bitmap(img);
Bitmap a16img = new Bitmap(img);
Bitmap a17img = new Bitmap(img);
Bitmap a18img = new Bitmap(img);
Bitmap a19img = new Bitmap(img);
Bitmap a20img = new Bitmap(img);
Bitmap a21img = new Bitmap(img);
Bitmap a22img = new Bitmap(img);
Bitmap a23img = new Bitmap(img);
Bitmap a24img = new Bitmap(img);
Bitmap a25img = new Bitmap(img);
Bitmap a26img = new Bitmap(img);
Bitmap a27img = new Bitmap(img);
Bitmap a28img = new Bitmap(img);
Bitmap a29img = new Bitmap(img);
Bitmap a30img = new Bitmap(img);
Bitmap a31img = new Bitmap(img);
Bitmap a32img = new Bitmap(img);
Bitmap a33img = new Bitmap(img);
Bitmap a34img = new Bitmap(img);
Bitmap a35img = new Bitmap(img);
Bitmap a36img = new Bitmap(img);
Bitmap a37img = new Bitmap(img);
Bitmap a38img = new Bitmap(img);
Bitmap a39img = new Bitmap(img);
Bitmap a40img = new Bitmap(img);
Bitmap a41img = new Bitmap(img);
Bitmap a42img = new Bitmap(img);
Bitmap a43img = new Bitmap(img);
Bitmap a44img = new Bitmap(img);
Bitmap a45img = new Bitmap(img);
Bitmap a46img = new Bitmap(img);
Bitmap a47img = new Bitmap(img);
Bitmap a48img = new Bitmap(img);
Bitmap a49img = new Bitmap(img);
Bitmap a50img = new Bitmap(img);
Bitmap a51img = new Bitmap(img);
Bitmap a52img = new Bitmap(img);
Bitmap a53img = new Bitmap(img);
Bitmap a54img = new Bitmap(img);
Bitmap a55img = new Bitmap(img);
Bitmap a56img = new Bitmap(img);
Bitmap a57img = new Bitmap(img);
Bitmap a58img = new Bitmap(img);
Bitmap a59img = new Bitmap(img);
Bitmap a60img = new Bitmap(img);
Bitmap a61img = new Bitmap(img);
Bitmap a62img = new Bitmap(img);
Bitmap a63img = new Bitmap(img);
Bitmap a64img = new Bitmap(img);
Bitmap a65img = new Bitmap(img);
Bitmap a66img = new Bitmap(img);
//red green blue image
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
//get pixel value
Color p = img.GetPixel(x, y);
//extract ARGB value from p
int r = p.R;
int g = p.G;
int b = p.B;
a01img.SetPixel(x, y, Color.FromArgb(r, r, r));
a02img.SetPixel(x, y, Color.FromArgb(r, r, g));
a03img.SetPixel(x, y, Color.FromArgb(r, r, b));
a04img.SetPixel(x, y, Color.FromArgb(r, g, r));
a05img.SetPixel(x, y, Color.FromArgb(r, g, g));
a06img.SetPixel(x, y, Color.FromArgb(r, g, b));
a07img.SetPixel(x, y, Color.FromArgb(r, b, r));
a08img.SetPixel(x, y, Color.FromArgb(r, b, g));
a09img.SetPixel(x, y, Color.FromArgb(r, b, b));
a10img.SetPixel(x, y, Color.FromArgb(g, r, r));
a11img.SetPixel(x, y, Color.FromArgb(g, r, g));
a12img.SetPixel(x, y, Color.FromArgb(g, r, b));
a13img.SetPixel(x, y, Color.FromArgb(g, g, r));
a14img.SetPixel(x, y, Color.FromArgb(g, g, g));
a15img.SetPixel(x, y, Color.FromArgb(g, g, b));
a16img.SetPixel(x, y, Color.FromArgb(g, b, r));
a17img.SetPixel(x, y, Color.FromArgb(g, b, g));
a18img.SetPixel(x, y, Color.FromArgb(g, b, b));
a19img.SetPixel(x, y, Color.FromArgb(b, r, r));
a20img.SetPixel(x, y, Color.FromArgb(b, r, g));
a21img.SetPixel(x, y, Color.FromArgb(b, r, b));
a22img.SetPixel(x, y, Color.FromArgb(b, g, r));
a23img.SetPixel(x, y, Color.FromArgb(b, g, g));
a24img.SetPixel(x, y, Color.FromArgb(b, g, b));
a25img.SetPixel(x, y, Color.FromArgb(b, b, r));
a26img.SetPixel(x, y, Color.FromArgb(b, b, g));
a27img.SetPixel(x, y, Color.FromArgb(b, b, b));
a28img.SetPixel(x, y, Color.FromArgb(0, 0, 0));
a29img.SetPixel(x, y, Color.FromArgb(0, 0, g));
a30img.SetPixel(x, y, Color.FromArgb(0, 0, b));
a31img.SetPixel(x, y, Color.FromArgb(0, g, 0));
a32img.SetPixel(x, y, Color.FromArgb(0, g, g));
a33img.SetPixel(x, y, Color.FromArgb(0, g, b));
a34img.SetPixel(x, y, Color.FromArgb(0, b, 0));
a35img.SetPixel(x, y, Color.FromArgb(0, b, g));
a36img.SetPixel(x, y, Color.FromArgb(0, b, b));
a37img.SetPixel(x, y, Color.FromArgb(g, 0, 0));
a38img.SetPixel(x, y, Color.FromArgb(g, 0, g));
a39img.SetPixel(x, y, Color.FromArgb(g, 0, b));
a40img.SetPixel(x, y, Color.FromArgb(g, g, 0));
a41img.SetPixel(x, y, Color.FromArgb(g, b, 0));
a42img.SetPixel(x, y, Color.FromArgb(b, 0, 0));
a43img.SetPixel(x, y, Color.FromArgb(b, 0, g));
a44img.SetPixel(x, y, Color.FromArgb(b, 0, b));
a45img.SetPixel(x, y, Color.FromArgb(b, g, 0));
a46img.SetPixel(x, y, Color.FromArgb(b, g, g));
a47img.SetPixel(x, y, Color.FromArgb(b, b, 0));
a48img.SetPixel(x, y, Color.FromArgb(r, r, 0));
a49img.SetPixel(x, y, Color.FromArgb(r, r, b));
a50img.SetPixel(x, y, Color.FromArgb(r, 0, r));
a51img.SetPixel(x, y, Color.FromArgb(r, 0, 0));
a52img.SetPixel(x, y, Color.FromArgb(r, 0, b));
a53img.SetPixel(x, y, Color.FromArgb(r, b, 0));
a54img.SetPixel(x, y, Color.FromArgb(0, r, r));
a55img.SetPixel(x, y, Color.FromArgb(0, r, 0));
a56img.SetPixel(x, y, Color.FromArgb(0, r, b));
a57img.SetPixel(x, y, Color.FromArgb(0, 0, r));
a58img.SetPixel(x, y, Color.FromArgb(0, b, r));
a59img.SetPixel(x, y, Color.FromArgb(b, r, 0));
a60img.SetPixel(x, y, Color.FromArgb(b, 0, r));
a61img.SetPixel(x, y, Color.FromArgb(r, g, 0));
a62img.SetPixel(x, y, Color.FromArgb(r, 0, g));
a63img.SetPixel(x, y, Color.FromArgb(g, r, 0));
a64img.SetPixel(x, y, Color.FromArgb(g, 0, r));
a65img.SetPixel(x, y, Color.FromArgb(0, r, g));
a66img.SetPixel(x, y, Color.FromArgb(0, g, r));
}
}
a01img.Save(@".\a01img.jpg");
a02img.Save(@".\a02img.jpg");
a03img.Save(@".\a03img.jpg");
a04img.Save(@".\a04img.jpg");
a05img.Save(@".\a05img.jpg");
a06img.Save(@".\a06img.jpg");
a07img.Save(@".\a07img.jpg");
a08img.Save(@".\a08img.jpg");
a09img.Save(@".\a09img.jpg");
a10img.Save(@".\a10img.jpg");
a11img.Save(@".\a11img.jpg");
a12img.Save(@".\a12img.jpg");
a13img.Save(@".\a13img.jpg");
a14img.Save(@".\a14img.jpg");
a15img.Save(@".\a15img.jpg");
a16img.Save(@".\a16img.jpg");
a17img.Save(@".\a17img.jpg");
a18img.Save(@".\a18img.jpg");
a19img.Save(@".\a19img.jpg");
a20img.Save(@".\a20img.jpg");
a21img.Save(@".\a21img.jpg");
a22img.Save(@".\a22img.jpg");
a23img.Save(@".\a23img.jpg");
a24img.Save(@".\a24img.jpg");
a25img.Save(@".\a25img.jpg");
a26img.Save(@".\a26img.jpg");
a27img.Save(@".\a27img.jpg");
a28img.Save(@".\a28img.jpg");
a29img.Save(@".\a29img.jpg");
a30img.Save(@".\a30img.jpg");
a31img.Save(@".\a31img.jpg");
a32img.Save(@".\a32img.jpg");
a33img.Save(@".\a33img.jpg");
a34img.Save(@".\a34img.jpg");
a35img.Save(@".\a35img.jpg");
a36img.Save(@".\a36img.jpg");
a37img.Save(@".\a37img.jpg");
a38img.Save(@".\a38img.jpg");
a39img.Save(@".\a39img.jpg");
a40img.Save(@".\a40img.jpg");
a41img.Save(@".\a41img.jpg");
a42img.Save(@".\a42img.jpg");
a43img.Save(@".\a43img.jpg");
a44img.Save(@".\a44img.jpg");
a45img.Save(@".\a45img.jpg");
a46img.Save(@".\a46img.jpg");
a47img.Save(@".\a47img.jpg");
a48img.Save(@".\a48img.jpg");
a49img.Save(@".\a49img.jpg");
a50img.Save(@".\a50img.jpg");
a51img.Save(@".\a51img.jpg");
a52img.Save(@".\a52img.jpg");
a53img.Save(@".\a53img.jpg");
a54img.Save(@".\a54img.jpg");
a55img.Save(@".\a55img.jpg");
a56img.Save(@".\a56img.jpg");
a57img.Save(@".\a57img.jpg");
a58img.Save(@".\a58img.jpg");
a59img.Save(@".\a59img.jpg");
a60img.Save(@".\a60img.jpg");
a61img.Save(@".\a61img.jpg");
a62img.Save(@".\a62img.jpg");
a63img.Save(@".\a63img.jpg");
a64img.Save(@".\a64img.jpg");
a65img.Save(@".\a65img.jpg");
a66img.Save(@".\a66img.jpg");
}
}
catch (Exception)
{
throw new ApplicationException("Failed loading image");
}
}
}
}
1)実際にそれらのビットマップを処理するときは、管理していない多くのリソースを使います。 2)ループ内でSetPixelを呼び出すことは非常に遅いです。 ['Bitmap.LockBits'](https://msdn.microsoft.com/en-us/library/system.drawing.bitmap.lockbits%28v=vs.110%29.aspx?f)の使い方を学ぶ必要があります。 = 255&MSPPError = -2147217396) –
その時点で1つだけ作成してください。 – harold