在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)
{
}
}
}
我不知道如何保存这些线条,并在用户需要时再次打开它们。我已经放入了打开和保存文件对话框,但不确定如何使它们完成我希望它们完成的工作。请帮忙。
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果要保存图片框中显示的图像以及运行时可能在其上绘制的任何线条,则可以使用
Control.DrawToBitmap
方法。我无法确定您是否也在询问如何使用
SaveFileDialog
来确定用户想要保存文件的位置,或者您是否已经弄清楚了该部分,但这非常简单。这是完整解决方案的示例。首先,系统会显示一个保存对话框(标题为“保存图像”并默认过滤为位图图像 (*.bmp))提示用户。如果单击“确定”,图片框中显示的图像将绘制到临时位图,并且该临时位图将保存到他们指定的位置。如果单击“取消”,则不会保存文件并且该方法会直接退出。
If you want to save the image that is displayed in the picture box, complete with any lines that may have been drawn on top of it during run-time, you can use the
Control.DrawToBitmap
method.I can't tell for sure if you're also asking how to use a
SaveFileDialog
to determine where the user wants to save the file or if you've already got that part figured out, but it's very simple.Here's an example of a complete solution. First, the user is prompted by a save dialog (entitled "Save Image" and filtering to bitmap images (*.bmp) by default). If they click OK, the image displayed in the picture box is drawn to a temporary bitmap, and that temporary bitmap is saved to the location they specified. If they click Cancel, the file is not saved and the method simply exits.
查看
PictureBox.Image 属性
和
Image.Save 方法(字符串、ImageFormat)
和
Image.FromFile 方法(字符串、布尔值)
Have a look at
PictureBox.Image Property
and
Image.Save Method (String, ImageFormat)
and
Image.FromFile Method (String, Boolean)
目前尚不清楚您想要什么...您想保存结果图像还是点列表?
如果要保存图像,只需使用
pictureBox1.Image.Save(fileName)
即可。如果你想保存点列表,你可以使用序列化(它应该与二进制或 XML 序列化一起使用)
It's not clear what you want... do you want to save the resulting image, or the list of points ?
If you want to save the image, just use
pictureBox1.Image.Save(fileName)
.If you want to save the list of points, you could use serialization (it should work with either binary or XML serialization)