问题描述
C#在picturebox画线,画矩形,当需要擦除其中某一条曲线的时候怎么做?用异或画笔??这方面了解比较少,求大神。。。
解决方案
解决方案二:
这个,你只能做层,PS软件都没办法做到这点除了用图层,我想不到其他办法
解决方案三:
自己做图层List<Image>
解决方案四:
请问有没有图层的具体的例子?
解决方案五:
引用2楼crystal_lz的回复:
自己做图层List<Image>
请问有没有图层的具体的例子,这个list里面存放的是图片还是坐标点?
解决方案六:
可以用底色重画橡皮经过的区域
解决方案七:
橡皮可以实际是一个和底色相同颜色的画笔,重画要修改的区域
解决方案八:
所谓“画”,就是在重绘事件中DrawLine,重绘发生时,首先会响应擦除,再绘图。用windows消息分析,也就是这个顺序:WM_ERASEBACKGROUNDWM_PAINT所以画线应当在paint的响应事件中进行,每次窗体或控件都要执行这个事件,并没有持久的绘图。当窗体刷新时(比如从最小化恢复,或者你强制使它Refresh),首先会擦除已有的绘图,然后再画上去。定义一个lines的坐标数组,当响应paint事件时,按照预定的坐标DrawLine,而当你不想画某条线时,把它从数组中移除就是了。
解决方案九:
看楼上这么多说法,我想起来windows3.1的画图橡皮是可以单独擦掉颜色的。但到windows95之后就取消了这个功能。
解决方案十:
同样是使用.net最基本的开发工具,当人家讨论时,你还在纠结底层的什么“擦除一跟简单直线”。别用winform,别纠结什么gdi+。用高级的编程方式!
解决方案十一:
计算机图形学,只是让你打好基础,这样你就能有信心、有勇气去使用比较高级的开发平台,遇到问题也能想象出内部的机制。你可以花1个月时间去纠结什么“擦除picturebox上面的直线”算法,但是要很快扔掉这些东西。你应该学习wpf,然后再它的基础上设计你的比较实用的上图软件。不要把青春都浪费在底层。
解决方案十二:
引用9楼sp1234的回复:
同样是使用.net最基本的开发工具,当人家讨论时,你还在纠结底层的什么“擦除一跟简单直线”。别用winform,别纠结什么gdi+。用高级的编程方式!
wpf内存占用较高,一般平面绘图程序建议用Direct2D处理,内存占用上优于wpf太多。需要特殊变换(旋转、翻转、渐变、闪烁等动态效果)的时候,用wpf的优势就比Direct2D好太多。选择合适的框架也是计划开发的一个部分,当然你要能驾驭框架,否则乖乖选择自己能用的是正确选择,比如楼主现在的问题,开启双缓冲可以减少闪烁,但并不能解决。去互联网找winfrom的增强窗体控件可以解决部分问题,比如cskin之流。
解决方案十三:
楼主的问题是再问“双缓冲”?怎么想的?楼主是在问“图层框架怎么搭建?”之类的问题。在编程中,回答就是一句话“把那根曲线对象从图层中删除掉,自然界面上就看不见了”。搞清楚应该把时间用在什么开发平台,有利于自身发展。
解决方案十四:
楼主的问题,是在问“假设有成百上千个复杂的图形组件,怎么能够方便地编程?”的问题。他问的问题其实非常简单,但是不是抠什么“双缓冲能不能解决”的问题,而是一个简单的大问题。把复杂问题搞得简单、让人用半年时间就能研发一个上图系统,是造福。把简单问题搞得特别复杂,让人用5年时间,连个上图系统的底层基础都还没有纠结完毕,就很不好了。毕竟,我们不是给人家开发底层驱动软件的,我们是搞高层次应用软件的。
解决方案十五:
异或画笔只在C、C++才有,C#中要使用异或画笔,需调用API你可以把每个画出的线条、形状(鼠标轨迹)连同画笔、画刷保存到对象中在Paint事件发生时,有选择的重新画出(不画的就是删掉了)人家正在学习GDI+,非要让他不要学而改学其他,这是不厚道的。怎么就知道他以后的课程里就没有WPF呢?
解决方案:
如果花钱去学习GDI+是一回事儿(这时候基本上符合“在家玩儿”的状态),如果自己研发一个上图软件是另一回事儿。.net基础中有专业的图形开发工具,这个知识要启蒙时就知道。比如说你只需要在web页面上显示比较酷和流畅的图形界面,你现在肯定就不能纠结于WPF。这是同样的道理,什么实用就用什么。
解决方案:
引用楼主shaobo1203的回复:
C#在picturebox画线,画矩形,当需要擦除其中某一条曲线.........
通常这并非是“画曲线、画矩形”,而是要搭建一个实用的软件。然而,你看那些只给你底层例子的博客作者,有几个是假设你是要在短期研发一个实用的上图软件呢?基本上都是假设你只是玩一玩儿底层。因此那些博客实际上不能多花时间,而应该尽快跳过。
解决方案:
引入图层的概念不复杂。复杂的是细节。比如用list<bitmap>就可以实现图层一个图层是一个bitmap然后把这些层按顺序画出来就是最后的图片。你选择你画线的图层重置为透明色即可。当然list<bitmap>肯定不能满足所有需求可以自己拓展加写属性比如图层隐藏显示等而ps里的撤销本人觉得是每画一个东西。都新建了一个bitmap。然后可以实现撤销。我说的只是一种思路。实现起来还是挺麻烦的。