2016-03-17 2 views
0

Je sauve des traits à une base de données et je peux les récupérer. Maintenant, je veux aussi sauvegarder la couleur, la largeur et la transparence des traits.enregistrer la largeur et la couleur de la course à bytearray

C'est la ce que j'ai dans mon code

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

Répondre

0

stocker les informations de couleur string (Color.ToString() faire le travail) et le convertir en Color quand désérialisée comme suit:

(Color)ColorConverter.ConvertFromString(STORED_STRING); 

Vous ferait nouveau Brush et Freeze si leur couleur n'est pas modifiée plus tard.

La largeur (StrokeThickness?) Est une autre chose. Il suffit de l'enregistrer en tant que double séparément.

Exemple:

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

Notez que ceci est juste un code rapide. Examinez s'il correspond à votre plan.

+0

Merci de me mettre dans la bonne direction, mais je suis assez nouveau pour C#. Alors, comment mettre cela maintenant dans le code existant? – Phil

+0

Avoir édité la réponse pour montrer un exemple qui ne reprend que les pinceaux, car je ne sais pas comment les couleurs sont déterminées. Aucune gestion des exceptions, et de mauvaises pratiques possibles, mais au-delà de la portée. – dytori