我有一个在WinForms中绘制和编辑矢量图形的应用程序
我有图像,矩形,椭圆,区域等,我知道如何通过鼠标移动来调整它们的大小。但我不知道如何通过鼠标移动来旋转它们。
我将对象绘制到图形中。
我试过这个,但它不起作用。
g.TranslateTransform((float)(this.Rectangle.X + this.Rectangle.Width / 2), (float)(this.Rectangle.Y + this.Rectangle.Height / 2));
g.RotateTransform(this.Rotation);
g.TranslateTransform(-(float)(this.Rectangle.X + this.Rectangle.Width / 2), -(float)(this.Rectangle.Y + this.Rectangle.Height / 2));
//g.TranslateTransform(-(float)(rect.X + rect.Width / 2), -(float)(rect.Y + rect.Height / 2));
g.DrawImage(img, rect);
g.ResetTransform();
这不起作用,因为我不知道如何在新的(旋转)位置找到物体的角落,所以我无法调整大小......
答案 0 :(得分:1)
你需要申请高中三角学。如果你谷歌“graphics.drawimage轮换”
,有很多文章但首先,你不应该改变Graphics对象本身。您只是想获得图像的新边界框。要做到这一点:
拍摄以原点为中心的图像边界框。请记住,为了DrawImage(Image,Point [])
的好处,这被定义为三个点Point[] boundingBox = { new Point(-width /2, -height/2),
new Point(width/2, -height/2),
new Point(-width/2, height/2) };
使用trig旋转它。通过以下函数为每个点提供信息:
Point rotatePointAroundOrigin(Point point, float angleInDegrees) {
float angle = angleInDegrees * Math.PI/180; // get angle in radians
return new Point( point.X * Math.Cos(angle) - point.Y * Math.Sin(angle),
point.X * Math.Sin(angle) + point.Y * Math.Cos(angle));
}
将boundind框转换为它必须去的位置。为每个点添加宽度/ 2和高度/ 2,加上你想要的额外金额。
致电DrawImage(image, boundingBox)