如何在文件夹中加载下一张图片?

时间:2014-04-27 02:01:09

标签: c# image

我正在尝试构建一个简单的图像查看器。我可以使用以下代码将图像从文件夹加载到图片框中:

private void button1_Click(object sender, EventArgs e)
{
    using (OpenFileDialog dlg = new OpenFileDialog())
    {
        dlg.Title = "Open Image";
        dlg.Filter = "All|*.jpg;*.bmp;*.gif;*.png|JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|PNG Image|*.png";

        if (dlg.ShowDialog() == DialogResult.OK)
        {pictureBox1.Image = new Bitmap(dlg.FileName); }
    }
}

这只允许我选择文件夹中的图像并将其加载到图片框中。现在,我想知道我是否可以制作一个" Next Image"按钮,用于识别我已加载的图像并在同一文件夹中查找下一张图像并在图片框中打开。对不起,如果我的英语不是很好。感谢。

2 个答案:

答案 0 :(得分:0)

您可以推断出所选文件的目录:

http://msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname.aspx

directoryName = Path.GetDirectoryName(dlg.FileName);

然后从此目录中列出所有文件:

var files = Directory.Getfiles(directoryName)

您的“下一张图片”按钮会枚举“文件”

答案 1 :(得分:0)

这是一种可能的解决方案。除了最后一行之外,button1_Click方法与您的方法相同。如果使用此功能,则需要添加错误处理。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private AvailableImages _availableImages;

    private class AvailableImages
    {
        private List<string> _images;
        private int _selectedImage;

        public AvailableImages(IEnumerable<string> images, string selectedImage = null)
        {
            _images = images.ToList();
            _selectedImage = selectedImage == null ? 0 : _images.IndexOf(selectedImage);
        }

        public Bitmap GetNextImage()
        {
            return new Bitmap(_images[_selectedImage = ++_selectedImage >= _images.Count ? 0 : _selectedImage]);
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        using (OpenFileDialog dlg = new OpenFileDialog())
        {
            dlg.Title = "Open Image";
            dlg.Filter = "All|*.jpg;*.bmp;*.gif;*.png|JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|PNG Image|*.png";

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image = new Bitmap(dlg.FileName);
                _availableImages = new AvailableImages(System.IO.Directory.GetFiles(System.IO.Path.GetDirectoryName(dlg.FileName)).Where(m => m.ToUpper().EndsWith("JPG") || m.ToUpper().EndsWith("BMP") || m.ToUpper().EndsWith("GIF") || m.ToUpper().EndsWith("PNG")), dlg.FileName);
            }
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        pictureBox1.Image = _availableImages.GetNextImage();
    }
}