基于C#的两种图片旋转方法
来源:互联网 发布:淘宝买手机需要身份证 编辑:程序博客网 时间:2024/06/09 17:23
/// <summary> /// 根据角度旋转图标 /// </summary> /// <param name="img"></param> public Image RotateImg(Image img, float angle) { //通过Png图片设置图片透明,修改旋转图片变黑问题。 int width = img.Width; int height = img.Height; //角度 Matrix mtrx = new Matrix(); mtrx.RotateAt(angle, new PointF((width / 2), (height / 2)), MatrixOrder.Append); //得到旋转后的矩形 GraphicsPath path = new GraphicsPath(); path.AddRectangle(new RectangleF(0f, 0f, width, height)); RectangleF rct = path.GetBounds(mtrx); //生成目标位图 Bitmap devImage = new Bitmap((int)(rct.Width), (int)(rct.Height)); Graphics g = Graphics.FromImage(devImage); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //计算偏移量 Point Offset = new Point((int)(rct.Width - width) / 2, (int)(rct.Height - height) / 2); //构造图像显示区域:让图像的中心与窗口的中心点一致 Rectangle rect = new Rectangle(Offset.X, Offset.Y, (int)width, (int)height); Point center = new Point((int)(rect.X + rect.Width / 2), (int)(rect.Y + rect.Height / 2)); g.TranslateTransform(center.X, center.Y); g.RotateTransform(angle); //恢复图像在水平和垂直方向的平移 g.TranslateTransform(-center.X, -center.Y); g.DrawImage(img, rect); //重至绘图的所有变换 g.ResetTransform(); g.Save(); g.Dispose(); path.Dispose(); return devImage; } /// <summary> /// 第二种方法 /// </summary> /// <param name="b"></param> /// <param name="angle"></param> /// <returns></returns> public Image RotateImg2(Image b, float angle) { angle = angle % 360; //弧度转换 double radian = angle * Math.PI / 180.0; double cos = Math.Cos(radian); double sin = Math.Sin(radian); //原图的宽和高 int w = b.Width; int h = b.Height; int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin))); int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos))); //目标位图 Image dsImage = new Bitmap(W, H); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //计算偏移量 Point Offset = new Point((W - w) / 2, (H - h) / 2); //构造图像显示区域:让图像的中心与窗口的中心点一致 Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h); Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2); g.TranslateTransform(center.X, center.Y); g.RotateTransform(360-angle); //恢复图像在水平和垂直方向的平移 g.TranslateTransform(-center.X, -center.Y); g.DrawImage(b, rect); //重至绘图的所有变换 g.ResetTransform(); g.Save(); g.Dispose(); //dsImage.Save("yuancd.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); return dsImage; }
0 0
- 基于C#的两种图片旋转方法
- 图片旋转的两种方法
- 两种图片旋转方法
- android 图片旋转实现的两种方法的比较
- c#发送邮件内嵌图片的两种方法
- C# 合并两张图片的方法
- C# 判断两张图片是否一致的两种方法
- GDI+旋转图片的几种方法
- GDI+旋转图片的几种方法
- 矩阵旋转90度的两种方法
- 矩阵旋转90度的两种方法
- 矩阵旋转90°的两种方法-java
- 两种AS3加载图片的方法
- 图片保存的两种方法
- 预览图片的两种方法
- 循环显示图片的两种方法
- 合成图片的两种方法
- 叠加两种图片的方法
- Java并发编程:synchronized
- java 二进制上传文件
- zabbix JMX监控 tomcat
- 检测文本文件的编码
- 线性代数与图与网络
- 基于C#的两种图片旋转方法
- CSS学习笔记9-颜色与背景
- .net中app.config的示例
- 获取命令行参数,getopt
- web调试工具-Fiddler使用(一)
- zabbix 监控tomcat 模板
- java Comparator 与Comparable
- [数组]面试题1
- java.lang.IllegalStateException: Ambiguous mapping