C#打开多个图像到数组

时间:2012-02-20 12:28:14

标签: c# arrays

我是C#的新手,我正在尝试打开多个图像到一个数组,以便以后操作它们的像素,这是我的代码到目前为止:

private void button1_Click(object sender, EventArgs e)
    {

        openFileDialog1.Filter = "Image Files(*.jpg; *.jpeg; *.bmp)|*.jpg; *.jpeg; *.bmp";
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            Bitmap[] images = new Bitmap(openFileDialog1.FileNames);
            MessageBox.Show(images.Length+" images loaded","",MessageBoxButtons.OK);

        }
    }

我遇到了这条线的问题

Bitmap[] images = new Bitmap(openFileDialog1.FileNames);

你能帮助我吗?

3 个答案:

答案 0 :(得分:10)

使用:

 images = openFileDialog1.FileNames.Select(fn=>new Bitmap(fn)).ToArray();

因为openFileDialog1.FileNames是字符串数组而Bitmap构造函数需要单个图像文件名

答案 1 :(得分:3)

Bitmap[] images = new Bitmap(openFileDialog1.FileNames);

Bitmap[] images // Is an array of Bitmap

new Bitmap(openFileDialog1.FileNames); // Returns a single (new) Bitmap

我建议使用List。当你是C#的新手时,使用foreach比使用Pavel Kymets建议的LinQ要容易得多。

List<Bitmap> images = new List<Bitmap>();
foreach(string file in openFileDialog1.FileNames) {
    images.Add(new Bitmap(file));
}

答案 2 :(得分:1)

或者,如果你还没准备好lambda,那就像

openFileDialog1.Filter = "Image Files(*.jpg; *.jpeg; *.bmp)|*.jpg; *.jpeg; *.bmp";       
List<BitMap> images = new List<BitMaps>()
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
  foreach(string fileName in openFileDialog1.FileNames)
  {
     images.Add(new Bitmap(fileName));
  }
} 
MessageBox.Show(String.Format("{0} images loaded",images.Count),"",MessageBoxButtons.OK);