使用System.Drawing.Graphics在C#中镜像

时间:2011-08-06 09:28:40

标签: c# winforms graphics transform mirror

我编写了一个小辅助函数,它执行某种绘制操作,这些操作相当复杂。

我从另一个类中调用此函数,该类有时会对其应用转换。旋转和平移工作正常,但现在我想强制辅助函数绘制在y轴上镜像的整个事物。

我尝试使用

g.ScaleTransform(0, -1);

在调用辅助函数之前,但它抛出异常。

那么,如何使用System.Drawing.Graphics对象绘制镜像?

2 个答案:

答案 0 :(得分:12)

您需要致电

g.ScaleTransform(1, -1);

请注意,现在您的图像将被绘制在屏幕上方边缘之后。要解决此问题,您需要在g.TranslateTransform之前致电g.ScaleTransform

g.TranslateTransform(0, YourImageHeightHere);
g.ScaleTransform(1, -1);

答案 1 :(得分:1)

这是用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,谢谢这是一个错字,我修好了。