在偏移处绘制图形

时间:2012-03-24 19:35:40

标签: c# graphics

在我的代码中,假设我有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)
  }
}

3 个答案:

答案 0 :(得分:8)

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);
}

答案 1 :(得分:3)

使用Graphics方法

public void TranslateTransform(float dx, float dy)

g.TranslateTransform(dx, dy);

答案 2 :(得分:2)

您可以使用Graphics.TranslateTransform方法:

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