我是在绘图方法中创建的
private void draws()
{
Bitmap bmp = new Bitmap(pictureBox17.Width, pictureBox17.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
//define area do pictureBox17 e preenche a branco
Brush brush = new SolidBrush(Color.White);
Rectangle area = new Rectangle(0, 0, pictureBox17.Width, pictureBox17.Height);
g.FillRectangle(brush, area);
//desenha as linhas do rectangulo
g.DrawLine(new Pen(Color.Black), esp, esp, esp, yWcorrigidoesp);
// some more lines
}
pictureBox17.Image = bmp;
}
它完全符合我的要求。但想象一下,在此之后我想要更新完全相同的绘图,添加几行,而不必再画全部,这可能吗?显然我正在使用方法
draws();
然后我想添加一些东西,任何提示?
答案 0 :(得分:2)
这样做的方法是创建一个DrawAction
类,其中包含您要绘制的内容所需的所有数据:Point
数据,Pen
或{{1等等。
然后您创建并管理Brush
,然后您可以选择:
你要么完成所有的绘画活动,要么现场直播。在List<DrawAction> drawActions
或Paint
(或任何控件,PictureBox
事件)的Panel
事件中,循环显示列表.. < / p>
..或者您将新动作添加到正在构建的Paint
中。
什么是更好的真正取决于:您是否希望通过用户操作进行动态绘图?你想要一个撤销/重做选项吗?然后实时绘制到控制界面更适合。
或者是要修复或从固定数据集派生的事情列表,并且最终要保存到磁盘。这听起来更像是将绘制到位图中。
两者也可以组合,可以收集一些操作,同时保留撤消选项(通过删除最后一个列表项)并提供应用按钮来泵他们进入位图..
注意:绘制内容的关键是将绘图数据保留在列表中,以便您可以在需要时再次使用它,展开并删除列表甚至改变它:这将是一个简单的双线程,可以覆盖所有操作并更改Bitmap Image
的{{1}}或Color
或Width
或转移LineStyle
一点等等!
当您创建Pen
课程时,如果您可以决定需要哪些操作,则会有所帮助。如果您仍然可以参加更长时间的课程,并且有足够的成员来处理Points
班级提供的所有选项:DrawAction
,Graphics
,{{1 }}属性,Drawxx
甚至可能缩放..
对于初学者来说,一个Fillxxx
一个Pen
和一个Colors
会有...
以下是一个简单类,List<Point>
事件,添加一些测试操作的代码和float PenWidth
的示例:
Color
的位图Paint
。 测试数据是一个both
和一组Image
。
您应该通过定义PictureBox
并使用您想要使用的所有类型的绘图操作来开始改进它!这将更好,更容易理解我编码的cheapo字符类型;-)类型可以包括Line
,然后一些。只需一点额外,您还可以使用Image,GraphicsPath,Spline ..而其他数据可以控制Polylines
等。
Enum
两者的结果看起来都一样:
答案 1 :(得分:1)
尝试在函数外部创建Bitmap以保留它,现在的方式就是在函数完成后处理Bitmap元素。
然后,您可以执行类似的操作Bitmap bmp = new Bitmap(pictureBox17.Width, pictureBox17.Height);
private void draws()
{
if (bmp ==null)
using (Graphics g = Graphics.FromImage(bmp))
{
//define area do pictureBox17 e preenche a branco
Brush brush = new SolidBrush(Color.White);
Rectangle area = new Rectangle(0, 0, pictureBox17.Width, pictureBox17.Height);
g.FillRectangle(brush, area);
//desenha as linhas do rectangulo
g.DrawLine(new Pen(Color.Black), esp, esp, esp, yWcorrigidoesp);
}
else {
using (Graphics g = Graphics.FromImage(bmp))
{
g.DrawLine(new Pen(Color.Black), esp, esp, esp, yWcorrigidoesp);
}
// some more lines
}
pictureBox17.Image = bmp;
}
只是为了让你开始.. :))
或者你可以将bmp传递给draw函数,如果你使用这个方法在不同的时间绘制多个bmp