> ルーチェさんのimgctlがありましたが、HSP2用です。
一応 C/C++, Visual Basic, Delphi用と書いてある
imgctl.dll 1.24 の方はHSP3からでも利用可能ですよ。
imgctl.hpi に付いている様なインポートファイルや
モジュールファイルは自分で用意しないといけないので面倒ではありますが。
(使う命令だけ定義しとけば十分ですけど)
αチャネルについては αブレンドを使用するための
PngAlphaPaste 関数がHSP3では使えないので直接は表示出来ない見たいです。
(PngAlphaPaste コールバック関数がCのソースで提供されているため)
PNG画像のαチャネル取得自体は出来るので、
最終的にαチャネル付き画像を表示するには
gmode 7 + gcopy から取得したデータを使う感じになると思います。
試しに作って見ました。
ファイル名をいれる所(2箇所)はそれぞれ書き変えて下さい。
// imgctl.dll が必要です。
#uselib "imgctl.dll"
#cfunc ToDIB "ToDIB" str
#cfunc PNGtoDIB "PNGtoDIB" str
#cfunc PNGAtoDIB "PNGAtoDIB" str
#func DIBtoDC "DIBtoDC" int,int,int,int,int,int,int,int,int
#func DIBtoDCex2 "DIBtoDCex2" int,int,int,int,int,int,int,int,int,int,int,int
#func HeadDIB "HeadDIB" int,var
#func DeleteDIB "DeleteDIB" int
#define SRCCOPY $00CC0020
#define HALFTONE $00000004
/* 背景描画 */
filename = "背景画像ファイル"
hbg = ToDIB(filename)
HeadDIB hbg, pbmih
dupptr gx, varptr(pbmih)+4, 4, 4
dupptr gy, varptr(pbmih)+8, 4, 4
; ウィンドウの大きさに合わせてコピー
DIBtoDCex2 hdc, 0, 0, GINFO_WINX, GINFO_WINY, hbg, 0, 0, gx, gy, SRCCOPY, HALFTONE
DeleteDIB hbg
/* PNGからメインの画像とαチャンネル画像を取得 */
filename = "αチャンネル付きPNGファイル" ;PNG画像オンリー
hdib = PNGtoDIB(filename)
halp = PNGAtoDIB(filename)
HeadDIB hdib, pbmih
dupptr gx, varptr(pbmih)+4, 4, 4
dupptr gy, varptr(pbmih)+8, 4, 4
buffer 1, gx*2, gy
DIBtoDC hdc, 0, 0, gx, gy, hdib, 0, 0, SRCCOPY ; gmode 7 用の左側画像(メイン)
DIBtoDC hdc, gx, 0, gx, gy, halp, 0, 0, SRCCOPY ; gmode 7 用の右側画像(αチャンネルマスク)
DeleteDIB hdib
DeleteDIB halp
/* 取得したデータを使ってピクセルアルファブレンドコピー */
gsel 0
gmode 7,gx, gy
gcopy 1,0,0,gx, gy
私も詳くないので間違ってる事を
言っているかもしれません。