GDI+正在创建填充的CustomLineCap
GDI+ Creating filled CustomLineCap
我正试图在GDI+(C++)中构建自定义的行大写,但我无法让它绘制填充的大写,而未填充的大写可以绘制。
我设置了一个闭合的多边形路径,创建了一个以该路径为第一个参数的CustomLineCap(fillPath参数),并在笔上调用SetCustomStartCap:
std::vector<Gdiplus::Point> pathPoints =
{
Gdiplus::Point(20,0),
Gdiplus::Point(0,20),
Gdiplus::Point(-20,0),
Gdiplus::Point(20,0)
};
Gdiplus::GraphicsPath path;
path.AddPolygon(&pathPoints[0], 4);
Gdiplus::CustomLineCap startCap(&path, nullptr);
Gdiplus::CustomLineCap endCap(nullptr, path.Clone());
m_Pen.SetCustomStartCap(&startCap);
m_Pen.SetCustomEndCap(&endCap);
我读过一些评论,认为这可能与点顺序有关,或者如果路径肯定是封闭的。我试着把这些点同时按顺时针和逆时针排列,但似乎没有帮助。
有人能发现我是否做错了什么,或者我错过了什么吗?
除了点的顺序之外,我认为形状必须与负y轴相交,也就是线本身。所以,如果你创建这样的多边形
std::vector<Point> pathPoints =
{
Gdiplus::Point(20,-1),
Gdiplus::Point(0,19),
Gdiplus::Point(-20,-1)
};
然后你会有一个想要的形状和大小的线帽,但它会与线重叠一点。
或者,如果您特别想要箭头,请查看AdjustableArrowCap。只要将isFilled属性设置为TRUE,就可以开始了。或者,您可以将Pen的SetStartCap/SetEndCap方法与LineCapArrowAnchor参数一起使用,但可能无法自定义箭头。
相关文章:
- 在c++中用vector填充一个简单的动态数组
- 如何使用用户输入在C++中正确填充2D数组
- 如何找到大小'x'数组是否完全填充,在C++?
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 通过for循环使用用户输入填充列表
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 如何正确填充在堆上分配的二维数组?
- 将数字转换为填充字符串
- 有没有办法在一行中填充矢量图
- 用C++中的数字和条件填充向量
- 用真值填充矢量
- 使用结构成员指针在C++中填充结构
- 流填充字符的默认定位
- 使用不同算法的 PKCS1v15 填充进行加密 ++ 签名
- C++:使用缓冲区中的数据填充结构
- 如何将零填充的多维数组传递给 C++ 中的函数?
- Cryptopp:获取密码输入的填充字符串
- 填充上编译器生成的复制构造函数之间的不一致
- RcppEigen 模板化函数,用于填充单位法线
- GDI+正在创建填充的CustomLineCap