windows画图中的异型画刷如何实现的?高手赐教。

示申○言舌 2012-03-07 09:36:21
Windows画图里面的 斜线画笔 是如何实现的?或者,一个椭圆的画笔如何实现?就是横着和竖着,画出来的粗细不一样。


最好能用GDI实现,貌似CreatePen里面也不能用位图做画笔啊,跪求各位大侠拉。


强调一下:这个问题不是“位图画刷”的问题。而是“笔尖”为椭圆的问题。就是依照鼠标轨迹画出来的线,在某些方向上粗细不一样的那种效果。类似windows画图中,选画刷->斜线类型...的那种效果。
...全文
354 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
酷到你尖叫 2013-10-25
  • 打赏
  • 举报
回复
Tinary3v0 厉害!!!
Tinary3v0 2012-03-17
  • 打赏
  • 举报
回复
楼主这样试试,鼠标移动的时候绘制出来一条线,然后将这条线向上平移5个像素(根据你的需要,可以平移到任何一个位置),然后将两条线建立起一个封闭路径,填充。应该就是你要的效果。
这个效果我以前弄出来过,不过我是为了避免出现这种效果,为的是让绘制的线任何方向都一般粗。
我用的平台是VC GDI+

先生成GraphicPath一条,然后生成它的向上平移5个像素的另外一个Path
最后两个Path相加,形成一个Path,用Brush填充即可。
Tinary3v0 2012-03-17
  • 打赏
  • 举报
回复
实现效果:

代码:
定义动态数组:
typedef CArray < PointF, PointF > CPFAry;

建立全局变量:
CPFAry ptAy;

需要添加点的位置(MouseMove):
ptAy.Add( PointF( point.x, point.y ) );

显示的位置(OnDraw或者OnPaint):
Graphics gra( pDC->m_hDC );
if( ptAy.GetSize( ) > 0 )
{

PointF* Nm = new PointF[ ptAy.GetSize( ) ];
PointF* xNm = new PointF[ ptAy.GetSize( ) ];

for( int v = 0; v < ptAy.GetSize( ); v ++ )
{
Nm[ v ] = ptAy[ v ];
xNm[ v ] = PointF( Nm[ v ].X - 5, Nm[ v ].Y - 5 ); //这里是左上偏移 其他自己改改看
}

GraphicsPath path, vpath;

path.AddLines( Nm, ptAy.GetSize( ) );

vpath.AddLines( xNm, ptAy.GetSize( ) );

vpath.Reverse( );

GraphicsPath Apath;

Apath.AddPath( &path,TRUE );
Apath.AddPath( &vpath, TRUE );

SolidBrush br( Color( 255, 255, 0, 0 ) );

gra.FillPath( &br, &Apath );

delete [ ] Nm;
delete [ ] xNm;
}
Tinary3v0 2012-03-17
  • 打赏
  • 举报
回复
"/"这个方向倾斜的画刷是我所有的方法中,往左上移动,例如( 5, 5 )
"\"这个方向,往右上移动,例如( 5, 5 )
要实现这个效果,GDI中最好使用CRgn,GDI+中使用Path或者Region
startstartsvip 2012-03-17
  • 打赏
  • 举报
回复
10 天了 哈哈
示申○言舌 2012-03-16
  • 打赏
  • 举报
回复
2周了。.....
示申○言舌 2012-03-12
  • 打赏
  • 举报
回复
天啊。。。。。。。。。。。。。。。。
示申○言舌 2012-03-12
  • 打赏
  • 举报
回复
好不容易有人回复,也是答非所问。苍天啊。。。大地啊。。。。
  • 打赏
  • 举报
回复
以前我们在报表中遇到划斜线的问题,Windows中比较好处理,就是划线,可以看看如下:
http://blog.csdn.net/iamduoluo/article/details/6816354
如果在网页上,建议你用图形替代.
示申○言舌 2012-03-11
  • 打赏
  • 举报
回复
难道,就真的没有高手?
示申○言舌 2012-03-09
  • 打赏
  • 举报
回复
唉,一直以为CSDN上会有高手。现在发现,所谓的高手,对于简单的问题都抢着回答,而且还做出高手的姿态。对于稍微有点难度的问题,谁也不理。。
kong19 2012-03-09
  • 打赏
  • 举报
回复
参考
http://msdn.microsoft.com/zh-cn/library/8y5b0fse(v=vs.100).aspx

建议你去C#论坛,或者微软的论坛问一下吧。
示申○言舌 2012-03-09
  • 打赏
  • 举报
回复
CSDN上的大牛,仅仅是个传说?
示申○言舌 2012-03-07
  • 打赏
  • 举报
回复
不会吧。。。。一个回答的兄弟也没有?

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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