画像重ね保存

解決


みよ  2009-03-05 15:44:06  No: 101592  IP: [192.*.*.*]

画像が2枚あります。
1つは600(幅)x800(高さ)  a.jpg
1つは100(幅)x100(高さ)  b.jpg
この2つの画像をa.jpgをベースにb.jpgをa.jpgの右下へ重ね保存したいのです。
イメージだとデジカメで日付が挿入される機能です。
SavePictureを使ってできないかと考えていたのですが
わかりませんでした。
PC環境:VB6.0 SP5、WindowsXP SP2
宜しくお願い致します。

編集 削除
魔界の仮面弁士  2009-03-07 12:55:53  No: 101593  IP: [192.*.*.*]

PaintPicture を使えば、画像同士の重ね合わせはできるかと思います。
引数指定にて、どの位置に/どのサイズで重ね合わせるかを指定できます。
(一部切抜きや、拡大/縮小もできますし)
引数の意味は、ヘルプ等で確認してみてください。

あとはそれを、必要に応じて SavePicture で bmp 保存すればよいかと。
Jpeg 保存が必要であれば、たとえば下記のような方法があります。
http://yaplog.jp/orator/archive/29

編集 削除
みよ  2009-03-09 15:51:47  No: 101594  IP: [192.*.*.*]

魔界の仮面弁士様有難うございます。
早速、コードを作成してみました。JPEG画像とgif画像を重ねています。
Pictureオブジェクト
Picture3.PaintPicture Picture1.Image, 1, 1, 800, 600     'JPEG画像
Picture3.PaintPicture Picture2.Image, 560, 520, 230, 75  'GIF画像
Picture3.AutoRedraw = True
Doevents
SavePicture Picture3.Image, "c:\test.bmp"

GIFは背景を透明にしていますが、Picture2オブジェクトにgif画像を挿入しているため背景色が表示されてしまいます。
できれば透明保存をしたいのですが、どのようにコード追加すればできるのでしょうか?

編集 削除
魔界の仮面弁士  2009-03-09 21:33:13  No: 101595  IP: [192.*.*.*]

> JPEG画像とgif画像を重ねています。
gif ですか? 最初の質問と、内容が変わってしまったような。


> GIFは背景を透明にしていますが
透明色が必要な場合は、PaintPicture では不足でしょうね。

単色透過なら、ImageList コントロール経由で描画する手があります。
事前に、MaskColor を決めておく必要がありますれども。

アルファ値を用いた透過(PNG 画像など)の重ねあわせが必要なら、
GdipDrawImage系 API で描画とか。


ただし、マスクを事前に用意できる場合は、PaintPicture を使っても
透過描画を表現することができます。
http://masudahp.web.fc2.com/vb6/vb6first/pict032.html
http://river.myhome.cx/~kei/vb/other/
http://homepage1.nifty.com/rucio/main/technique/teq_13.htm

編集 削除
K.J.K.  2009-03-10 11:19:24  No: 101596  IP: [192.*.*.*]

IPicture.Render メソッドを直接使うとか。

編集 削除
みよ  2009-03-17 11:23:36  No: 101597  IP: [192.*.*.*]

いろいろとアドバイスして頂き有難うございます。返答遅れてすいません
GIFでの画像処理はマスクをかけないと無理そうですね。
大変参考になりました。
有難うございました

編集 削除
K.J.K.  2009-03-17 11:34:34  No: 101598  IP: [192.*.*.*]

> GIFでの画像処理はマスクをかけないと無理そうですね。
いえ、そのままで透過部分も出力できます。

編集 削除