制作一个窗体: 这个界面可以自己做,这里不再阐述。
我这个程序是导入文件夹,然后显示在下面的tabcontrol里。
FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() != DialogResult.Cancel) { ListView lv = new ListView { SmallImageList = il, LargeImageList = il, Dock = DockStyle.Fill }; DirectoryInfo di = new DirectoryInfo(fbd.SelectedPath); FileInfo[] files = di.GetFiles(); tabControl1.TabPages.Add(di.Name); tabControl1.SelectedIndex = tabControl1.TabCount - 1; tabControl1.TabPages[tabControl1.TabPages.Count - 1].Controls.Add(lv); foreach (FileInfo fi in files)//加载图像文件 { if (fi.Extension == ".jpg" || fi.Extension == ".png" || fi.Extension == ".bmp" || fi.Extension == ".ico") { Image im = Image.FromFile(fi.FullName); il.Images.Add(im); ListViewItem lvi = new ListViewItem(fi.Name, il.Images.Count - 1) { Tag = fi.FullName }; lv.Items.Add(lvi); im.Dispose(); GC.Collect(); } Application.DoEvents(); } lv.DoubleClick += Lv_DoubleClick; } fbd.Dispose(); GC.Collect();注意一定要把im给Dispose掉!!!我一开始没有Dispose结果加载占了3G内存!!!
双击图片就可以加入:
private void Lv_DoubleClick(object sender, EventArgs e) { PictureBox pic = new PictureBox(); Image image = Image.FromFile((string)((ListView)sender).SelectedItems[0].Tag); pic.Size = new Size(image.Width / 4, image.Height / 4); pic.SizeMode = PictureBoxSizeMode.StretchImage; pic.Image = image; pic.Location = new Point(pictures.Width / 2 - pic.Width / 2, pictures.Height / 2 - pic.Height / 2); pic.MouseMove += picBox_MouseMove; pic.MouseUp += picBox_MouseUp; pic.MouseDown += picBox_MouseDown; pic.MouseWheel += Pic_MouseWheel; pic.Tag = SetTags(pics.Count, (string)((ListView)sender).SelectedItems[0].Tag); pic.ContextMenuStrip = contextMenuStrip1; pics.Add(pic); if (pic.Left < 0) pic.Left = 0; if (pic.Top < 0) pic.Top = 0; RefreshList(); RefreshPics(); }因为考虑到图片要能拖动,所以添加MouseMove,MouseDown,MouseUp事件来让PictureBox能拖动。 MouseWheel事件来控制图片大小。
//缩放 int kk = 5; if (Control.ModifierKeys == Keys.Shift)//按下Shift,快速缩放 kk = 1; PictureBox pic = (PictureBox)sender; Size size = pic.Size; double angle = Math.Atan((double)size.Height / size.Width);//计算对角线 size.Height += (int)(e.Delta * Math.Sin(angle)/kk); size.Width += (int)(e.Delta * Math.Cos(angle)/kk); if (size.Width <= 0 || size.Height <= 0) return; pic.Size = size;用三角函数控制缩放可以大大减小图片变形。
按delete删除图片:直接dispose掉就行了。
唯一的问题:只支持10000x10000。。。 源码:源码下载