Winapi GDI+;FillPolygon是否包含左侧和顶部轮廓?

Winapi GDI+;FillPolygon是否包含左侧和顶部轮廓?,winapi,gdi+,Winapi,Gdi+,我使用GDI+FillPolygon()函数创建了一个梯形,但发现它的右侧和底部相差1个像素。我假设你通过了要填充的区域的点,但更仔细地看,它说它填充了多边形的内部,如果它这样做的话。我实际发现fill函数包括左和上(x,y),但不包括右和下(x,y)。简单来说,用矩形来表示,当填充(0,0)-(10,10)时,填充区域是(0,0)-(9,9)。我希望它是(0,0)-(10,10)或(1,1)-(9,9)。毕竟,给出的点都是x,y。所以我的问题是,这是设计吗?为什么不记录?还是我遗漏了什么 蒂娅

我使用GDI+
FillPolygon()
函数创建了一个梯形,但发现它的右侧和底部相差1个像素。我假设你通过了要填充的区域的点,但更仔细地看,它说它填充了多边形的内部,如果它这样做的话。我实际发现fill函数包括左和上(x,y),但不包括右和下(x,y)。简单来说,用矩形来表示,当填充(0,0)-(10,10)时,填充区域是(0,0)-(9,9)。我希望它是(0,0)-(10,10)或(1,1)-(9,9)。毕竟,给出的点都是x,y。所以我的问题是,这是设计吗?为什么不记录?还是我遗漏了什么


蒂娅

至少对于矩形,这是在(绘制矩形)[中记录的行为。此行为类似于线的工作方式(使用LineTo绘制)其中包括源点,但不包括目标点。我不知道使用SetWorldTransform记录的更改是否会更改单个线条的绘制方式。

至少对于矩形,这是在(绘制矩形)[中记录的行为。此行为类似于线条的工作方式(使用LineTo绘制)其中包括源点,但不包括目标。我不知道SetWorldTransform记录的更改是否会改变单个线条的绘制方式。

我无法重现您的问题,请参见下面的屏幕截图:

代码:

如果您的代码有任何差异,请在问题中添加您的代码和屏幕截图

更新:

我添加了一个新的屏幕快照来研究这个问题:


如果面积在0/10(1-9)以内,则宽度/高度应为9;如果包含给定0/10(0-10)的x、y点,则宽度/高度应为11。

不,宽度和高度应为10像素。如果您的意思是
DrawRectangle
,则该区域应为9x9像素,不包括1像素笔

如果使用
矩形
,则面积应为8x8像素,不包括1像素笔

测试代码:

      Pen blackPen(Color(255, 0, 0, 0), 1);  //1 pixel
      g->DrawRectangle(&blackPen, 0, 24, 10, 10); //10x10

      Rectangle(hdc, 0, 36, 10, 46);  // 10x10

      RECT rect;
      rect.left = 0;            
      rect.top = 12;
      rect.right = 10;
      rect.bottom = 22;
      FillRect(hdc, &rect, (HBRUSH)(COLOR_WINDOW + 3)); //10x10

我无法重现您的问题,请参见下面的屏幕截图:

代码:

如果您的代码有任何差异,请在问题中添加您的代码和屏幕截图

更新:

我添加了一个新的屏幕快照来研究这个问题:


如果面积在0/10(1-9)以内,则宽度/高度应为9;如果包含给定0/10(0-10)的x、y点,则宽度/高度应为11。

不,宽度和高度应为10像素。如果您的意思是
DrawRectangle
,则该区域应为9x9像素,不包括1像素笔

如果使用
矩形
,则面积应为8x8像素,不包括1像素笔

测试代码:

      Pen blackPen(Color(255, 0, 0, 0), 1);  //1 pixel
      g->DrawRectangle(&blackPen, 0, 24, 10, 10); //10x10

      Rectangle(hdc, 0, 36, 10, 46);  // 10x10

      RECT rect;
      rect.left = 0;            
      rect.top = 12;
      rect.right = 10;
      rect.bottom = 22;
      FillRect(hdc, &rect, (HBRUSH)(COLOR_WINDOW + 3)); //10x10

如果区域在0/10(1-9)内,则宽度/高度应为9,如果包含给定0/10(0-10)的x,y点,则宽度/高度应为11。因为处理x,y(我知道RECT和一些GDI项目通过一件事进行关闭,但我使用GDI+进行的其他测试没有它(因为它处理x,y,宽度,高度,但似乎填充处理所有x,y)?我想GDI和GDI+都需要Windows图形API。谢谢。图片帮助。MS/Windows和其他基于图形和字符的框架在其他环境(如DOS)中的工作方式的语义在结束点(右下角)时是不同的,处理X,Y。在这些X中,右下角的Y是结束点(X,Y处的像素被填充并在那里结束)。在窗口中的许多矩形样式中,它在X-1,Y-1处结束(我确信速度是一开始完成的主要原因,因此宽度/高度的计算速度比必须调整1快)。如果区域在0/10(1-9)内,则宽度/高度应为9,或11,如果包括x,y点,则给出0/10(0-10)。因为处理x,y(我知道RECT和一些GDI项只做一件事,但我用GDI+做的其他测试没有它(因为它处理x,y,宽度,高度,但填充似乎处理所有x,y)?我想GDI和GDI+都需要Windows图形API。谢谢。图片帮助。MS/Windows和其他基于图形和字符的框架在其他环境(如DOS)中的工作方式的语义在结束点(右下角)时是不同的,处理X,Y。在这些X中,右下角的Y是结束点(X,Y处的像素被填充并在那里结束)。在窗口中的许多矩形样式中,它在X-1,Y-1处结束(我确信速度是一开始完成的主要原因,因此宽度/高度计算比调整1更快)。