将笔画的宽度和颜色保存到字节数组



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

这是我的代码中的内容

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;
}

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

(Color)ColorConverter.ConvertFromString(STORED_STRING);

您将制作新的Brush,如果以后没有更改它们的颜色,则Freeze它。

宽度(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;
    }
}

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

最新更新