何処で引っかかっているのかを書いてもらえると回答しやすいかも
screenに表示されている画像をpngに保存するだけであれば、こんな感じになります。
gselで指定されているscreen or bufferの画像を指定したファイルにpngで保存
#module
#uselib "gdiplus.dll"
#func GdiplusStartup "GdiplusStartup" var, var, nullptr
#func GdiplusShutdown "GdiplusShutdown" int
#func GdipCreateBitmapFromGdiDib "GdipCreateBitmapFromGdiDib" int, int, var
#func GdipSaveImageToFile "GdipSaveImageToFile" int, wstr, var, nullptr
#func GdipDisposeImage "GdipDisposeImage" int
#deffunc pngsave str filename
//GDI+準備
gsi = 1, 0, 0, 0
GdiplusStartup hGdip , gsi
//screen or bufferからimage作成
mref bm, 67
GdipCreateBitmapFromGdiDib bm(6), bm(5) , hImage
//imageをpngで保存
UUID = $557CF406, $11D31A04, $0000739A, $2EF31EF8
GdipSaveImageToFile hImage, filename, UUID
//GDI+後始末
GdipDisposeImage hImage
GdiplusShutdown hGdip
return
#global
この場合、指定されたscreenが24bitなら24bitで、8bitなら8bitで保存されます。
8bitの場合αはパレット毎に設定になるのでhImageからGdipGetImagePaletteでパレットを取得し、
パレット番号毎にα値を設定してGdipSetImagePaletteでセットしてから保存すればokです。
#module
#uselib "gdiplus.dll"
#func GdiplusStartup "GdiplusStartup" var, var, nullptr
#func GdiplusShutdown "GdiplusShutdown" int
#func GdipCreateBitmapFromGdiDib "GdipCreateBitmapFromGdiDib" int, int, var
#func GdipSaveImageToFile "GdipSaveImageToFile" int, wstr, var, nullptr
#func GdipDisposeImage "GdipDisposeImage" int
#func GdipGetImagePalette "GdipGetImagePalette" int, var, int
#func GdipGetImagePaletteSize "GdipGetImagePaletteSize" int, var
#func GdipSetImagePalette "GdipSetImagePalette" int, var
#deffunc pngsave str filename
//GDI+準備
gsi = 1, 0, 0, 0
GdiplusStartup hGdip , gsi
//screen or bufferからimage作成
mref bm, 67
GdipCreateBitmapFromGdiDib bm(6), bm(5) , hImage
//パレット取得
dim pal , 258
GdipGetImagePaletteSize hImage , palsize
GdipGetImagePalette hImage , pal , palsize
//全パレットのα値を0Fにする例
//pal(1)にパレット数 pal(2)からARGB値
repeat pal(1)
pal(cnt+2) = pal(cnt+2) & 0xFFFFFF
pal(cnt+2) = pal(cnt+2) | 0x0F000000
loop
//変更したパレットをセット
GdipSetImagePalette hImage , pal
//imageをpngで保存
UUID = $557CF406, $11D31A04, $0000739A, $2EF31EF8
GdipSaveImageToFile hImage, filename, UUID
//GDI+後始末
GdipDisposeImage hImage
GdiplusShutdown hGdip
return
#global
エラー処理等省略しているので、そのままの使用はオススメしません。