C#画图练习,在画布中可以放入小图片,小图片可以旋转,画布可以放大缩小。
问题是这样的,画布放大后,再旋转图片,发现图片不在原来的位置了。
画布移动、缩放代码:
private void DrawArea_Paint(object sender, PaintEventArgs e){
Matrix mx = new Matrix();
mx.Translate(_panX,_panY, MatrixOrder.Append);
mx.Scale(_zoom, _zoom, MatrixOrder.Append);
e.Graphics.Transform = mx;
}
图片的draw方法:
public override void Draw(Graphics g)
{
Matrix mSave = g.Transform;
if (this.ROTATION != 0)
{
//关于旋转 此处以某点旋转
//会出现绘制的图片偏离的问题。
Matrix m = mSave.Clone();
m.RotateAt((float)ROTATION, new PointF(rectangle.Left + (rectangle.Width / 2), rectangle.Top + (rectangle.Height / 2)), MatrixOrder.Append);
g.Transform = m;
}
g.DrawImage(_image, new Point(rectangle.X, rectangle.Y));
g.Transform = mSave;
}是坐标点变换的问题吗?旋转图片后,再放大整个画布,不会有问题。放大后,再旋转就有问题。
求助大佬。。
问题是这样的,画布放大后,再旋转图片,发现图片不在原来的位置了。
画布移动、缩放代码:
private void DrawArea_Paint(object sender, PaintEventArgs e){
Matrix mx = new Matrix();
mx.Translate(_panX,_panY, MatrixOrder.Append);
mx.Scale(_zoom, _zoom, MatrixOrder.Append);
e.Graphics.Transform = mx;
}
图片的draw方法:
public override void Draw(Graphics g)
{
Matrix mSave = g.Transform;
if (this.ROTATION != 0)
{
//关于旋转 此处以某点旋转
//会出现绘制的图片偏离的问题。
Matrix m = mSave.Clone();
m.RotateAt((float)ROTATION, new PointF(rectangle.Left + (rectangle.Width / 2), rectangle.Top + (rectangle.Height / 2)), MatrixOrder.Append);
g.Transform = m;
}
g.DrawImage(_image, new Point(rectangle.X, rectangle.Y));
g.Transform = mSave;
}是坐标点变换的问题吗?旋转图片后,再放大整个画布,不会有问题。放大后,再旋转就有问题。
求助大佬。。
解决方案 »
- 页面加载,图片显示的是老图片
- socket服务端的错误,帮忙看看.
- C# string转二进制怎么实现?二进制转string怎么实现?
- 有关MSDN帮助文档的问题?
- c#如何截获WebBrowser的文件请求?
- 关于microsoft parallel extensions to the .net framework 3.5问题?
- google中国编程挑战赛-练习题之一(1000分题)
- 制作安装项目的时候,怎么把用户选择的安装路径保存到注册表里面去啊
- C#中怎样将内容写入指定的文本文件中?
- 水晶报表如何划斜线?
- [wpf]请教如何控制自定义类的xaml序列化节点
- 关于vs c# textbox禁用的问题
new PointF(rectangle.Left + (rectangle.Width / 2)
之类的坐标,都要放大相应的比例