none
C# 画像イメージに画像イメージを重ねる方法 RRS feed

  • 質問

  • いろいろ調べましたが解決方法が分かりませんでしたので質問させていただきます。

     

    JPG等の画像へ、ロゴマーク等のJPG画像を重ねる方法を探しています。

    (例えば右下に会社ロゴを追加する等です。)

     

    当方の環境としては

       VC# 2003

    を使用しています。

     

    Bitmapクラス等で何らかの処理をさせれば良いのでしょうが方法が分かりませんでした。

    上記問題の解決方法をご存知の方はご回答願います。

     

    もしよろしければ、サンプルソースも開示して頂けたら幸いです。

     

    よろしくお願いいたします。

     

    2007年7月6日 2:36

回答

  • 流れとしては以下に書かれているイメージです。

     

    GDI+を使った画像合成について
      http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-26061.htm

     

    サンプルコードとしては、例えば以下が参考になると思います。。

     

    CGI+ Adding to Images
      http://www.csharphelp.com/board2/read.html?f=1&i=45424&t=45424

    2007年7月6日 3:09
    モデレータ
  • こんな感じでどうでしょうか。

     

    Code Snippet
       Bitmap img1 = new Bitmap("srcimage.jpg");
       Bitmap img2 = new Bitmap("logo.jpg");
       Bitmap img3 = new Bitmap(img1);
       Graphics g = Graphics.FromImage(img3);
       g.DrawImage(img2,img3.Width-img2.Width,img3.Height-img2.Height,img2.Width,img2.Height);
       g.Dispose();
       img1.Dispose();
       img2.Dispose();
       img3.Save("newImage.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);

     


    2007年7月6日 3:48
  • Bitmap.MakeTransparent メソッド (Color)

    http://msdn2.microsoft.com/ja-jp/library/8517ckds(VS.80).aspx

    を使用してBitmap上にある指定色を透過にできます。

     

    ただし、Jpegでは意図どおりにならないかもしれません。

    ロゴ画像の背景は単色でしょうか。

    2007年7月6日 4:22
  •  masato01 さんからの引用
     

    いろいろ情報をありがとうございます。

    ロゴ画像背景色については、現在のところ単色を考えています。

    単色で有れば、少しは楽になるのでしょうか。

    例えば、透過にしたい背景が白なら、

    先ほどのコードで

    g.DrawImage(img2,....

    の前で

    img2.MakeTransparent(Color.White);

    とすればよいだけです。

    また、img2の左上の1pixelの色を元に同じ色を透過にしたい場合は

    img2.MakeTransparent(img2.GetPixel(1, 1));

    でよいと思います。

     

    Jpegの場合、非可逆圧縮のため保存時に色が少し変わってしまうので、透過色指定が難しいのではと思いました。

    できれば背景を透過にしたいロゴはBmpやPngで保存しておいてください。

    2007年7月6日 5:12

すべての返信

  • 流れとしては以下に書かれているイメージです。

     

    GDI+を使った画像合成について
      http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-26061.htm

     

    サンプルコードとしては、例えば以下が参考になると思います。。

     

    CGI+ Adding to Images
      http://www.csharphelp.com/board2/read.html?f=1&i=45424&t=45424

    2007年7月6日 3:09
    モデレータ
  • こんな感じでどうでしょうか。

     

    Code Snippet
       Bitmap img1 = new Bitmap("srcimage.jpg");
       Bitmap img2 = new Bitmap("logo.jpg");
       Bitmap img3 = new Bitmap(img1);
       Graphics g = Graphics.FromImage(img3);
       g.DrawImage(img2,img3.Width-img2.Width,img3.Height-img2.Height,img2.Width,img2.Height);
       g.Dispose();
       img1.Dispose();
       img2.Dispose();
       img3.Save("newImage.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);

     


    2007年7月6日 3:48
  • さっそくの回答ありがとうございました。

    紹介されたHPを参照し試してみます。

     

    2007年7月6日 3:53
  • サンプルソースの提供ありがとうございます。

    これを元に検討してみます。

     

    サンプルをためさせてもらいました。

    こんな簡単にできてしまうのですね。

     

    これでやりたいことが実現できそうです。

    ありがとうございました。

    2007年7月6日 3:54
  •  IIJIMAS さんからの引用

    こんな感じでどうでしょうか。

     

    Code Snippet
       Bitmap img1 = new Bitmap("srcimage.jpg");
       Bitmap img2 = new Bitmap("logo.jpg");
       Bitmap img3 = new Bitmap(img1);
       Graphics g = Graphics.FromImage(img3);
       g.DrawImage(img2,img3.Width-img2.Width,img3.Height-img2.Height,img2.Width,img2.Height);
       g.Dispose();
       img1.Dispose();
       img2.Dispose();
       img3.Save("newImage.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);

     


     

    画像を重ねることができることがわかりましたが、

    これでさらにimg2を透過させる方法はありますか?

     

     

    2007年7月6日 4:12
  • Bitmap.MakeTransparent メソッド (Color)

    http://msdn2.microsoft.com/ja-jp/library/8517ckds(VS.80).aspx

    を使用してBitmap上にある指定色を透過にできます。

     

    ただし、Jpegでは意図どおりにならないかもしれません。

    ロゴ画像の背景は単色でしょうか。

    2007年7月6日 4:22
  •  IIJIMAS さんからの引用

    Bitmap.MakeTransparent メソッド (Color)

    http://msdn2.microsoft.com/ja-jp/library/8517ckds(VS.80).aspx

    を使用してBitmap上にある指定色を透過にできます。

     

    ただし、Jpegでは意図どおりにならないかもしれません。

    ロゴ画像の背景は単色でしょうか。

     

    いろいろ情報をありがとうございます。

    ロゴ画像背景色については、現在のところ単色を考えています。

    単色で有れば、少しは楽になるのでしょうか。

    2007年7月6日 4:49
  •  masato01 さんからの引用
     

    いろいろ情報をありがとうございます。

    ロゴ画像背景色については、現在のところ単色を考えています。

    単色で有れば、少しは楽になるのでしょうか。

    例えば、透過にしたい背景が白なら、

    先ほどのコードで

    g.DrawImage(img2,....

    の前で

    img2.MakeTransparent(Color.White);

    とすればよいだけです。

    また、img2の左上の1pixelの色を元に同じ色を透過にしたい場合は

    img2.MakeTransparent(img2.GetPixel(1, 1));

    でよいと思います。

     

    Jpegの場合、非可逆圧縮のため保存時に色が少し変わってしまうので、透過色指定が難しいのではと思いました。

    できれば背景を透過にしたいロゴはBmpやPngで保存しておいてください。

    2007年7月6日 5:12
  • 情報提供だけでなく、ソースまで公開していただき大変感謝しております。

    また、ソースについても非常に分かりやすく、感謝しています。

     

    ありがとうございました。

     

    2007年7月6日 5:29