【问题标题】:Save my mouse event drawing for future modification保存我的鼠标事件绘图以供将来修改
【发布时间】:2016-07-09 11:59:29
【问题描述】:

我使用过(visual studio、windows form、c#)创建了一些绘图。

我的目标是添加保存按钮以按原样保存绘图,并且当我将来打开保存的文件时,我可以继续我的旧工作......

现在发生的情况是,每次我打开 Visual Studio 时,我都必须重新绘制所有内容。

【问题讨论】:

  • 您可以将所有绘图放入数组中,并将此数组保存在文件中。下一次,你只需要加载这个文件并重新绘制它。
  • 我正在使用Bitmap和矩形绘制图像和圆形,我不知道如何将它们保存为数组:(
  • 这只是一个想法。您还可以使用对象结构并将其序列化为文件,例如使用 BinaryFormatter。
  • 你有例子吗?我仍然认为自己是 C# 的初学者
  • 您需要决定是否要将Bitam保存在文件或数据中。数据需要收集在有用类的 List 中。确保使其可序列化,以便您可以轻松保存和加载它。对于一个完整的例子,这太宽泛了。要查看有关数据收集的讨论,请参阅 here

标签: c# winforms save drawing


【解决方案1】:

第一个任务是收集您在List<T> 中绘制的数据。 有关如何收集它们的代码,请参阅(全部)my comments here 或 Reza 的回答 here.

这是一个保存和加载简单PointF 列表的示例,您可以使用它来绘制曲线:

using System.IO;
using System.Xml.Serialization;

// all drawn curve points are collected here:
List<List<PointF>> curves = new List<List<PointF>>();



private void SaveButton_Click(object sender, EventArgs e)
{

    XmlSerializer xmls = new XmlSerializer(typeof(List<List<PointF>>));
    using (Stream writer = new FileStream(yourDrawingFileName, FileMode.Create))
    {
        xmls.Serialize(writer, curves);
        writer.Close();
    }
}

private void LoadButton_Click(object sender, EventArgs e)
{
    if (File.Exists(yourDrawingFileName))
    {

        XmlSerializer xmls = new XmlSerializer(typeof(List<List<PointF>>));
        using (Stream reader = new FileStream(yourDrawingFileName, FileMode.Open))
        {
            var curves_ = xmls.Deserialize(reader);
            reader.Close();
            curves = (List<List<PointF>>) curves_;
            Console.Write(curves.Count + " curves loaded.");
        }
    }
    yourPanelOrPictureBoxOrForm.Invalidate;
}

如果您想保存更复杂的绘图动作类,请将PointF 替换为yourClass。确保类是可序列化的! (Points 很好,intsstrings 当然也可以;Colors 需要一点帮助..)

有关如何设计更复杂的绘图动作类的提示,请参阅here

【讨论】:

  • 非常感谢,我会尽力让您知道
  • 当然,慢慢来,当你遇到问题时一定要问......!
猜你喜欢
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
相关资源
最近更新 更多