我正在将笔画保存到数据库中,我可以检索它们。现在我想保存笔画的颜色,宽度和透明度。
这就是我在代码中的内容
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;
}
答案 0 :(得分:0)
将颜色信息存储为string
(Color.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;
}
}
请注意,这只是一个快速代码。检查它是否符合您的计划。