程序开发 > C# > Winform > 正文

C# listview按比例显示缩略图

亮术网 2020-08-27 本网原创

C# 的 listview 控件显示图片不会自动按比例缩放,要实现按比例缩放需要把图片画上去。在 winform 程序中画图,通常都用 Graphics,也是一种效率比较高的显示缩略图方法。

文章将用一个实例说明 C# listview缩略图显示的方法,具体是以缩约图方式显示一个指定文件夹里的所有图片。

 

C# listview按比例显示缩略图

1、拖一个 listview控件到窗体中,并把 listview1 的 DrawItem 方法设置为 listView1_DrawItem。

2、实现代码如下:

private void imgThum_Load(object sender, EventArgs e)
  {
    ShowImg(@"G:\");
  }

/// <summary>
  /// C# listview缩略图
  /// </summary>
  /// <param name="filePath">图片所在文件夹路径</param>

  private void ShowImg(string filePath)
  {
    this.listView1.OwnerDraw = true;
    this.listView1.TileSize = new Size(120, 120);
    this.listView1.View = View.Tile;

  DirectoryInfo di = new DirectoryInfo(filePath);
    FileInfo[] afi = di.GetFiles("*.*");
    string temp;
    ListViewItem lvi;
    for (int i = 0; i < afi.Length; i++)
    {
      temp = afi[i].Name.ToLower();
      if (temp.EndsWith(".jpg"))
      {
        lvi = new ListViewItem();
        lvi.Text = afi[i].Name;
        lvi.Tag = afi[i].FullName;
        this.listView1.Items.Add(lvi);
      }
      else if (temp.EndsWith(".gif"))
      {
        lvi = new ListViewItem();
        lvi.Text = afi[i].Name;
        lvi.Tag = afi[i].FullName;
        this.listView1.Items.Add(lvi);
      }
      else if (temp.EndsWith(".png"))
      {
        lvi = new ListViewItem();
        lvi.Text = afi[i].Name;
        lvi.Tag = afi[i].FullName;
        this.listView1.Items.Add(lvi);
      }
      else if (temp.EndsWith(".bmp"))
      {
        lvi = new ListViewItem();
        lvi.Text = afi[i].Name;
        lvi.Tag = afi[i].FullName;
        this.listView1.Items.Add(lvi);
      }
    }
  }

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
  {
    Bitmap bm = new Bitmap((string)(e.Item.Tag));
    e.Graphics.DrawImage(bm, e.Bounds);
    e.DrawText();
  }

以上代码通过 Visual Studio 2010 测试,可以正确显示缩约图。不过,如果图片比较多,显示慢,可以考虑启用 listview 的 VirtualMode,但 VirtualMode 不支持Tile(平铺视图);也可以用其它语言,如 VC++。