C#下图片任意角度旋转的问题

大可山人
博客专家认证
2004-11-22 01:23:39
我想输入一个角度,实现图片按左上角顶点或图片中心的任意角度旋转。
InputAngle为输入角度的窗体。

InputAngle f=new InputAngle();
if(f.ShowDialog(this) == DialogResult.OK)
{
if(f.Angle==0) return;

int w=m_Bitmap.Width;
int h=m_Bitmap.Height;

Bitmap bmp = new Bitmap(m_Bitmap.Width,m_Bitmap.Height,PixelFormat.Format32bppArgb);//这里改为PixelFormat.Format24bppRgb也不行,而且产生了黑色背景
Graphics g=Graphics.FromImage(bmp);
g.SmoothingMode=SmoothingMode.HighQuality;
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
// g.DpiX=bmp.HorizontalResolution;
// g.DpiY=bmp.VerticalResolution;

Matrix myMatrix = new Matrix();
PointF pointF00=new PointF(0,0);
float dx,dy;
if(f.IsClockWise)
{
//如果是顺时针旋转:
//x2 = x1 * cosa + y1 * sina
//y2 = y1 * cosa - x1 * sina
//dx=-h*(float)Math.Sin((double)f.Angle);
//dy=-h*(float)Math.Cos((double)f.Angle);
myMatrix.RotateAt((float)f.Angle,pointF00);
}
else
{
//如果是逆时针旋转:
//x2 = x1 * cosa - y1 * sina
//y2 = y1 * cosa + x1 * sina
//myMatrix.Rotate((float)(-f.Angle));
//dx=w*(float)Math.Cos((double)f.Angle);
//dx=0;
//dy=w*(float)Math.Cos((double)f.Angle);
myMatrix.RotateAt((float)f.Angle,pointF00);
}
//MessageBox.Show(dx.ToString()+"\n"+dy.ToString(),"DXDY");
//myMatrix.Translate(dx,dy);
g.Transform = myMatrix;
g.DrawImage(m_Bitmap,0,0);
m_Bitmap=(Bitmap)bmp;
g.Dispose();
}

现在可以实现图片旋转了,但旋转后的图片明显变小了。我保存生成的新图片,察看此图时为32位像素图片了,原图为24位。
请问如何解决此问题?
...全文
386 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
大可山人 2004-11-22
  • 打赏
  • 举报
回复
已经实现了,凡事需要多靠自己。
大可山人 2004-11-22
  • 打赏
  • 举报
回复
看来又是石沉大海!
_NET2004 2004-11-22
  • 打赏
  • 举报
回复
帮你顶一下
learner01 2004-11-22
  • 打赏
  • 举报
回复
等待!
learner01 2004-11-22
  • 打赏
  • 举报
回复
up!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧