猿问

在以 (0,0) 为图像中心的位图上绘制

我想在位图上画一个箭头,但我希望 (0,0) 坐标是屏幕的中心,所以如果我像这样在 (0,0) 和 (100,100) 之间画一个箭头


Point p1 = new Point(0,0);

Point p2 = new Point(100,100);

graphics.DrawLine(pen, p1, p2);

如果位图的大小是 200*200,我希望箭头从中心到右上角。


有什么办法可以改变它,让 (0,0) 不在左上角吗?


ibeautiful
浏览 118回答 1
1回答

qq_遁去的一_1

不,没有办法更改绘图系统,使 0,0 不在左上角。您可以让 Graphics 应用转换(请参阅@TaW 的评论),但它有其缺点,例如渲染文本和图像颠倒,或者您可以自己对坐标执行数学转换:Point ConvertAsIf00IsCenterAndPositiveYGoesUpwards(Point p, Rectangle r){  return new Point(r.Width/2 + p.X, r.Height/2 - p.Y);}您想要一条在“您的绘图系统”中从 0,0 到 100,100 的线(其中 0,0 是中心,两个轴的范围是 -100 到 +100)。Rectangle在使用“0,0 是左上角”坐标系的 200x200画布区域 (the ) 上,您实际上想要一条从 100,100 到 200,0 的线。此数学将您的 0,0 点转换为 100,100,将您的 100,100 点转换为 200,0。同样,对于其他点,例如 100,-100(您的右下角),它变为 200,200(绘图系统的右下角),而您的 -100,100(您的左上角)变为 0,0(绘图系统的左上角)等Rectangle r = new Rectangle(200,200);Point p1 = new ConvertAsIf00IsCenterAndPositiveYGoesUpwards(Point(0,0), r);Point p2 = new ConvertAsIf00IsCenterAndPositiveYGoesUpwards(Point(100,100), r);graphics.DrawLine(pen, p1, p2);您可能想将该方法命名为更活泼的名称。老实说,我想说的是,开发人员可能会发现仅习惯于左上角为 0,0 且下/右为正值的坐标系会更容易、更有效,即使这与图表有所不同他们在小学数学中习惯的系统,其中 0,0 位于中心,负数向下/向左移动,正数向上/向右移动
随时随地看视频慕课网APP
我要回答