tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: 透過pngの作成
投稿日: 2010/04/05(Mon) 18:49
投稿者魔界の仮面弁士
.NET であれば MakeTransparent メソッド一発なのですが、
GDI+ Flat API だと、結構面倒かも…。


(0) GDI+ を使うために、GdiplusStartup API を呼び出しておく。

(1) PictureBox の Image プロパティや Picture プロパティ、あるいは
 LoadPicture などを使って、処理対象の Picture オブジェクトを得る。

(2) (1) の Handle プロパティを指定して GdipCreateBitmapFromHBITMAP API を呼び出し、
 Picture オブジェクトを GDI+ の Bitmap オブジェクトのハンドルに変換する。

(3) (1) の画像と同サイズの新規 Bitmap を GdipCreateBitmapFromScan0 API 等で生成する。
 このとき、PixelFormat には PixelFormat32bppARGB を指定しておく。
 なお、(1) の Width / Height プロパティは HiMetric 単位系なので注意。

(4) GdipGetImageGraphicsContext API で、(3) の Bitmap から Graphics を生成。
 これが変換結果のためのキャンバスとなる。

(5) ここからが本題。
 GdipGraphicsClear API を使い、(4)の Graphics を完全透過色でクリアする。

(6) GdipCreateImageAttributes API で、ImageAttributes を作成。

(7) GdipSetImageAttributesColorKeys API で、(6) に『透明にしたい色』を指定。

(8) GdipDrawImageRectRectI API 等で、(4)のGraphics に対して、
 (6) の ImageAttribute 指定で (2)の元 Bitmap を描画。

(9) 不要になったオブジェクトを、それぞれ破棄する。
 元画像として得た (2) の Bitmap は、GdipDisposeImage API、
 描画キャンバスとなった (4) の Graphics は、GdipDeleteGraphics API、
 (6) の ImageAttributes は、GdipDisposeImageAttributes API。

(10) 出力結果である (3) の Bitmap から、透過 PNG ファイルを作成。
 ここで GdipSaveImageToFile API を呼び出す手順については、説明不要ですよね。

(11) あとは、GdipDisposeImage でオブジェクトを破棄し、
 GdiplusShutdown での後始末をして終了。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。