C#で画像に文字を重ねたり画像同士を重ね合わせる処理をするにはどうすればよいでしょうか?

画像に文字を重ねる

まず画像ファイルからBitmapオブジェクトを取得します。そのあとそこからGraphicsオブジェクトを取得してDrawStringメソッドで文字列を書き込みます。Graphics.DrawStringメソッドでは書き込みたい文字列、使用するフォント、ブラシ、文字列の左上の座標を設定します。処理が終わったら生成したBitmapオブジェクト、Graphicsオブジェクト、フォント、ブラシをDisposeします。

Before

After

画像ファイルを読み込み、指定された文字列、フォント、色、座標に文字列を追加します。

デザイナで以下のようなものをつくります。左側にあるのはPictureBox、右には追加する文字列を指定するためのTextBoxと座標を指定するためのNumericUpDownコントロールを配置します。

各ボタンをクリックすると画像ファイルの読み込みとPictureBoxへの表示、フォントの選択、文字列の追加、ファイルの保存ができます。

画像同士を重ねたい

この場合もふたつの画像ファイルからBitmapオブジェクトをそれぞれ取得します。そのあとそこからGraphicsオブジェクトを取得してDrawImageメソッドでイメージを書き込みます。オーバーロードが複数あります。やりたいことにあわせて適切なものを使います。

Before

After

上記の方法はひとつめの画像ファイルの外側にあるものは保存されません。ふたつの画像を並べて表示させたい場合はふたつの画像サイズから新しい画像のサイズを計算する必要があります。

Before

After

ふたつの画像ファイルを読み込み、ふたつめの画像を指定された座標と拡大率で合成します。

デザイナで以下のようなものをつくります。左側にあるのはPictureBox、右には合成するふたつの画像ファイルのパスを指定するためのTextBoxと座標、拡大率を指定するためのNumericUpDownコントロールを配置します。

選択ボタンをクリックするとファイル選択ダイアログが表示され、画像ファイルを選択することができます。選択されファイルのパスはTextBoxに表示されます。

合成ボタンがクリックされるとTextBoxに表示されている文字列からBitmapオブジェクトを取得します。もし存在しないファイルや画像ファイルでないものが選択されている場合は例外が発生します。

NumericUpDownコントロールから二つ目の画像を合成する座標と拡大率を取得して、合成後のBitmapの適切なサイズを計算します。そして新しいBitmapが生成され、そのなかにgraphics.DrawImageによってふたつのBitmapが描画されます。