[英]Save User Drawn Bitmap Graphics in c#
我制作了一个程序,允许用户在图片框图像上绘制线条,但现在需要保存这些线条以便以后打开。 这是我当前绘制线条的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
}
int Drawshape;
private Point p1, p2;
List<Point> p1List = new List<Point>();
List<Point> p2List = new List<Point>();
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Drawshape = 5;
}
private void button2_Click(object sender, EventArgs e)
{
Drawshape = 2;
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (Drawshape == 5)
{
if (p1.X == 0)
{
p1.X = e.X;
p1.Y = e.Y;
}
else
{
p2.X = e.X;
p2.Y = e.Y;
p1List.Add(p1);
p2List.Add(p2);
pictureBox1.Invalidate();
p1.X = 0;
}
}
}
private void pictureBox1_ParentChanged(object sender, EventArgs e)
{
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Graphics G = Graphics.FromImage(pictureBox1.Image);
if (Drawshape == 5)
{
using (var p = new Pen(Color.Blue, 4))
{
for (int x = 0; x < p1List.Count; x++)
{
G.DrawLine(p, p1List[x], p2List[x]);
}
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
pictureBox1.Invalidate();
}
private void Save_Click(object sender, EventArgs e)
{
}
}
}
我不知道如何保存这些行,并且在用户想要的稍后时间再次打开它们。 我已经开放并保存了文件,但不知道如何让他们完成我希望他们做的工作。 请帮忙。
谢谢
如果要保存图片框中显示的图像,以及在运行时可能已在其上绘制的任何行,可以使用Control.DrawToBitmap
方法 。
我无法确定你是否也在询问如何使用SaveFileDialog
来确定用户想要保存文件的位置,或者你是否已经找到了这个部分,但这很简单。
这是一个完整解决方案的示例。 首先,通过保存对话框提示用户(标题为“保存图像”,默认情况下过滤为位图图像(* .bmp))。 如果他们单击“确定”,则图片框中显示的图像将绘制到一个临时位图,并且该临时位图将保存到他们指定的位置。 如果他们单击“取消”,则不会保存文件,并且该方法仅退出。
private void Save_Click(object sender, EventArgs e)
{
//Show a save dialog to allow the user to specify where to save the image file
using (SaveFileDialog dlgSave = new SaveFileDialog())
{
dlgSave.Title = "Save Image";
dlgSave.Filter = "Bitmap Images (*.bmp)|*.bmp|All Files (*.*)|*.*";
if (dlgSave.ShowDialog(this) == DialogResult.OK)
{
//If user clicked OK, then save the image into the specified file
using (Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height))
{
picturebox1.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
bmp.Save(dlgSave.FileName);
}
}
}
}
目前尚不清楚你想要什么...你想保存结果图像或点列表吗?
如果要保存图像,只需使用pictureBox1.Image.Save(fileName)
。
如果要保存点列表,可以使用序列化(它应该与二进制或XML序列化一起使用)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.