Рисование отражается в C # с использованием System.Drawing.Graphics - PullRequest
6 голосов
/ 06 августа 2011

Я написал небольшую вспомогательную функцию, которая выполняет какие-то операции рисования, которые довольно сложны.

Я вызываю эту функцию из другого класса, который иногда применяет к ней преобразования. Вращение и перевод работают нормально, но теперь я хочу заставить вспомогательную функцию рисовать все зеркально по оси Y.

Я пытался использовать

g.ScaleTransform(0, -1);

до вызова вспомогательной функции, но она вызвала исключение.

Итак, как можно рисовать зеркально, используя объект System.Drawing.Graphics?

Ответы [ 2 ]

12 голосов
/ 06 августа 2011

Вам нужно позвонить

g.ScaleTransform(1, -1);

Обратите внимание, что теперь ваше изображение будет нарисовано за верхним краем экрана.Чтобы это исправить, вам нужно позвонить g.TranslateTransform до g.ScaleTransform:

g.TranslateTransform(0, YourImageHeightHere);
g.ScaleTransform(1, -1);
1 голос
/ 06 августа 2011

Вот как это делается с помощью BitMap: вы можете нарисовать изображение из графики и перерисовать графический объект с измененным.

    public Bitmap MirrorImage(Bitmap source)
    {
        Bitmap mirrored = new Bitmap(source.Width, source.Height);
        for(int i = 0; i < source.Height; i++)
            for(int j = 0; j < source.Width; j++)
                mirrored.SetPixel(i, j, source.GetPixel(source.Width - j - 1, i);
        return mirrored;
    }

Редактировать: @MattSlay, спасибо, что это была опечатка, я исправил.

...