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

时间:2019-04-25 07:37:06

标签: c# bitmap

我想在位图上绘制箭头,但我想将(0,0)坐标作为屏幕的中心,所以如果我在(0,0)和(100,100)之间绘制箭头,如下所示< / p>

Point p1 = new Point(0,0);
Point p2 = new Point(100,100);
graphics.DrawLine(pen, p1, p2);

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

有什么方法可以更改此设置,以便(0,0)不在左上角?

1 个答案:

答案 0 :(得分:-1)

不,没有办法更改绘图系统,以使0,0不在左上角。您可以让图形应用变换(请参阅@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居中,负数向下/向左移动,正数向上/向右移动