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

问题描述 投票:0回答:1

我想在位图上绘制一个箭头,但我希望(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)不在左上角?

c# bitmap
1个回答
-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)。

在使用“0,0是左上角”坐标系的200x200的画布区域(Rectangle)上,您实际上需要一条从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位于中心,负数向下/向左移动,正向向上/向右移动

© www.soinside.com 2019 - 2024. All rights reserved.