C# Winfrom编程 图片旋转问题
publicBitmapRotate(Bitmapbmp,floatangle,ColorbkColor){try{angle=angle%360;//弧度转换doubl...
public Bitmap Rotate(Bitmap bmp, float angle, Color bkColor)
{
try
{
angle = angle % 360;
//弧度转换
double radian = angle * Math.PI / 180.0;
double cos = Math.Cos(radian);
double sin = Math.Sin(radian);
//原图的宽和高
int w = bmp.Width;
int h = bmp.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);
//构造图像显示区域:让图像的中心与窗口的中心点一致
RectangleF rect = new RectangleF(Offset.X, Offset.Y, w, h);
PointF center = new PointF(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(bmp, rect);
//重至绘图的所有变换
g.ResetTransform();
g.Save();
g.Dispose();
//保存旋转后的图片
bmp.Dispose();
this.textBox2.Text = dsImage.Width.ToString();
this.textBox3.Text=dsImage.Height.ToString();
return dsImage;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return bmp;
}
}
这是一段在网上找的代码。。。但是随着图片的转动,图片的with和hight都会变大。。。~ 怎样才能够返回和bmp尺寸一样的dsImage? 分不多。。。敬请高手帮忙解决一下。。谢谢!!! 展开
{
try
{
angle = angle % 360;
//弧度转换
double radian = angle * Math.PI / 180.0;
double cos = Math.Cos(radian);
double sin = Math.Sin(radian);
//原图的宽和高
int w = bmp.Width;
int h = bmp.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);
//构造图像显示区域:让图像的中心与窗口的中心点一致
RectangleF rect = new RectangleF(Offset.X, Offset.Y, w, h);
PointF center = new PointF(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(bmp, rect);
//重至绘图的所有变换
g.ResetTransform();
g.Save();
g.Dispose();
//保存旋转后的图片
bmp.Dispose();
this.textBox2.Text = dsImage.Width.ToString();
this.textBox3.Text=dsImage.Height.ToString();
return dsImage;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return bmp;
}
}
这是一段在网上找的代码。。。但是随着图片的转动,图片的with和hight都会变大。。。~ 怎样才能够返回和bmp尺寸一样的dsImage? 分不多。。。敬请高手帮忙解决一下。。谢谢!!! 展开
2个回答
展开全部
//* 重画一次图片 *//
//新建一个bmp图片
Bitmap bitmap = new Bitmap(w, h);
//新建一个画板
Graphics gg = Graphics.FromImage(bitmap);
//设置高质量插值法
gg.InterpolationMode = InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
gg.SmoothingMode = SmoothingMode.HighQuality;
//清空画布并以透明背景色填充
gg.Clear(Color.Transparent);
//在指定位置并且按指定大小绘制原图片的指定部分
gg.DrawImage(dst, new Rectangle(0, 0, w, h), new Rectangle(0, 0, dst.Width, dst.Height), GraphicsUnit.Pixel);
return bitmap;
按原来图片的大小 重画一次 就行了。。。再返回重画的图片 以上代码是我调试可用的代码。
你试试吧 不懂 hi 我啊
//新建一个bmp图片
Bitmap bitmap = new Bitmap(w, h);
//新建一个画板
Graphics gg = Graphics.FromImage(bitmap);
//设置高质量插值法
gg.InterpolationMode = InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
gg.SmoothingMode = SmoothingMode.HighQuality;
//清空画布并以透明背景色填充
gg.Clear(Color.Transparent);
//在指定位置并且按指定大小绘制原图片的指定部分
gg.DrawImage(dst, new Rectangle(0, 0, w, h), new Rectangle(0, 0, dst.Width, dst.Height), GraphicsUnit.Pixel);
return bitmap;
按原来图片的大小 重画一次 就行了。。。再返回重画的图片 以上代码是我调试可用的代码。
你试试吧 不懂 hi 我啊
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询