Нарисуйте графику со смещением - PullRequest
4 голосов
/ 24 марта 2012

В моем коде, скажем, у меня есть 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 ]

8 голосов
/ 24 марта 2012

Установить преобразование для объекта 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);
}
3 голосов
/ 24 марта 2012

Используйте метод Graphics

public void TranslateTransform(float dx, float dy)

g.TranslateTransform(dx, dy);
2 голосов
/ 24 марта 2012

Вы можете использовать метод Graphics.TranslateTransform :

protected override void OnPaint(PaintEventArgs e)
{
    e.Graphics.TranslateTransform(50, 50);
    PaintObject(e.Graphics);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...