winform中实现图片左旋,右旋
来源:互联网 发布:mac icloud 照片 编辑:程序博客网 时间:2024/04/29 17:44
左旋
继续旋转
右旋:
继续右旋
效果展示结束:
下面讲讲利用什么来实现的:
由于不光判断是否是图片的*.BMP;*.JPG;*.GIF;*.TIF;*.PNG 还有*.PDF文件,因此写了个自定义控件里面处理左旋,右旋,背景颜色,之类的。这里不来实现PDF
ImageList.cs里面的处理:
private List<PreviewControl> poPreviews = null;public ImageList(){InitializeComponent();poPreviews = new List<PreviewControl>();}/// <summary>/// 取得选择的图片/// </summary>/// <returns></returns>private PreviewControl GetCurrentPreview(){for (int i = 0; i < poPreviews.Count; i++){if (poPreviews[i].Selected){return poPreviews[i];}}return null;}/// <summary>/// 左旋/// </summary>/// <param name="eventSender"></param>/// <param name="eventArgs"></param>public void cmdLeftRoteImage_Click(System.Object eventSender, System.EventArgs eventArgs){PreviewControl oCurrent = GetCurrentPreview();if (oCurrent != null){oCurrent.RotateLeft();}}/// <summary>/// 右旋/// </summary>/// <param name="eventSender"></param>/// <param name="eventArgs"></param>public void cmdRightRoteImage_Click(System.Object eventSender, System.EventArgs eventArgs){PreviewControl oCurrent = GetCurrentPreview();if (oCurrent != null){oCurrent.RotateRight();}}
PreviewControll.cs 的代码: 自定义控件上面拖放PictureBox 和WebBrowser
[DllImport("user32.dll")] extern static short GetKeyState(int vKey); /// <summary> /// 加载图片 /// </summary> private string psImageLocation = String.Empty; /// <summary>/// 左旋,右旋后直接保存 /// false:不保存、 true:保存 /// </summary> private bool pbRotateSaveFlg = true; /// <summary> /// PDF文件类型的标志 /// TRUE:PDF文件 FALSE:不是PDF文件 /// </summary> private bool pbPdfFlg = false; /// <summary> /// 选择时的颜色 /// </summary> private Color poSelectColor = SystemColors.Highlight; /// <summary> /// 未选择的颜色 /// </summary> private Color poUnSelectColor = SystemColors.Control; /// <summary> /// 图片左旋右旋的值 /// </summary> private int piRoteSum = 0; /// <summary> /// 图片预览控件初始化 /// </summary> public PreviewControl() { InitializeComponent(); } private bool IsControlKeyDown() { return (GetKeyState(0x0011) & 0x0000FF00) != 0; } private bool IsShiftKeyDown() { return (GetKeyState(0x0010) & 0x0000FF00) != 0; } /// <summary> /// 加载的图片 /// </summary> public string ImageLocation { set { psImageLocation = value; if (psImageLocation.Length == 0) { pictureBox1.Visible = false; webBrowser1.Visible = false; } else if (value.EndsWith(".pdf", StringComparison.CurrentCultureIgnoreCase)) { webBrowser1.Visible = true; webBrowser1.Navigate(value); pictureBox2.Tag = value; pictureBox2.Visible = true; pictureBox1.Visible = false; pbPdfFlg = true; } else { webBrowser1.Visible = false; pictureBox1.Visible = true; pictureBox1.ImageLocation = value; } } get { return psImageLocation; } } /// <summary> /// 选择时的颜色 /// </summary> public Color SelectColor { get { return poSelectColor; } set { poSelectColor = value; } } /// <summary> /// 没有选择的颜色 /// </summary> public Color UnSelectColor { get { return poUnSelectColor; } set { poUnSelectColor = value; } } /// <summary> /// 图片旋转的值入 90 180 270 度 /// </summary> public int RotateSum { get { return piRoteSum; } set { piRoteSum = value; } } /// <summary> /// 保存旋转后位置的状态 /// </summary> public bool RotateSaveFlg { set { pbRotateSaveFlg = value; } } /// <summary> /// 左旋 /// </summary> public void RotateLeft() { if (pictureBox1.Image != null) { //扩展名判断 if (CheckFileExtension(this.Tag.ToString()) == GFBEFUNC.FileExtension.PDF) { return; } Image oSrc = pictureBox1.Image; Bitmap oDst = new Bitmap(oSrc); oDst.RotateFlip(RotateFlipType.Rotate270FlipNone); pictureBox1.Image = oDst; piRoteSum = piRoteSum + 270; if (!pbRotateSaveFlg) { return; } ImageSave((Bitmap)pictureBox1.Image, 100, pictureBox1.ImageLocation,0,0); } } /// <summary> /// 右旋 /// </summary> public void RotateRight() { if (pictureBox1.Image != null) {//扩展名判断 if (CheckFileExtension(this.Tag.ToString()) == GFBEFUNC.FileExtension.PDF) { return; } Image oSrc = pictureBox1.Image; Bitmap oDst = new Bitmap(oSrc); oDst.RotateFlip(RotateFlipType.Rotate90FlipNone); pictureBox1.Image = oDst; piRoteSum = piRoteSum + 90; if (!pbRotateSaveFlg) { return; } ImageSave((Bitmap)pictureBox1.Image, 100, pictureBox1.ImageLocation,0,0); } } /// <summary> /// 清除图片的记忆位置 /// </summary> public void ClearImageMemory() { if (pictureBox1.Image != null) { pictureBox1.Image.Dispose(); } if (pictureBox2.Image != null) { pictureBox2.Image.Dispose(); } if (!webBrowser1.IsDisposed) { webBrowser1.Dispose(); } } /// <summary> /// 利用GC回收释放内存 /// </summary> public void GCCollect() { pictureBox1.Image = null; pictureBox2.Image = null; webBrowser1 = null; }
/// <summary> /// 保存图片 /// <param name="src">图片地址</param> /// <param name="scale">比例</param> /// <param name="asSaveFile"></param> /// <param name="aiWidth">宽度</param> /// <param name="aiHeight">高度</param> public static void ImageSave(Bitmap src, int scale, string asSaveFile, int aiWidth, int aiHeight) { int w = src.Width; int h = src.Height; if (scale < 100) { w = aiWidth; h = aiHeight; } Bitmap dest = new Bitmap(w, h); Graphics g = Graphics.FromImage(dest); g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.High; g.DrawImage(src, 0, 0, w, h); g.Dispose(); dest.Save(asSaveFile, ImageFormat.Jpeg); dest.Dispose(); }
public static FileExtension CheckFileExtension(string fileName){if (!File.Exists(fileName)){return FileExtension.VALIDFILE;}FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);System.IO.BinaryReader br = new System.IO.BinaryReader(fs);string fileType = string.Empty;FileExtension extension = FileExtension.VALIDFILE;try{byte data = br.ReadByte();fileType += data.ToString();data = br.ReadByte();fileType += data.ToString();extension = (FileExtension)Enum.Parse(typeof(FileExtension), fileType);if (extension.ToString().Equals(fileType)){extension = FileExtension.VALIDFILE;}}catch{extension = FileExtension.VALIDFILE;}finally{if (fs != null){fs.Close();br.Close();}}return extension;}public enum FileExtension{JPEG = 255216,TIF = 7373,GIF = 7173,BMP = 6677,PNG = 13780,PDF = 3780,VALIDFILE = 9999999}贴出来的核心代码:
- winform中实现图片左旋,右旋
- 实现右旋、左旋循环移位函数
- 左旋右旋字符串
- C#实现图片的放大缩小、左旋右旋,PS无法保存变化后的图片求辅导
- 实现字符串左旋和右旋的常见方法
- 序列的左旋右旋
- 左旋(右旋)字符串
- 字符串的左旋右旋
- 二叉树的左旋和右旋
- AVL树的左旋右旋理解
- 树的左旋与右旋
- 矩阵旋转(左旋,右旋)
- 红黑树的插入创建(左旋 右旋)
- 二叉树的左旋和右旋
- 面试热门题:字符串左旋右旋
- 什么是“天道左旋、地道右旋”?
- 树的左旋与右旋
- 字符串左旋右旋--程序员面试宝典
- vi/vim 行字符限制提示
- Activity的要点
- 系统默认ORACLE用户及口令
- JS中数组Array的用法{转载}
- SQL语句之Update
- winform中实现图片左旋,右旋
- 黑马程序员---java基础---08常见api
- 一个方便学习《Unix环境高级编程》的小脚本
- phpcms_v9部分代码分析(转)
- 读 Beginning Android Games 2nd Edition (七) 创建Touch事件处理类
- c++实现Dijkstra算法完整代码
- 几个值得商榷的问题
- 裸奔之MMU
- 时间相加,对时间求和