InkSerializedFormat 形式で保存/読み込みをする

InkCanvas に描いたストロークは、InkSerializedFormat 形式(拡張子 ISF)と呼ばれる専用のファイルに保存したり読み込んだりすることが可能です。

専用のファイルを利用することで、途中まで描いた絵を保存し、続きは後から描くといったように再利用を可能にします。

ISF形式で保存するには FileStremを作成して、Strokes プロパティSaveメソッドを使用します。

また、ISF形式のファイルを読み込んで InkCanvasに表示するには、FileStream で任意のファイルを開いて StrokeCollection クラスのインスタンスを作成し、 Strokes プロパティにセットします。

下記は InkCanvas に描かれたストロークをISF形式で保存したり開いたりする例です。

InkCanvas に描かれたストロークをISF形式で保存したり開いたりする例

 

XAMLの例

<StackPanel Name="parentStack">
    <StackPanel Orientation="Horizontal" Name="menuStack">
        <Button Name="btnSaveAsISF" Content="ISF形式で保存" />
        <Button Name="btnOpenISF" Content="ISF形式ファイルを開く" />
    </StackPanel>
    <InkCanvas Name="InkCanvas1" EditingMode="Ink" />
</StackPanel>

VBの例

' [ISF形式で保存する]ボタンクリック時の処理
Private Sub btnSaveAsISF_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnSaveAsISF.Click
    Dim dlgSave As New Microsoft.Win32.SaveFileDialog()

    dlgSave.Filter = "ISFファイル(*.isf)|*.isf"

    If dlgSave.ShowDialog() Then
        Using fs As New System.IO.FileStream(dlgSave.FileName, IO.FileMode.Create)
            InkCanvas1.Strokes.Save(fs)
        End Using

        MessageBox.Show("保存しました")
    End If
End Sub

' [ISF形式ファイルを開く]ボタンクリック時の処理
Private Sub btnOpenISF_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnOpenISF.Click
    Dim dlgOpen As New Microsoft.Win32.OpenFileDialog()

    dlgOpen.Filter = "ISFファイル(*.isf)|*.isf"

    If dlgOpen.ShowDialog() Then
        '現在のストロークをクリア
        InkCanvas1.Strokes.Clear()

        Using fs As New System.IO.FileStream(dlgOpen.FileName, IO.FileMode.Open)
            InkCanvas1.Strokes = New Ink.StrokeCollection(fs)
        End Using
    End If
End Sub

C#の例

// [ISF形式で保存する]ボタンクリック時の処理
private void btnSaveAsISF_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Win32.SaveFileDialog dlgSave = new Microsoft.Win32.SaveFileDialog();

    dlgSave.Filter = "ISFファイル(*.isf)|*.isf";

    if ((bool)dlgSave.ShowDialog())
    {
        using ( System.IO.FileStream fs = 
            new System.IO.FileStream(dlgSave.FileName, System.IO.FileMode.Create))
        {
            inkCanvas1.Strokes.Save(fs);
        }

        MessageBox.Show("保存しました");
    }
}

// [ISF形式ファイルを開く]ボタンクリック時の処理
private void btnOpenISF_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Win32.OpenFileDialog dlgOpen = new Microsoft.Win32.OpenFileDialog();

    dlgOpen.Filter = "ISFファイル(*.isf)|*.isf";

    if ((bool)dlgOpen.ShowDialog())
    {
        // 現在のストロークをクリア
        inkCanvas1.Strokes.Clear();

        using (System.IO.FileStream fs =
            new System.IO.FileStream(dlgOpen.FileName, System.IO.FileMode.Open))
        {
            inkCanvas1.Strokes = new System.Windows.Ink.StrokeCollection(fs);
        }
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください