将笔划的宽度和颜色保存为bytearray

时间:2016-03-17 20:29:39

标签: c# wpf drawing stroke inkcanvas

我正在将笔画保存到数据库中,我可以检索它们。现在我想保存笔画的颜色,宽度和透明度。

这就是我在代码中的内容

private void AddFloorPlan()
{
     MyCustomStrokes customStrokes = new MyCustomStrokes();
     customStrokes.StrokeCollection = new Point[FloorPlanStrokes.Count][];
     for (int i = 0; i < FloorPlanStrokes.Count; i++)
     {
         customStrokes.StrokeCollection[i] =
         new Point[FloorPlanStrokes[i].StylusPoints.Count];
         for (int j = 0; j < FloorPlanStrokes[i].StylusPoints.Count; j++)
         {
             customStrokes.StrokeCollection[i][j] = new Point();
             customStrokes.StrokeCollection[i][j].X = FloorPlanStrokes[i].StylusPoints[j].X;
             customStrokes.StrokeCollection[i][j].Y = FloorPlanStrokes[i].StylusPoints[j].Y;
         }
     }
     MemoryStream ms = new MemoryStream();
     BinaryFormatter bf = new BinaryFormatter();
     bf.Serialize(ms, customStrokes);

     byte[] bytes = ms.ToArray();
     ms.Dispose();
}

[Serializable]
public sealed class MyCustomStrokes
{
    public MyCustomStrokes() { }
       /// <SUMMARY>
       /// The first index is for the stroke no.
       /// The second index is for the keep the 2D point of the Stroke.
       /// </SUMMARY>
    public Point[][] StrokeCollection;
}

1 个答案:

答案 0 :(得分:0)

将颜色信息存储为stringColor.ToString()完成工作)并在反序列化时将其转换为Color,如下所示:

(Color)ColorConverter.ConvertFromString(STORED_STRING);

如果以后不更改颜色,您可以制作新的BrushFreeze

宽度(StrokeThickness?)是另一回事。只需将其另存为double

示例:

[Serializable]
public sealed class MyCustomStrokes
{
    public string[][] ColorCodeCollection;

    [NonSerialized()]
    private Dictionary<string, SolidColorBrush> _memo;
    public Brush GetBrush(int i, int j) 
    {
        var code = ColorCodeCollection[i][j];
        if(_memo.ContainsKey(code))
            return _memo[code];

        var col = (Color)ColorConverter.ConvertFromString(code);
        var brush = new SolidColorBrush(col);
        brush.Freeze();
        _memo[code] = brush;
        return brush;
    }
}

请注意,这只是一个快速代码。检查它是否符合您的计划。