请教高手,如何在VC下实现用符号填充直线的功能

dengyl 2004-10-26 07:05:41
请教高手,如何在VC下实现用符号填充直线的功能。我用的方法是,定义一个逻辑画刷,让该画刷的图案是我想用的符号(我用的是位图),然后用这个画刷定义一个笔,绘制直线,如下代码:
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1); // 位图的大小是10*10象素
HBITMAP hBmp;
hBmp = HBITMAP(bmp);

LOGBRUSH LogBrush;
LogBrush.lbStyle = BS_PATTERN;
LogBrush.lbHatch = (LONG)hBmp;

CPen pen;
pen.CreatePen(PS_GEOMETRIC, 10, &LogBrush); // 创建笔,10个单位宽
CPen *pOldPen;
pOldPen = pDC->SelectObject(&pen);
pDC->SelectStockObject(BLACK_BRUSH);
pDC->MoveTo(0,0);
pDC->LineTo(0,100); // 画水平线
pDC->MoveTo(0,0)
pDC->LineTo(100, 100); // 画斜线,还应该将位图旋转相应角度后在填充!!

但是,效果很不好,我希望的是以一个位图的宽,以多个位图首尾相连地来填充直线(也就是在线的宽度上,是一个位图,在线的长度上是多个位图首尾相连这样的效果)。但是这个方法的效果却是用多个位图的宽(或者是半个位图加半个位图,总不是一个位图的图案),多个位图首尾相连。

所以,我希望的就是,直线是以一个位图的宽来首尾相连多个位图填充,就像铁路那样。如果直线变宽,位图也要跟着变大,而不能出现直线的宽度上是几个位图填充的。

另外,画斜线,还应该将位图旋转相应角度后在填充,这样的效果才好。

该如何修改我的代码呢?该如何来做呢?
也许应该用其它方法?比如路径?用CRgn来裁剪?望高手指点。
...全文
102 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzwu 2004-10-31
  • 打赏
  • 举报
回复
*******
* / *
***** *
* *
* - *
* *
* *
*****

如上,分三段,分别是三个多边形,再在其中进行间隔的填充,就行了。
zzwu 2004-10-30
  • 打赏
  • 举报
回复
用先画每一段的边界,再在其中进行填充,就可以实现了。
dengyl 2004-10-28
  • 打赏
  • 举报
回复
To zzwu(未名) :
是的,你说的对,当曲线有弯曲时,我还要保证各段的“无缝”拼接。该如何来做呢,盼望前辈提点。
zzwu 2004-10-28
  • 打赏
  • 举报
回复
不用这样的做法,当曲线有弯曲时,你无法保证各段的“无缝”拼接。
syy64 2004-10-27
  • 打赏
  • 举报
回复
楼主真不惜重分。
zzwu 2004-10-27
  • 打赏
  • 举报
回复
想象不出你作的图的最终效果:

"这个方法的效果却是用多个位图的宽(或者是半个位图加半个位图,总不是一个位图的图案),多个位图首尾相连。"

但不管怎样,你想利用画line的方法来画类似于铁路那样的二维图形最终不可能有好的效果.你必须把铁路的每一个黑白段当作1个甚至2个任意四边形来画,为此要精确计算四边形的四个顶点,然后(如为黑色)进行填充.
dengyl 2004-10-27
  • 打赏
  • 举报
回复
to zzwu(未名):
你的建议就是,把线以图案的大小分割(当然是在概念上,呵呵),依次打个位图上去?

这个“打上位图”的方法我想过,不过觉得效率低了些,所以没用这个方法,但现在看来,我也只好用这个了。

4,446

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧