在以 (0,0) 为图像中心的位图上绘制
Draw on a bitmap with (0,0) being the center of the image
我想在位图上画一个箭头,但我希望 (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) 不在左上角吗?
不,没有办法更改绘图系统,使 0,0 不在左上角。您可以让 Graphics 应用转换(请参阅@TaW 的评论)但它有其缺点,例如将文本和图像颠倒,或者您可以自己对坐标进行数学转换:
Point ConvertAsIf00IsCenterAndPositiveYGoesUpwards(Point p, Rectangle r){
return new Point(r.Width/2 + p.X, r.Height/2 - p.Y);
}
您想要在 "your drawing system" 中从 0,0 到 100,100 的线(其中 0,0 是中心,两个轴的范围是 -100 到 +100)。
在使用“0,0 是左上角”坐标系的 200x200 canvas 区域(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 且正值为 down/right 的坐标系会更容易、更有效,即使这与他们在小学数学中习惯的图形系统不同,其中 0,0 位于中心,负数移动 down/left,正数移动 up/right
我想在位图上画一个箭头,但我希望 (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) 不在左上角吗?
不,没有办法更改绘图系统,使 0,0 不在左上角。您可以让 Graphics 应用转换(请参阅@TaW 的评论)但它有其缺点,例如将文本和图像颠倒,或者您可以自己对坐标进行数学转换:
Point ConvertAsIf00IsCenterAndPositiveYGoesUpwards(Point p, Rectangle r){
return new Point(r.Width/2 + p.X, r.Height/2 - p.Y);
}
您想要在 "your drawing system" 中从 0,0 到 100,100 的线(其中 0,0 是中心,两个轴的范围是 -100 到 +100)。
在使用“0,0 是左上角”坐标系的 200x200 canvas 区域(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 且正值为 down/right 的坐标系会更容易、更有效,即使这与他们在小学数学中习惯的图形系统不同,其中 0,0 位于中心,负数移动 down/left,正数移动 up/right