ドリリウム

趣味をとことん突き詰めるブログ。ペット / フィンチ / 鳥 / 文鳥 / ジュウシマツ / 写真 / カメラ / 高知 / 釣り / DIY / バイク / 車 / 家具制作 / アクアリウム / コーヒー / 地方移住 / ルノー・ルーテシア / SUZUKI ST250 E type / EOS Kiss M

【C# .NET】2枚の画像を重ね合わせる

C#で、2枚の画像を重ね合わせて保存する方法を紹介します。

例えばある画像にロゴ画像を重ね合わせる時などに使います。

ロゴ画像を透過したうえで重ね合わせたい場合にはこちらの記事を参考にしてみてください。

【C# .NET】画像に透過した画像を重ね合わせる 

コードでは、baseImagePathには元の画像のパスを、logoImagePathには重ね合わせるロゴ画像のパスを設定するイメージです。

string baseImagePath = @"C:\Image\image.jpg";
string logoImagePath = @"C:\Image\logo.jpg";

Bitmap baseImage = new Bitmap(baseImagePath);
Bitmap logoImage = new Bitmap(logoImagePath);
Bitmap newImage = new Bitmap(baseImage);

Graphics g = Graphics.FromImage(newImage);
g.DrawImage(logoImage, 0 , 0, logoImage.Width, logoImage.Height);

g.Dispose();
baseImage.Dispose();
logoImage.Dispose();

newImage.Save(@"C:\Image\new.jpg",  System.Drawing.Imaging.ImageFormat.Jpeg);
newImage.Dispose();

 

手順はとても簡単です。

  1. パスをもとにBitmapオブジェクトを生成する(4~6行目)
  2. Graphics.DrawImageメソッドで2枚の画像を重ね合わせる(9行目)
  3. 重ね合わせた画像を保存する(15行目)

そのままPictureBoxに表示したり、応用的な使い方も可能です。

画像の保存形式

画像の保存処理は15行目にある以下の一行です。

newImage.Save(@"C:\Image\new.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

第一引数は見ての通り、保存するファイルのパスです。

第二引数はSystem.Drawing.Imaging.ImageFormatクラスから、保存したい形式にあわせたプロパティを選択します。

PNGならSystem.Drawing.Imaging.ImageFormat.Png、BMPならSystem.Drawing.Imaging.ImageFormat.Bmpなど、見ての通りです。

詳しくはこちら。

重ねる画像の位置

画像を重ねる処理は9行目のDrawImageメソッドを使用しますが、DrawImageメソッドの引数は以下の通りです。

  • 第一引数:重ね合わせる画像のBitmapオブジェクト
  • 第二引数:重ね合わせる画像の位置(X座標)
  • 第三引数:重ね合わせる画像の位置(Y座標)
  • 第四引数:重ね合わせる画像の幅
  • 第五引数:重ね合わせる画像の高さ

つまり、第二引数と第三引数を指定することで重ね合わせる画像の位置が調整可能です。

例えば左上ならこう。

 g.DrawImage(logoImage, 0 , 0, logoImage.Width, logoImage.Height);

中央ならこう。

 g.DrawImage(logoImage, baseImage.Width / 2 - logoImage.Width / 2, baseImage.Height / 2 - logoImage.Height / 2, logoImage.Width, logoImage.Height);

元画像の中央(baseImage.Width / 2)から、ロゴ画像の半分(logoImage.Width / 2)ずらした位置に画像を重ねることで、中央に重ね合わせることができます。

右下ならこう。

g.DrawImage(logoImage, baseImage.Width - logoImage.Width , baseImage.Height - logoImage.Height, logoImage.Width, logoImage.Height); 
重ねる画像の大きさ

同様に、重ねる画像の大きさはDrawImageメソッドの第四引数と第五引数で指定することができます。

例えば、単純にロゴ画像を2倍の大きさで重ね合わせたい場合はこんな感じ。

 g.DrawImage(logoImage, 0 , 0, logoImage.Width * 2, logoImage.Height * 2);

WarterMarker

この画像を重ね合わせる処理を利用して製作したのが、ウォーターマークなどを一括して重ね合わせることができる「WarterMarker」というソフトウェアです。

配布はVectorさんで行っています。

 

当サイトは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。