トップ回答者
C# 画像イメージに画像イメージを重ねる方法

質問
回答
-
流れとしては以下に書かれているイメージです。
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 -
こんな感じでどうでしょうか。
Code SnippetBitmap 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); -
Bitmap.MakeTransparent メソッド (Color)
http://msdn2.microsoft.com/ja-jp/library/8517ckds(VS.80).aspx
を使用してBitmap上にある指定色を透過にできます。
ただし、Jpegでは意図どおりにならないかもしれません。
ロゴ画像の背景は単色でしょうか。
-
masato01 さんからの引用 いろいろ情報をありがとうございます。
ロゴ画像背景色については、現在のところ単色を考えています。
単色で有れば、少しは楽になるのでしょうか。
例えば、透過にしたい背景が白なら、
先ほどのコードで
g.DrawImage(img2,....
の前で
img2.MakeTransparent(Color.White);
とすればよいだけです。
また、img2の左上の1pixelの色を元に同じ色を透過にしたい場合は
img2.MakeTransparent(img2.GetPixel(1, 1));
でよいと思います。
Jpegの場合、非可逆圧縮のため保存時に色が少し変わってしまうので、透過色指定が難しいのではと思いました。
できれば背景を透過にしたいロゴはBmpやPngで保存しておいてください。
すべての返信
-
流れとしては以下に書かれているイメージです。
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 -
こんな感じでどうでしょうか。
Code SnippetBitmap 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); -
IIJIMAS さんからの引用 こんな感じでどうでしょうか。
Code SnippetBitmap 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を透過させる方法はありますか?
-
Bitmap.MakeTransparent メソッド (Color)
http://msdn2.microsoft.com/ja-jp/library/8517ckds(VS.80).aspx
を使用してBitmap上にある指定色を透過にできます。
ただし、Jpegでは意図どおりにならないかもしれません。
ロゴ画像の背景は単色でしょうか。
-
IIJIMAS さんからの引用 Bitmap.MakeTransparent メソッド (Color)
http://msdn2.microsoft.com/ja-jp/library/8517ckds(VS.80).aspx
を使用してBitmap上にある指定色を透過にできます。
ただし、Jpegでは意図どおりにならないかもしれません。
ロゴ画像の背景は単色でしょうか。
いろいろ情報をありがとうございます。
ロゴ画像背景色については、現在のところ単色を考えています。
単色で有れば、少しは楽になるのでしょうか。
-
masato01 さんからの引用 いろいろ情報をありがとうございます。
ロゴ画像背景色については、現在のところ単色を考えています。
単色で有れば、少しは楽になるのでしょうか。
例えば、透過にしたい背景が白なら、
先ほどのコードで
g.DrawImage(img2,....
の前で
img2.MakeTransparent(Color.White);
とすればよいだけです。
また、img2の左上の1pixelの色を元に同じ色を透過にしたい場合は
img2.MakeTransparent(img2.GetPixel(1, 1));
でよいと思います。
Jpegの場合、非可逆圧縮のため保存時に色が少し変わってしまうので、透過色指定が難しいのではと思いました。
できれば背景を透過にしたいロゴはBmpやPngで保存しておいてください。