C#利用GDI+实现橡皮筋效果
2021/10/30 12:39:33
本文主要是介绍C#利用GDI+实现橡皮筋效果,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C#利用GDI+实现橡皮筋效果
因为C#课一次作业需要在winform
上实现一个简单的绘图程序,要求添加橡皮筋效果。图像是在picturebox
控件上绘制的,我一开始始终解决不了的问题是要实现橡皮筋效果,鼠标移动过程中绘制显示的图形就要随时擦除,但是通过GDI+在控件的Graphic对象上绘制图形就不能再擦掉了。在网上搜索了一下,不管是刷新重绘控件,还是通过在内存中开辟位图的办法都失败,后面那种办法是最多的,但我怎么都弄不好,可能是我真地太菜了吧!
最终找到了办法是通过GDI+自带的双缓冲技术实现的,方法如下:
-
鼠标移动事件响应函数
private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { // 利用双缓冲实现橡皮筋效果和绘制图层容器图形 BufferedGraphicsContext Mybuffer = BufferedGraphicsManager.Current; BufferedGraphics buffered = Mybuffer.Allocate(pb, pictureBox1.ClientRectangle); // 设置背景色为白色 buffered.Graphics.FillRectangle(Brushes.White, pictureBox1.ClientRectangle); // 绘制当前的图形 actionTool.onmousemove(e, buffered.Graphics); // 绘制图层容器中的图形 LayerService.DrawLayer(buffered.Graphics); // 将图形渲染到屏幕上 buffered.Render(pb); buffered.Dispose(); Mybuffer.Dispose(); }
-
鼠标点击事件响应函数
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { // 使用绘制工具构造并添加图形对像 actionTool.onmousedown(e); }
-
绘制工具类[^以绘制直线为例]
class DrawLine : AbstractTool { private Point _startPoint; private Point _endPoint; private Polyline2D _line; public bool _dragging = false; public DrawLine(Options p) : base(p) {} public override void onm ousedown(MouseEventArgs e) { // 构造图形对象 base.onmousedown(e); if(e.Button == MouseButtons.Left) { if (_dragging) { _endPoint = mouseDown; _line.Add_Point(_endPoint); LayerService.Add_Geometry(_line); _dragging = false; } else { _startPoint = mouseDown; _line = new Polyline2D(ops); _line.Add_Point(_startPoint); _dragging = true; } } } // 橡皮筋效果实现 public override void onm ousemove(MouseEventArgs e,Graphics g) { base.onmousemove(e, g); if (_dragging) { if (_line.getPtCount() < 2) _line.Add_Point(mouseMove); else _line[1] = mouseMove; _line.draw(g); } } }
这篇关于C#利用GDI+实现橡皮筋效果的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#