【问题标题】:Displaying image data from folder using Image Created Date criteria?使用图像创建日期标准显示文件夹中的图像数据?
【发布时间】:2015-05-18 09:04:29
【问题描述】:

我有两个控件用于显示文件夹中的图像,它们是:ImageListListView

现在我可以简单地使用上述控件显示图像而无需任何标准。

  • 但我想:

根据创建图像的日期显示图像。为此,我有一个DateTimePicker 控件来选择日期,一个ComboBox 来选择一个选项,一个Button 来显示结果,如下面的快照所示。

For Example: Show image before the date 15/1/2015, date from the image tag.

这是我用来在 ListView 中显示图像的代码

   private void btn_Show_Click(object sender, EventArgs e)
   {

          lstView_un.Items.Clear();

          DirectoryInfo dir = new DirectoryInfo(@"D:\Images");
          foreach (FileInfo file in dir.GetFiles())
          {
              try
              {
                 this.imageList1.Images.Add(Image.FromFile(file.FullName));
              }
              catch
              {
                 Console.WriteLine("This is not an image");
              }
          }

   this.imageList1.ImageSize = new Size(256, 250);
   this.lstView_un.LargeImageList = this.imageList1;
   for (int j = 0; j < this.imageList1.Images.Count; j++)
   {
          ListViewItem item = new ListViewItem();
          item.ImageIndex = j;
          this.lstView_un.Items.Add(item);
   }             

}

【问题讨论】:

  • 好提醒,谢谢!

标签: c# image winforms fileinfo


【解决方案1】:

玩这个:

var allfiles = Directory.GetFiles(yoursearchparams..);
files = new List<FileInfo>();
foreach(string f in projects) files.Add(new FileInfo(f));
var filesSorted = files.OrderByDescending(x=>x.CreationTime);

这是降序并使用创建日期。还有OrderByLastWriteTime

这里是完整的例子,包括:设置颜色深度、一个文本和多个扩展名以及使用日期来限制结果..

    private void button1_Click(object sender, EventArgs e)
    {   // last 2 weeks only:
        DateTime dt = DateTime.Now.AddDays(-14);  // use your own way to set it!

        string imagesPath = @"D:\scrape\SOusers";
        string[] extensions = new[] { ".jpg", ".jpeg", ".png" };
        var allfiles = Directory.GetFiles(imagesPath);
        List<FileInfo> files = new List<FileInfo>();
        foreach(string f in allfiles) files.Add(new FileInfo(f));
        var filesSorted = files.Where(f => extensions.Contains( f.Extension.ToLower()))
                               .Where(f => f.CreationTime < dt)
                               .OrderByDescending(f => f.CreationTime);
        this.imageList1.ImageSize = new Size(256, 250);
        this.imageList1.ColorDepth = ColorDepth.Depth32Bit;
        foreach (FileInfo fileInfo in filesSorted)
        {
            try {
                  this.imageList1.Images.Add(fileInfo.Name,
                                           Image.FromFile(fileInfo.FullName));
            }
            catch {
                    Console.WriteLine(fileInfo.FullName + "  is is not a valid image.");
            }
        }
        lstView_un.View = View.LargeIcon;
        lstView_un.LargeImageList = this.imageList1;
        lstView_un.Items.Clear();
        for (int j = 0; j < this.imageList1.Images.Count; j++)
        {
            ListViewItem item = new ListViewItem();
            item.ImageIndex = j;
            item.Text = imageList1.Images.Keys[j].ToString();
            this.lstView_un.Items.Add(item);
        }             
   }

【讨论】:

  • 你的答案正是我需要的,但是如何使用呢?请通过编辑上面显示的代码来帮助我。
  • 这应该涵盖你所有的基础。通常你应该使用提供的代码示例来改进你的代码,但不要指望完整的代码!
猜你喜欢
  • 1970-01-01
  • 2016-06-28
  • 2020-01-12
  • 2015-09-23
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多