【问题标题】:Draw mirrored in C# using System.Drawing.Graphics使用 System.Drawing.Graphics 在 C# 中镜像绘制
【发布时间】:2011-10-21 09:49:50
【问题描述】:

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

我从另一个类中调用这个函数,该类有时会对其进行转换。旋转和平移工作正常,但现在我想强制辅助函数将整个物体绘制在 y 轴上。

我尝试使用

g.ScaleTransform(0, -1);

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

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

【问题讨论】:

  • 参数异常:参数无效。当调用 g.ScaleTransform(0, -1);

标签: c# winforms graphics transform mirror


【解决方案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,谢谢这是一个错字,我已修正。

【讨论】:

  • 我不想变换位图,我想用图形对象绘制镜像线、矩形、路径等。此外,图像本身支持翻转(镜像):msdn.microsoft.com/de-de/library/… 不过感谢您的帮助。
  • 这真的很慢。如果要操作单个像素,请使用 Bitmap.LockBits(),请参阅msdn.microsoft.com/en-us/library/5ey6h79d.aspx
  • 这种模式确实有效。我尝试了代码,但我不得不将“j > source.Width”更改为“j
【解决方案2】:

你需要打电话

g.ScaleTransform(1, -1);

请注意,现在您的图像将绘制在屏幕上边缘的后面。要修复它,您需要在g.ScaleTransform 之前调用g.TranslateTransform

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 2011-09-08
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多