我必须ZOOM-IN&我在winform上绘制的2D图形的ZOOM-OUT特定部分,如(直线,矩形,圆形)。 我没有使用任何图片框,面板。 我创建了简单的程序来绘制圆圈和圆圈。按钮单击尝试缩放 但它显示错误"参数无效" 在方法Drawing()@ Line- DeviceContexct.Transform = mainViewTransform;
public Graphics DeviceContexct;
public Matrix mainViewTransform = new Matrix();
private void ScalingCircle_Paint( object sender, PaintEventArgs e )
{
Pen myPen = new Pen(Color.Blue, 1);
e.Graphics.DrawRectangle(myPen, 50, 50, 100, 100);
mainViewTransform.Scale(3, 2);
DeviceContexct = e.Graphics;
}
private void Drawing(Graphics gr)
{
Pen myPen2 = new Pen(Color.Red, 1);
DeviceContexct.Transform = mainViewTransform;
DeviceContexct.DrawRectangle(myPen2, 50, 50, 100, 100);
}
private void button1_Click( object sender, EventArgs e )
{
Drawing(DeviceContexct);
}
答案 0 :(得分:0)
我更喜欢使用System.Drawing.Graphics对象绘制到Bitmaps中。 然后你可以使用带有“go.DrawImage(...)”的图形对象将位图直接绘制到你的winforms中并实际给它一个比例。
https://msdn.microsoft.com/en-us//library/ms142040(v=vs.110).aspx
答案 1 :(得分:0)
我得到了解决方案,谢谢你的帮助。
我只需要在按钮点击时调用刷新/无效等。
public partial class ScalingCircle : Form
{
public Graphics DeviceContexct;
// current transformation matrix of main view (offset & scaling)
public Matrix mainViewTransform = new Matrix();
public int scale = 1;
public ScalingCircle()
{
InitializeComponent();
DeviceContexct = Graphics.FromHwnd(this.Handle);
DeviceContexct = this.CreateGraphics();
}
public void ScalingCircle_Paint(object sender, PaintEventArgs e)
{
DeviceContexct = e.Graphics;
DeviceContexct.PageUnit = GraphicsUnit.Pixel;
DeviceContexct.Transform = mainViewTransform;
ScalingCircle1(scale);
}
private void ScalingCircle1(int x )
{
Pen myPen2 = new Pen(Color.Black, 1);
DeviceContexct.Transform = mainViewTransform;
Rectangle myRectangle = new Rectangle(50, 50, 100 * x, 100 * x);
DeviceContexct.FillRectangle(new SolidBrush(Color.BurlyWood), myRectangle);
}
private void ScalingCircle_Load( object sender, EventArgs e )
{
this.ResizeRedraw = true;
}
private void button1_Click( object sender, EventArgs e )
{
scale += 5;
this.Refresh();
}
private void button2_Click( object sender, EventArgs e )
{
if (scale > 1)
{
scale -= 5;
this.Refresh();
}
}
}
答案 2 :(得分:-2)
您可以使用转换。用于绘制事物的图形对象具有System.Drawing.Drawing2D.Matrix类型的Transformation属性。 Graphics也有ScaleTransform方法。
我自己没有使用它,但这就是microsofts Chart的用法。
https://msdn.microsoft.com/de-de/library/system.drawing.drawing2d.matrix(v=vs.110).aspx https://msdn.microsoft.com/de-de/library/system.drawing.graphics.scaletransform(v=vs.110).aspx