您的位置:程序门 -> vc/mfc -> 图形处理/算法



vc++环境下使用橡皮筋技术绘图出现的图象失真问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


vc++环境下使用橡皮筋技术绘图出现的图象失真问题[已结贴,结贴人:simon_186]
发表于:2007-01-25 09:21:19 楼主
在vc6.0下我用异或方式绘图时发现两个问题:
1.偶数个异或图形相交,会导致图形的缺点或间断
2.绘制图形时,画笔的颜色会受到屏幕上的颜色的影响
请大虾指教!
发表于:2007-01-26 10:58:331楼 得分:0
我使用的异或方式是:pdc-> setrop2(notxorpen);
    当然,使用默认方式绘图时没有图形交叉出现的缺点间隔现象,也不会因屏幕上的背景色而改变画笔的颜色。
    因此,我使用过另一种光栅操作方式:setrop2(not),即在图形未最终定位时使用这种方式,当确定图形的最终位置时,先删除原有图形,再恢复到默认的方式绘图。这样画出来的图形不会有交叉而缺点的现象,但是在拉图形时画笔的颜色还是改变了,因为要与屏幕的背景色做not运算。
    所以,恳请大侠不吝赐教!
发表于:2007-01-29 11:27:362楼 得分:5
用r2_maskpen,就不会出现缺点,但是不方便图形的移动,最好,在画图完成之后,再用maskpen画一遍
发表于:2007-01-31 15:36:053楼 得分:0
我试过了楼上说的maskpen,但不管用。根据msdn上的解释,maskpen在理论上也行不通。
因为缺点的现象是由异或操作,或者类似异或的一些光栅操作造成的,其根本原因在于画线时要与屏幕上已有的像素颜色发生作用,这样在拉图形时屏幕上显示的颜色与画笔的颜色会不同。
发表于:2007-02-01 11:10:044楼 得分:5
maskpen是当前笔的颜色,不会受屏幕颜色的影响,为什么会不行?
发表于:2007-02-02 09:18:435楼 得分:0
msdn上的解释:
r2_maskpen           pixel   is   a   combination   of   the   colors   common   to   both   the   pen   and   the   screen   (final   pixel   =   pen   and   screen   pixel).
我也实验过了,在背景为黑色的屏幕上,用r2_maskpen画线什么都看不到。根据msdn上的解释也很容易分析出来。
发表于:2007-02-02 09:45:086楼 得分:10
哦,没考虑到背景的问题,一直把背景当成白色了,那你拉图的时候用r2_notxorpen,   在定位的时候再用not
发表于:2007-02-02 09:52:547楼 得分:0
用r2_notxorpen拉图时就会出现显示的颜色和画笔不一致
发表于:2007-02-02 10:35:038楼 得分:10
哦,你一开始就说清楚了,我没看清楚,呵呵
要想颜色不变,只有背景是白色,其他背景还不大清楚,帮你顶下
发表于:2007-02-03 09:41:259楼 得分:0
to   tracing(攀登者)   :虽说问题还没有解决,我仍然很感谢你!^_^
发表于:2007-02-07 15:00:5010楼 得分:0
在黑色背景下,使用r2_xorpen方式画出来的图形颜色与当前使用的画笔颜色一致,但是图形相交导致的缺点或间断现象还存在,无奈~~
发表于:2007-02-08 10:48:5311楼 得分:0
补充:在黑色背景下,使用r2_xorpen方式用cdc::rectangle(crect   &)绘图时会发现矩形框内的区域颜色变为白色,对这个问题我的解决方法是用moveto、lineto函数来代替rectangle,这样就不会有框内的区域颜色改变的现象了。
            异或图形相交导致的缺点和间断现象应该是使用异或方式绘图本身所具有的技术瓶颈,合理的解决方法是使用双缓冲来代替橡皮筋。在m$的gdi+中就没有支持setrop2。
            感谢   tracing(攀登者)   的热情参与,在此结帖!


快速检索

最新资讯
热门点击