C#使用Winform编写一个图片预览器管理
using MetroFramework.Forms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using XinShiYun_ScanReader.Common;
using XinShiYun_ScanReader.Model;
namespace XinShiYun_ScanReader
{
public partial class ImageForm : MetroForm
{
///
/// 当前图片
///
Image myImage;
///
/// 图片集合,用于翻页浏览
///
//public static List
List
///
/// 当前浏览的项
///
int myIndex;
///
/// 变更的图片
///
public static List
///
/// 剪切距离左边 默认左右剪切5px
///
public int _cutLeft = 5;
///
/// 剪切距离右边 默认左右剪切5px
///
public int _cutRight = 5;
///
/// 剪切距离上边
///
public int _cutTop = 0;
///
/// 剪切距离下边
///
public int _cutBottom = 0;
///
/// 缓存上次裁剪图片的地址
///
public string BaseCutPath = Environment.CurrentDirectory + "CutPic";
///
/// 缓存上次裁剪的图片名称
///
public List
public ImageForm(List
{
InitializeComponent();
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true);
this.UpdateStyles();
CreateCutPic();
ImageStateModels = imageStateModels;
string path = ImageStateModels[index].tempPicUrl;
Image img = Image.FromFile(path);
myImage = img;
myIndex = index;
this.MouseWheel += new MouseEventHandler(CandidateForm_MouseWheel);
Init();
ChangeImageIndexs = new List
}
///
/// 剪切图片存储
///
private void CreateCutPic()
{
try
{
if (!Directory.Exists(BaseCutPath))
{
Directory.CreateDirectory(BaseCutPath);
}
CutPathList = new List
DirectoryInfo dir = new DirectoryInfo(BaseCutPath);
FileSystemInfo[] fileinfo = dir.GetFiles();
if (fileinfo == null)
return;
foreach (FileSystemInfo i in fileinfo)
{
File.Delete(i.FullName); //删除指定文件
}
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法-ImageForm-CreateCutPic");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
///
/// 添加剪切文件
///
private void AddCutPic(Image img)
{
try
{
string name = Guid.NewGuid().ToString("N") +".jpg";
string path = BaseCutPath + name;
CutPathList.Add(path);
img.Save(path);
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法-ImageForm-AddCutPic");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
///
/// 恢复上一步图片
///
private void RevCutPic(string savePath)
{
if (CutPathList == null)
return;
int lastIndex = CutPathList.Count();//最后一步
if (lastIndex <= 0)
return;
try
{
string path = CutPathList[lastIndex - 1];
Image img = Image.FromFile(path);
pic_Image.Image = img;
myImage = img;
img.Save(savePath, ImageFormat.Jpeg);
CutPathList.RemoveAt(lastIndex - 1);
pic_Image.Refresh();
GC.Collect();
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法-ImageForm-RevCutPic");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
///
/// 初始化
///
private void Init()
{
try
{
string cutValue = ConfigHelper.ReadConfigPath("cut.txt");
string[] destWidth = cutValue.Split(',');
foreach (var item in destWidth)
{
if (!string.IsNullOrEmpty(item))
{
string[] width = item.Split(':');
if (width[0] == "L")
{
_cutLeft = Convert.ToInt32(width[1]);
}
if (width[0] == "R")
{
_cutRight = Convert.ToInt32(width[1]);
}
if (width[0] == "T")
{
_cutTop = Convert.ToInt32(width[1]);
}
if (width[0] == "B")
{
_cutBottom = Convert.ToInt32(width[1]);
}
}
}
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法-ImageForm-Init");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
private void ImageForm_Load(object sender, EventArgs e)
{
try
{
this.Width = 1000;
this.Height = 1000;
this.pic_Image.Dock = DockStyle.None;
this.pic_Image.SizeMode = PictureBoxSizeMode.Zoom;
this.pic_Image.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
pic_Image.Image = myImage;
//pic_left.Location = new Point(this.Width / 2 - pic_left.Width, pic_left.Location.Y);
//pic_right.Location = new Point(this.Width / 2 + pic_right.Width, pic_right.Location.Y);
//pic_cut.Location = new Point(this.Width / 2 + pic_right.Width + pic_cut.Width + 10, pic_cut.Location.Y);
panel_bottom.Location = new Point(this.Width / 2 - panel_bottom.Width / 2, panel_bottom.Location.Y);
pic_goleft.Location = new Point(pic_goleft.Location.X, this.Height / 2);
pic_goright.Location = new Point(pic_goright.Location.X, this.Height / 2);
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法--ImageForm_Load");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
///
/// 鼠标滚动
///
///
///
private void CandidateForm_MouseWheel(object sender, MouseEventArgs e)
{
try
{
this.pic_Image.Dock = DockStyle.None;
this.pic_Image.SizeMode = PictureBoxSizeMode.Zoom;
this.pic_Image.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
Size size = this.pic_Image.Size;
size.Width += e.Delta;
if (size.Width > pic_Image.Image.Width)
{
pic_Image.Width = pic_Image.Image.Width;
pic_Image.Height = pic_Image.Image.Height;
}
//else if (size.Width * pic_Image.Image.Height / pic_Image.Image.Width < pic_Image.Parent.Height - 200)
//{
// return;
//}
else
{
pic_Image.Width = size.Width;
pic_Image.Height = size.Width * pic_Image.Image.Height / pic_Image.Image.Width;
}
pic_Image.Left = (pic_Image.Parent.Width - pic_Image.Width) / 2;
pic_Image.Top = (pic_Image.Parent.Height - pic_Image.Height) / 2;
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法--CandidateForm_MouseWheel");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
private void panel_Image_Paint(object sender, PaintEventArgs e)
{
}
private void metroButton1_Click(object sender, EventArgs e)
{
}
private void metroButton2_Click(object sender, EventArgs e)
{
}
bool canDrag = false;
int pic_w = 0;
int pic_h = 0;
private void pic_Image_MouseDown(object sender, MouseEventArgs e)
{
pic_w = e.Location.X;
pic_h = e.Location.Y;
canDrag = true;
}
private void pic_Image_MouseMove(object sender, MouseEventArgs e)
{
try
{
if (canDrag)
{
pic_Image.Location = new Point(pic_Image.Left + e.X - pic_w, pic_Image.Top + e.Y - pic_h);
}
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法--pic_Image_MouseMove");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
private void pic_Image_MouseUp(object sender, MouseEventArgs e)
{
canDrag = false;
}
private void pic_left_Click(object sender, EventArgs e)
{
try
{
Bitmap bitmap = (Bitmap)myImage;
bitmap.RotateFlip(RotateFlipType.Rotate90FlipXY);
if (!ChangeImageIndexs.Contains(myIndex))
{
ChangeImageIndexs.Add(myIndex);
}
myImage = bitmap;
this.pic_Image.Image = bitmap;
pic_Image.Refresh();
string path = ImageStateModels[myIndex].tempPicUrl;
pic_Image.Image.Save(path, ImageFormat.Jpeg);
GC.Collect();
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法--pic_left_Click");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
private void pic_right_Click(object sender, EventArgs e)
{
try
{
Bitmap bitmap = (Bitmap)myImage;
bitmap.RotateFlip(RotateFlipType.Rotate270FlipXY);
if (!ChangeImageIndexs.Contains(myIndex))
{
ChangeImageIndexs.Add(myIndex);
}
myImage = bitmap;
this.pic_Image.Image = myImage;
pic_Image.Refresh();
string path = ImageStateModels[myIndex].tempPicUrl;
pic_Image.Image.Save(path, ImageFormat.Jpeg);
GC.Collect();
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法--pic_right_Click");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
private void ImageForm_SizeChanged(object sender, EventArgs e)
{
try
{
panel_bottom.Location = new Point(this.Width / 2 - panel_bottom.Width / 2, this.Height - panel_bottom.Height - 20);
pic_goleft.Location = new Point(pic_goleft.Location.X, this.Height / 2);
pic_goright.Location = new Point(pic_goright.Location.X, this.Height / 2);
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法--ImageForm_SizeChanged");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
private void pic_goleft_Click(object sender, EventArgs e)
{
try
{
if (myIndex <= 0)
return;
myIndex--;
this.pic_Image.Dock = DockStyle.None;
this.pic_Image.SizeMode = PictureBoxSizeMode.Zoom;
this.pic_Image.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
string path = ImageStateModels[myIndex].tempPicUrl;
myImage = Image.FromFile(path);
pic_Image.Image = myImage;
GC.Collect();
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法--pic_goleft_Click");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
private void pic_goright_Click(object sender, EventArgs e)
{
try
{
if (myIndex >= ImageStateModels.Count() - 1)
return;
myIndex++;
this.pic_Image.Dock = DockStyle.None;
this.pic_Image.SizeMode = PictureBoxSizeMode.Zoom;
this.pic_Image.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
string path = ImageStateModels[myIndex].tempPicUrl;
myImage = Image.FromFile(path);
//myImage = img;
pic_Image.Image = myImage;
GC.Collect();
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法--pic_goright_Click");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
///
/// 剪切图标2边,每次剪切5px 读取配置文件cut.txt 格式 L:50,R:50,T:0,B:0
///
///
///
private void pic_cut_Click(object sender, EventArgs e)
{
try
{
if (myImage.Width <= _cutLeft + _cutRight)
return;
if (myImage.Height <= _cutTop + _cutBottom)
return;
AddCutPic(myImage);
Bitmap img = ImageHelper.ImageCut(new Bitmap(myImage), _cutLeft, _cutTop, myImage.Width - _cutLeft - _cutRight, myImage.Height - _cutTop - _cutBottom);
pic_Image.Image = img;
pic_Image.Refresh();
if (!ChangeImageIndexs.Contains(myIndex))
{
ChangeImageIndexs.Add(myIndex);
}
myImage.Dispose();
string path = ImageStateModels[myIndex].tempPicUrl;
pic_Image.Image.Save(path, ImageFormat.Jpeg);
myImage = img;
GC.Collect();
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法--pic_cut_Click");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
private void pic_CutSelf_Click(object sender, EventArgs e)
{
try
{
CutSize cutSize = new CutSize();
cutSize.ShowDialog();
if (myImage.Width <= CutSize.Cut_Left + CutSize.Cut_Right)
return;
if (myImage.Height <= CutSize.Cut_Top + CutSize.Cut_Bottom)
return;
Bitmap img = ImageHelper.ImageCut(new Bitmap(myImage), CutSize.Cut_Left, CutSize.Cut_Top, myImage.Width - CutSize.Cut_Left - CutSize.Cut_Right, myImage.Height - CutSize.Cut_Top - CutSize.Cut_Bottom);
pic_Image.Image = img;
pic_Image.Refresh();
if (!ChangeImageIndexs.Contains(myIndex))
{
ChangeImageIndexs.Add(myIndex);
}
myImage.Dispose();
string path = ImageStateModels[myIndex].tempPicUrl;
pic_Image.Image.Save(path, ImageFormat.Jpeg);
myImage = img;
GC.Collect();
}
catch (Exception ex)
{
log4netHelper.Error("---报错方法--pic_cut_Click");
log4netHelper.Error(ex.Message);
log4netHelper.Error(ex.StackTrace);
log4netHelper.Error("---end---");
}
}
private void pic_cut_MouseHover(object sender, EventArgs e)
{
toolTip.SetToolTip(pic_cut, "自动裁剪图片");
}
private void pic_left_MouseHover(object sender, EventArgs e)
{
toolTip.SetToolTip(pic_left, "图片左旋转90度");
}
private void pic_right_MouseHover(object sender, EventArgs e)
{
toolTip.SetToolTip(pic_right, "图片右旋转90度");
}
private void pic_CutSelf_MouseHover(object sender, EventArgs e)
{
toolTip.SetToolTip(pic_CutSelf, "自定义裁剪图片");
}
private void ImageForm_FormClosing(object sender, FormClosingEventArgs e)
{
this.Dispose();
}
private void pic_return_MouseHover(object sender, EventArgs e)
{
toolTip.SetToolTip(pic_CutSelf, "返回裁剪上一步");
}
private void pic_return_Click(object sender, EventArgs e)
{
RevCutPic(ImageStateModels[myIndex].tempPicUrl);
}
}
}
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播