日期:2014-05-19  浏览次数:20883 次

请问如何实现图片旋转功能???
各位大虾!小弟我是个新手,最近想做一个图片浏览器,但是图片旋转功能就是实现不了.请各位大侠赐教!!!

------解决方案--------------------
最简单的方法就是将头左倾斜至90度,呵呵
------解决方案--------------------
你要做的 得重新计算图片大小 和坐标转换 具体不是特别清除以前做过放大和缩小 以及效果显示 帮你顶下
------解决方案--------------------
Image.RotateFlip可以旋转90度的整数倍

任意角度的算法:


/// <summary>
/// 按任意角度旋转
/// </summary>
/// <param name= "bmp "> 原始Bitmap </param>
/// <param name= "angle "> 旋转角度 </param>
/// <returns> 输出图 </returns>
public static Bitmap KiRotate(Bitmap b, float angle)
{
if (b == null)
{
return null;
}

if (angle == 0) return b;
try
{
//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 dstImage = new Bitmap(W, H);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dstImage);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
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();
return dstImage;
}
catch
{
return null;
}
} // end of Rotate