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? 分不多。。。敬请高手帮忙解决一下。。谢谢!!!
展开
 我来答
gwx1647
2009-07-21
知道答主
回答量:19
采纳率:0%
帮助的人:0
展开全部
//* 重画一次图片 *//
//新建一个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 我啊
乜帅红0Q
2009-07-14 · TA获得超过906个赞
知道小有建树答主
回答量:693
采纳率:100%
帮助的人:465万
展开全部
旋转后当然会变大,矩形图片旋转一个小角度后,在外面在画一个水平的矩形,当然变大了。
这是肯定的,如果不要他变大,只能在缩放了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式