2

この目的でストロークをメモリストリームに保存したいのですが、BinaryFormatterを使用していますが、ストロークをシリアル化しようとすると、ストロークをシリアル化できないというエラーが発生します。

ストロークをメモリストリームに保存したり、ストロークをシリアル化したりする方法はありますか?

これが私のコードの一部です

int size = inkCanvas1.Strokes.Count();
        IFormatter formatter = new BinaryFormatter();
        MemoryStream stream = new MemoryStream();
        if (size != 0)
        {
            try
            {
                formatter.Serialize(stream, inkCanvas1.Strokes[size - 1]);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

ありがとう。

4

1 に答える 1

6

これが機能しない理由は、が適用されStrokeCollectionていないためです。SerializableAttribute

ただし、この方法を使用できますStrokeCollection.Save

var ms = new MemoryStream();
using (ms)
{
    StrokeCollection sc = ...;
    sc.Save(ms);
    ms.Position = 0;
}

そして、StrokeCollectionもう一度必要になったときに、を受け入れるコンストラクターStreamを使用できます。

于 2012-08-13T12:06:32.233 に答える