Winforms面板的绘图内容如何保存到文件中?我做了一个绘图程序,把绘图内容(来自System.Drawing)画在面板上。我现在尝试使用此方法进行简单保存,但得到的只是一张空白图像。我的位图的属性.RawData是0。不确定它是否重要。当我隐藏屏幕并再次显示时,面板变为空白。此外,当我调用面板的pnlPaint.Refresh()时,面板变为空白。图纸丢了。这是双缓冲的东西,就像它不保留值一样吗?privateboolSave(){位图bmpDrawing;矩形矩形边界;try{//为绘画存储创建位图bmpDrawing=newBitmap(pnlPaint.Width,pnlPaint.Height);//设置位图的边界rectBounds=newRectangle(0,0,bmpDrawing.Width,bmpDrawing.Height);//将绘图移动到位图pnlPaint.DrawToBitmap(bmpDrawing,rectBounds);//将位图保存到文件bmpDrawing.Save("a.bmp",ImageFormat.Bmp);}catch(Exceptione){MessageBox.Show("保存时出错。消息:"+e.Message);}返回真;这是一个最小的涂鸦程序,可以让你画出持久的线条:ListcurPoints=newList();列表>allPoints=new列表>();privatevoidpnlPaint_MouseDown(objectsender,MouseEventArgse){if(curPoints.Count>1){//开始新的直线或曲线curPoints.Clear();//起点curPoints.添加(e.Location);}}privatevoidpnlPaint_MouseUp(objectsender,MouseEventArgse){if(curPoints.Count>1){//ToList创建一个副本allPoints.Add(curPoints.ToList());CurPoints.Clear();}}privatevoidpnlPaint_MouseMove(objectsender,MouseEventArgse){if(e.Button!=MouseButtons.Left)return;//在这里我们应该检查距离是否大于最小值!curPoints.Add(e.Location);//让它显示pnlPaint.Invalidate();}privatevoidpnlPaint_Paint(objectsender,PaintEventArgse){//在这里你可以使用DrawLines或DrawCurve//当前行if(curPoints.Count>1)e.Graphics.DrawCurve(Pens.Red,curPoints.ToArray());//其他直线或曲线foreach(ListpointsinallPoints)if(points.Count>1)e.Graphics.DrawCurve(Pens.Red,points.ToArray());}privatevoidbtn_undo_Click(objectsender,EventArgse){if(allPoints.Count>1){allPoints.RemoveAt(allPoints.Count-1);pnlPaint.Invalidate();}}privatevoidbtn_save_Click(objectsender,EventArgse){stringfileName=@"d:test.bmp";位图bmp=newBitmap(pnlPaint.ClientSize.Width,pnlPaint.ClientSize.Width);pnlPaint.DrawToBitmap(bmp,pnlPaint.Client矩形);bmp.Save(文件名,ImageFormat.Bmp);添加您的保存代码,如果您遇到问题请告诉我...更新:我添加了两个代码片段来执行保存和(无限制)撤消我会跳过使用面板,它不是为像ImageBox这样的图形设计的-继续然后你可以很容易地保存东西。更新图片框。我有一段时间没有使用WinForms:D在GitHub上查看这段代码ScreenToGif。文件夹GifRecorderControlsFreeDrawPanel.cs有一个支持方形和圆形画笔、橡皮擦并保存输出图像的实现。以上就是C#学习教程:如何将Winforms面板的绘图内容保存到文件中?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
