【发布时间】:2013-03-29 22:28:04
【问题描述】:
左边是我使用类似绘画的程序绘制的多边形。右边是System.Drawing.Bitmap/Graphics绘制的多边形:
绘制它的代码如下:
protected static Bitmap CropImage(Bitmap src, Vector2[] rect)
{
var result = new Bitmap(src.Width, src.Height);
using (Graphics g = Graphics.FromImage(result))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
var pen = new Pen(Color.White);
g.DrawImage(src, new Point(0,0));
var poly = rect.Select(p => p.ToPointF()).ToArray();
g.DrawPolygon(pen, poly);
}
return result;
}
poly 是:
{System.Drawing.PointF[4]}
[0]: {X = 57.4230042 Y = 57.4229736}
[1]: {X = 147.058868 Y = 56.0224}
[2]: {X = 148.43277 Y = 143.951767}
[3]: {X = 58.7969131 Y = 145.352341}
图片中的每个黑色方块都是 50x50。如果您查看poly,所有坐标都与您预期的完全一样:poly[0] 略高于 50,50,对应于 inside 标记为“6”的黑色方块(如图所示在左图中)。
那么Graphics 是怎么弄错了地方的呢?看起来它正在缩小整个矩形。
【问题讨论】:
-
你确定数字是正确的吗?如果正方形 1 的左上角是 (0,0),那么正方形 6 的左上角是 (50,50) - 因此正方形 6 内的一个像素为 (51,51,99,99)。另外,您不太清楚结果有什么问题,我只是假设您正在尝试在正方形 6 内绘制边框。
-
@Jasmine:左边的是我画的,我想右边的出来一模一样。即,矩形应覆盖大部分正方形 6 和 11。您对正方形 6 的坐标是正确的,它应该是 (51,51)-(100,100)。
-
好的,从问题中并不清楚。始终明确说明您得到了什么以及错误的原因。不过你得到了答案,我忘记了那种方法中的缩放比例。