winapi - GDI+ FillPolygon 包括左侧和顶部轮廓?
问题描述
我使用 GDI+FillPolygon()
函数创建了一个梯形,但发现它的右侧和底部相差 1 个像素。我假设你传入了要填充的区域的点,但更仔细地阅读它说它填充了多边形的内部,如果这样做的话。我实际发现的是填充函数包括左和上(x,y)但不包括右和下(x,y)。为了简单起见,就矩形而言,填充(0,0)-(10,10)时,填充区域为(0,0)-(9,9)。我希望它是(0,0)-(10,10)或(1,1)-(9,9)。毕竟,给出的点都是x,y。所以我的问题是,这是设计吗?为什么不记录?还是我错过了什么?
蒂亚!!
解决方案
我无法重现你的问题,请看下面的截图:
代码:
Graphics graphics(hdc);
SolidBrush solidBrush(Color(255, 255, 0, 0));
Point point1 = Point(0, 0);
Point point2 = Point(0, 10);
Point point3 = Point(10, 10);
Point point4 = Point(10, 0);
Point points[4] = {point1,point2,point3,point4};
graphics.FillPolygon(&solidBrush, points, 4);
如果您的代码有任何差异,请在问题中添加您的代码和屏幕截图。
更新:
我添加了一个新的屏幕快照来研究这个问题:
如果区域在 0 / 10 (1-9) 内,则宽度/高度应为 9,如果包含给定 0 / 10 (0-10) 的 x、y 点,则宽度/高度应为 11。
不,宽度和高度应为 10 像素。如果您的意思是DrawRectangle
,该区域应为 9x9 像素,不包括 1 像素笔。
如果使用Rectangle
,则该区域应为 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
推荐阅读
- flutter - 在 Flutter 中从 TextField 修改数组
- java - 如何将整数拆分为许多除法器及其余数的列表
- java - 在不实际运行代码的情况下,如何知道实现 Comparable<> 的类的排序顺序?
- javascript - 如何在圆环图上显示鼠标悬停事件的文本
- android - Kotlin Lambda 在 StartActivity 之后为空
- oracle - 如何在函数“格式表”中“添加成员”以在 Powershell 中获取新的“成员类型”?
- git - git 是否可以使用更智能的合并冲突算法?
- android - Android将图像从图库加载到图像视图而不减小图像大小
- kotlin - 使用可为空参数解析 kotlin Pair 在空 json 上失败
- azure-active-directory - ADFS 和身份服务器 4 的自动登录(跳过登录页面)