レイヤーを使った簡単な画像編集ソフトを作成します。実はそれに関する記事も投稿しているのですが、一からやりなおします。

まず画像を表示させるためのピクチャーボックスをつくります。画像が大きくなった場合、スクロールバーがつくようにします。これならピクチャーボックスのクリックされた部分の座標も簡単に知ることができます。

デザイナで以下のようなものを作ります。UserControlの上にピクチャーボックスを貼り付けているだけです。クラスの名前はScroolPictureBoxにしました。

スクロールバーがつくようにするにはまず自作クラス ScroolPictureBoxのAutoScrollプロパティを trueにします。そしてピクチャーボックスのSizeModeプロパティをPictureBoxSizeMode.AutoSizeにします。これで大きな画像が表示されるときはピクチャーボックスのサイズがこれにあわせて大きくなるのでScroolPictureBoxにスクロールバーが表示されるわけです。

ではScroolPictureBoxクラスがどうなっているかみてみましょう。Bitmapプロパティが変更されたら表示倍率をもとにGetBitmapForShow(Bitmap bitmap)メソッドで表示すべきBitmapを生成して表示させています。

またDisplayMagnificationプロパティが変更されたら表示倍率を変更してBitmapを表示しなおします。ScroolPictureBoxがリサイズされたときも同様に必要があればBitmapを生成しなおして表示させています。

それからBitmapを表示するときはピクチャーボックスとサイズを比較して縦横のどちらかが大きいときはピクチャーボックスのSizeModeプロパティをPictureBoxSizeMode.AutoSizeに変更します。そうでない場合はピクチャーボックスの大きさはScroolPictureBoxと同じ大きさにします。

ピクチャーボックスがクリックされたときに独自の処理ができるようにイベントハンドラPictureBox1_MouseDownを追加しています。

それからこの自作のピクチャーボックスをふたつ並べて表示するユーザーコントロールを作成します。編集前と後を比較できるようにします。

次にレイヤーを管理するクラスを作成します。レイヤーで扱うものとして画像や文字列、図形などが考えられます。それらの基底クラスとしてLayerクラスを作ります。ファイルはバイナリではなくXML形式で保存します。