Нарисуйте манипулированную графику в другую графику - PullRequest
3 голосов
/ 14 марта 2012

Я хочу нарисовать манипулируемую графику в другую:

// I have two graphics:
var gHead = Graphics.FromImage(h);
var gBackground = Graphics.FromImage(b);

// Transform the first one
var matrix = new Matrix();
matrix.Rotate(30);
gHead.Transform = matrix;

// Write the first in the second
gBackground.DrawImage(h, 200, 0, 170, 170);

Выводим фоновое изображение с изображением головы, но изображение головы не поворачивается.

Чего мне не хватает?

Ответы [ 2 ]

3 голосов
/ 14 марта 2012

Свойство Transform графического объекта - это свойство. Он не выполняет никаких действий, а только сообщает графическому объекту, как он должен рисовать изображения.

Итак, вы хотите установить свойство Transform для графического объекта, на котором вы рисуете - в этом случае его следует применить к вашему gBackground объекту, например, так ...

gBackground.Transform = matrix;

затем при вызове метода DrawImage для объекта gBackground он будет учитывать примененное вами свойство Transform.

Имейте в виду, что это изменение свойства будет сохраняться во всех последующих вызовах DrawImage, поэтому вам может потребоваться сбросить его или изменить значение перед дальнейшим рисованием (если вам даже нужно)


Для большей ясности ваш окончательный код должен выглядеть следующим образом ...

// Just need one graphics
var gBackground = Graphics.FromImage(b);

// Apply transform to object to draw on
var matrix = new Matrix();
matrix.Rotate(30);
gBackground.Transform = matrix;

// Write the first in the second
gBackground.DrawImage(h, 200, 0, 170, 170);
1 голос
/ 14 марта 2012

Применение преобразования к объекту Graphics полезно только в том случае, если вы собираетесь использовать этот конкретный объект. Вы ничего не делаете с переменной gHead. Попробуйте применить это преобразование к gBackground.

...