C# 图像旋转代码
方法一:
- public static Bitmap rotateImage(Bitmap b, float angle)
- {
- //create a new empty bitmap to hold rotated image
- Bitmap returnBitmap = new Bitmap(b.Width, b.Height);
- //make a graphics object from the empty bitmap
- Graphics g = Graphics.FromImage(returnBitmap);
- g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
- //move rotation point to center of image
- g.TranslateTransform((float)b.Width / 2, (float)b.Height / 2);
- //rotate
- g.RotateTransform(angle);
- //move image back
- g.TranslateTransform(-(float)b.Width / 2, -(float)b.Height / 2);
- //draw passed in image onto graphics object
- g.DrawImage(b, new Point(0, 0));
- return returnBitmap;
- }
方法二:
- public static Bitmap RotateImage(Bitmap image, float rotateAtX, float rotateAtY, float angle, bool bNoClip)
- {
- int W, H, X, Y;
- if (bNoClip)
- {
- double dW = (double)image.Width;
- double dH = (double)image.Height;
- double degrees = Math.Abs(angle);
- if (degrees <= 90)
- {
- double radians = 0.0174532925 * degrees;
- double dSin = Math.Sin(radians);
- double dCos = Math.Cos(radians);
- W = (int)(dH * dSin + dW * dCos);
- H = (int)(dW * dSin + dH * dCos);
- X = (W - image.Width) / 2;
- Y = (H - image.Height) / 2;
- }
- else
- {
- degrees -= 90;
- double radians = 0.0174532925 * degrees;
- double dSin = Math.Sin(radians);
- double dCos = Math.Cos(radians);
- W = (int)(dW * dSin + dH * dCos);
- H = (int)(dH * dSin + dW * dCos);
- X = (W - image.Width) / 2;
- Y = (H - image.Height) / 2;
- }
- }
- else
- {
- W = image.Width;
- H = image.Height;
- X = 0;
- Y = 0;
- }
- //create a new empty bitmap to hold rotated image
- Bitmap bmpRet = new Bitmap(W, H);
- bmpRet.SetResolution(image.HorizontalResolution, image.VerticalResolution);
- //make a graphics object from the empty bitmap
- Graphics g = Graphics.FromImage(bmpRet);
- //Put the rotation point in the "center" of the image
- g.TranslateTransform(rotateAtX + X, rotateAtY + Y);
- //rotate the image
- g.RotateTransform(angle);
- //move the image back
- g.TranslateTransform(-rotateAtX - X, -rotateAtY - Y);
- //draw passed in image onto graphics object
- g.DrawImage(image, new PointF(0 + X, 0 + Y));
- return bmpRet;
- }
方法三:
- #region 图片旋转函数
- /// <summary>
- /// 以逆时针为方向对图像进行旋转
- /// </summary>
- /// <param name="b">位图流</param>
- /// <param name="angle">旋转角度[0,360](前台给的)</param>
- /// <returns></returns>
- public static Bitmap Rotate(Bitmap b, int 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)));
- //目标位图
- Bitmap 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;
- }
- #endregion 图片旋转函数
C# 图像旋转代码的更多相关文章
- 图像旋转与图像缩放及Matlab代码实现
本周的作业是自己通过公式编写图像旋转与缩放的代码.今天先通过调用函数的方法来实现. 图像的旋转: A=imread('2.jpg'); J=imrotate(A, 30); subplot(1,2,1 ...
- OpenCV:OpenCV图像旋转的代码
OpenCV图像旋转的代码 cv::transpose( bfM, bfM ) 前提:使用两个矩阵Mat型进行下标操作是不行的,耗费的时间太长了.直接使用两个指针对拷贝才是王道.不知道和OpenCV比 ...
- NOI题库 09:图像旋转翻转变换
NOI题库开始的题,也是略水,当然也是大水,所以彼此彼此 09:图像旋转翻转变换 总时间限制: 1000ms 内存限制: 65536kB 描述 给定m行n列的图像各像素点灰度值,对其依次进行一系列操作 ...
- 【OpenCV学习笔记】之六 手写图像旋转函数---万丈高楼平地起
话说,平凡之处显真格,这一点也没错! 比如,对旋转图像进行双线性插值,很简单吧? 可,对我,折腾了大半天,也没有达到预期效果! 尤其是三个误区让我抓瞎好久: 1,坐标旋转公式. 这东西,要用 ...
- opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移
常常需要最图像进行仿射变换,仿射变换后,我们可能需要将原来图像中的特征点坐标进行重新计算,获得原来图像中例如眼睛瞳孔坐标的新的位置,用于在新得到图像中继续利用瞳孔位置坐标. 仿射变换在:http:// ...
- Opencv2.4.4作图像旋转和缩放
关于下面两个主要函数的讲解: cv::getRotationMatrix2D(center, angle, scale); cv::warpAffine(image, rotateImg, rotat ...
- 图像旋转、伸缩的自写matlab实现
一.图像的旋转 今天的代码不是自己写的,缺少一些时间.但是认认真真推导了一下旋转的公式,代码的思想与原博博主一致,致敬! 愚以为,自己来实现图像旋转算法的关键点有二:其一,确定旋转后的图像边界.其二, ...
- OpenCV 图像旋转实现
1 旋转矩形 首先建议阅读图像旋转算法原理-旋转矩阵,这篇博客可以让你很好地理解图像中的每一个点是如何进行旋转操作的.其中涉及到了图像原点与笛卡尔坐标原点之间的相互转换以及点旋转的一些公式推导. 这里 ...
- CCF CSP 201503-1 图像旋转
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-1 图像旋转 问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆 ...
随机推荐
- Java的引用StrongReference、 SoftReference、 WeakReference 、PhantomReference
1. Strong Reference StrongReference 是 Java 的默认引用实现, 它会尽可能长时间的存活于 JVM 内, 当没有任何对象指向它时 GC 执行后将会被回收 @Te ...
- mac层到ath9k层,ath9k层到硬件层
如上图,整个 mac 层分成两个部分——UMAC 和 LMAC.LMAC 分成 MAC 下半部分和硬件抽象层. 硬件抽象层和ath9k层的连接 在hw.h中的函数struct ath_hw_ops() ...
- django 数据库中中文转化为韩语拼音
1.安装模块 django-uuslug pip install django-uuslug 2.导入模块 from uuslug import slugify 3.使用模块 slugify('天龙八 ...
- Bootstrap历练实例:默认的媒体对象
Bootstrap 多媒体对象(Media Object) 本章我们将讲解 Bootstrap 中的多媒体对象(Media Object).这些抽象的对象样式用于创建各种类型的组件(比如:博客评论), ...
- 使用vs2013打开VS2015的工程文件的解决方案(适用于大多数vs低版本打开高版本)
前言:重装系统前我使用的是vs2015(有点装*),由于使用2015实在在班上太另类了, 导致我想在其他同学的vs下看一看我写的代码都无法达成! 而且最关键的是交作业的时候,老师的2013也没有办法打 ...
- stringByAppendingString和stringByAppendingPathComponent
NSString提供了两个拼串的方法: /** * @brief 简单的字符串拼接,头文件 NSString (NSStringExtensionMethods) * * @param aString ...
- 【Python学习之三】函数的参数
在学习Python的过程中,我认为Python函数是很重要的一部分.其中参数的类型和数量,是一个比较容易弄混乱的点. 1.一般参数 首先,写一个计算两个数的和的函数: def addNum(x, y) ...
- ipmitool的使用
https://www.ibm.com/developerworks/cn/linux/l-ipmi/index.html
- nginx作为正向代理,反向代理的一些应用
正向代理代理的对象是客户端 反向代理代理的对象是服务端 举例说下nginx作为正向代理作访问控制 server{ listen 80; server_name localhost jeson.gaos ...
- Linux中同步与异步、阻塞与非阻塞概念以及五种IO模型
1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...