• 主页
• .NET Framework
• ASP
• Web Services
• .NET互联网桌面应用
• VB
• 图表区
• 分析与设计
• 组件/控件开发
• AppLauncher
• 问答

# 帮忙看看，读取图片的宽高和实际的宽高是相反的

...全文
654 点赞 收藏 1

1 条回复

wang_peng 05-21

``````    /// <summary>
/// 根据角度旋转图标
/// </summary>
/// <param name="img"></param>
public Image RotateImg(Image img, float angle)
{
//通过Png图片设置图片透明，修改旋转图片变黑问题。
int width = img.Width;
int height = img.Height;
//角度
Matrix mtrx = new Matrix();
mtrx.RotateAt(angle, new PointF((width / 2), (height / 2)), MatrixOrder.Append);
//得到旋转后的矩形
GraphicsPath path = new GraphicsPath();
RectangleF rct = path.GetBounds(mtrx);
//生成目标位图
Bitmap devImage = new Bitmap((int)(rct.Width), (int)(rct.Height));
Graphics g = Graphics.FromImage(devImage);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//计算偏移量
Point Offset = new Point((int)(rct.Width - width) / 2, (int)(rct.Height - height) / 2);
//构造图像显示区域：让图像的中心与窗口的中心点一致
Rectangle rect = new Rectangle(Offset.X, Offset.Y, (int)width, (int)height);
Point center = new Point((int)(rect.X + rect.Width / 2), (int)(rect.Y + rect.Height / 2));
g.TranslateTransform(center.X, center.Y);
g.RotateTransform(angle);
//恢复图像在水平和垂直方向的平移
g.TranslateTransform(-center.X, -center.Y);
g.DrawImage(img, rect);
//重至绘图的所有变换
g.ResetTransform();
g.Save();
g.Dispose();
path.Dispose();
return devImage;
}
/// <summary>
/// 第二种方法
/// </summary>
/// <param name="b"></param>
/// <param name="angle"></param>
/// <returns></returns>
public Image RotateImg2(Image b, float angle)
{
angle = angle % 360;            //弧度转换
double radian = angle * Math.PI / 180.0;
//原图的宽和高
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)));
//目标位图
Image 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);
//构造图像显示区域：让图像的中心与窗口的中心点一致
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();
//dsImage.Save("yuancd.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
return dsImage;
}``````

.NET技术社区

5.8w+

.NET技术交流专区