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位。
请问如何解决此问题?