レイヤーをつかった画像を保存します。レイヤーが存在する状態で保存するので、あとでレイヤーの位置を変更することもできます。

保存しなければならない情報として、レイヤーの名前と位置、レイヤーがもつビットマップが考えられます。

Layerクラスを一部修正します。追加したのはBitmapBas64プロパティとBitmapの幅と高さをあらわすWidthプロパティとHeightプロパティです。テキストデータとして保存するのでビットマップデータを文字列に変換しています。またBitmapプロパティはシリアル化しません。

まずデザイナでメニューを追加します。

最初にファイルの保存から考えます。はじめてファイルに名前をつけて保存するときはダイアログを表示させて名前をつけさせます。そして保存したファイルのパスをフィールド変数editFilePathに保存します。

上書き保存の場合は上書き対象のファイルが存在するかどうか確認してSaveFile(string filePath)メソッドを呼び出します。ファイルが存在しない場合はSaveAsFile()メソッドを呼び出します。

次にファイルを読み込むときの処理を考えます。

ファイルを読み込んでLayersプロパティに値をセットすることができたらあとはPictureBox.Invalidate()メソッドで再描画をすれば保存されていた画像が表示されます。

それから普通の画像としても保存できるようにしてみましょう。

まず保存すべきビットマップを取得します。取得できたら保存します。

レイヤーを調べれば左上の座標とビットマップの幅と高さがわかります。ここから保存すべきビットマップの大きさを求めています。