C#GDI反转图形在X轴上翻转

时间:2009-11-23 19:53:56

标签: c# graphics drawing gdi

我正在使用Graphics类绘制一系列Points。我正在从Point数组中读取。无论出于何种原因,渲染图像都是颠倒的(在X轴上翻转)。是否有一种简单的方法可以告诉Graphics类绘制“颠倒”?非常感谢。

2 个答案:

答案 0 :(得分:1)

这听起来不像是颠倒过来,但是它的坐标被颠倒了。

检查您是否期望具有正确原点的坐标。默认情况下,0,0应默认位于屏幕的左上角。

编辑:您应该能够通过在绘制每个点时更改Y来进行补偿,以使用公式Y = height - Y.

答案 1 :(得分:0)

您应该注意,大多数绘图系统中图形的默认方向或方向是从显示屏顶部到显示屏底部。要弥补这一点,您需要知道查看区域的预期高度,然后从该高度中减去坐标。这将反转方向,并相对于查看区域的底部设置您的数字。

假设您有两点指定为< x,y>以及300(w)x 200(h)的视口。

{{0, 0}, {100, 200}}

在观看区域中绘图时,< x,y>将被映射到< x,200-y>。这给了我们以下几点。

{{0, 200}, {100, 0}}

还有一些机制可以将映射模式切换为笛卡尔样式坐标,这可能与您的源数据匹配,但通常会被避免,因为它会重新映射已经补偿了默认方向的所有其他内容。

如果这是你真正想要的,那么Windows中的SetMapMode()函数可以用于此目的。

SetMapMode() @ MSDN

这是函数的P / Invoke签名。 (从 pinvoke.net: setmapmode (gdi32)

[DllImport("gdi32.dll")]
static extern int SetMapMode(IntPtr hdc, int fnMapMode);

修改

还有一种方法可以实现这一点,我个人还没有尝试过。

Graphics.TransformPoints Method @ MSDN

这允许您指定坐标系,Graphics对象将为您执行映射。在您的情况下,您可能希望使用CoordinateSpace.World或CoordinateSpace.Page作为第一个参数,并使用CoordinateSpace.Device作为第二个参数。