2012-03-24 163 views
2

在我的代码中,假设我有PaintObject(Graphics g)。在其他一些函数中,我想调用PaintObject函数在偏移处绘制某些东西,而不是在(0,0)处绘制它。在偏移处绘制图形

我知道在Java中,我可以使用Graphics.create(x, y, width, height)函数来创建一个我可以使用的图形对象的副本,它将在原始图形的边界内绘制。有没有办法在C#中做类似的事情?

只给你的就是我的代码看起来是这样一个例子:

class MyClass : UserControl { 
    void PaintObject(Graphics g) { 
    // Example: draw 10x10 rectangle 
    g.DrawRectangle(new Pen(Color.Black), 0, 0, 10, 10); 
    } 

    protected override void OnPaint(PaintEventArgs e) { 
    Graphics g = e.Graphics; 
    // TODO: Paint object from PaintObject() at offset (50, 50) 
    } 
} 
+0

使用Graphics.TranslateTransform() – 2012-03-24 19:38:53

回答

7

设置Graphics对象上的转变:

protected override void OnPaint(PaintEventArgs e) 
{ 
    Graphics g = e.Graphics; 

    Matrix transformation = new Matrix(); 
    transformation.Translate(50, 50); 

    g.Transform = transformation; 
} 

protected override void OnPaint(PaintEventArgs e) 
{ 
    Graphics g = e.Graphics; 
    g.TranslateTransform(50, 50); 
} 
+0

感谢您的回答:) – Frxstrem 2012-03-24 20:00:04

1

你可以使用Graphics.TranslateTransform方法:

protected override void OnPaint(PaintEventArgs e) 
{ 
    e.Graphics.TranslateTransform(50, 50); 
    PaintObject(e.Graphics); 
} 
2

使用Graphics方法

public void TranslateTransform(float dx, float dy) 

g.TranslateTransform(dx, dy); 
+0

感谢您的回答:) – Frxstrem 2012-03-24 19:59:25