ドリリウム

趣味をとことん突き詰めるブログ。高知 / 釣り / DIY / バイク / 車 / 家具制作 / アクアリウム / BMW / 地方移住 / ルノー・ルーテシア

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

ドリリウムは移転しました。

約5秒後に自動的にリダイレクトします。

f:id:katamichinijikan:20190414152645p:plain

ロゴやウォーターマークなどを透過して重ね合わせる方法を紹介します。

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

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

transparentLogoオブジェクトに、透過したロゴ画像が格納されます。

ロゴは50%に透過して重ね合わせます。

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

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

var transparentLogo = new Bitmap(logoImage.Width, logoImage.Height);
var gl = Graphics.FromImage(transparentLogo);

var c = new System.Drawing.Imaging.ColorMatrix();
c.Matrix33 = 0.5F;
var i = new System.Drawing.Imaging.ImageAttributes();
i.SetColorMatrix(c);
gl.DrawImage(logoImage, new Rectangle(0, 0, logoImage.Width, logoImage.Height), 0, 0, logoImage.Width, logoImage.Height, GraphicsUnit.Pixel, i);

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

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

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

手順はとても簡単です。

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

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

画像の保存形式を変更したり、重ねる画像の位置を調整したり、重ねる画像の大きさを変更する方法はこちらの記事を参考にしてください。

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

透過率の調整

透過率はColorMatrixオブジェクトのMatrix33の値を調整します。

50%なら0.5、30%なら0.3といった感じです。

c.Matrix33 = 0.5F;

ColorMatrixは「c.Matrix33 = 」という風に設定せずコンストラクタで初期化することも可能ですが、この方がシンプルになります。

WaterMarker

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

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

WaterMarkerの詳細情報 : Vector ソフトを探す!

 

ブログを書いている人

カタミチ

ご意見・お問い合わせ等:syufukc@gmail.com

プライバシーポリシーおよび広告掲載等に関する表示事項