HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0814
ばってん8bitカラーのPNGで保存10解決


ばってん

リンク

2017/8/14(Mon) 16:47:34|NO.80950

お世話になります。
8bitのPNGで保存する方法を教えてください(出きればα付きで)。

減色方法でなく単純に元から256色以下の画像をpng保存したいのですが、
alSaveFileだと32bit固定でしょうか?何か良い方法があれば…m()m



この記事に返信する


mirage17

リンク

2017/8/14(Mon) 18:49:09|NO.80951

私にわかる事だけ話します。256色お絵かきソフトのD−Pixedなら、
PNGファイルと、BMPファイルのどちらも256色で、読み込んだり、
書き込んで256色で、パレット付きで、保存したりできますよ。
他にも256色お絵かきソフトなら、256色のPNGファイルで保存
できるソフトもありそうですね。もちろん256色に減色してから、
D−Pixedで、読み込んで、PNGに保存すればいいだけです。
αのような32bitファイルでは、24bitの環境の方も、多いと
思うので、色数は24bitまでで保存した方が無難かもしれません。
よほど絵にこだわるのであれば、32bitを使いたい気持ちはわかります。
でも、私のホームページを見てる人は、アクセス解析では、
24bitの方が多いですよ。

D−Pixed:http://www.vector.co.jp/soft/win95/art/se035696.html
Windows10でも動作する事を私のPCで、確認済みです。



mirage17

リンク

2017/8/14(Mon) 20:23:44|NO.80952

もしかしたら、HSPのプログラムで、256色のPNGで保存
しようとしているのかなと思いました。私の勘違いかもしれません。
前に書いた回答が間違いかもと思い始めました。
間違っていたらすいません。



ばってん

リンク

2017/8/14(Mon) 20:57:27|NO.80953

>mirage17さま
表現が紛らわしくてすみません。
ご推察の通りHSPで256色PNG保存したいです。



MillkeySoftw

リンク

2017/8/15(Tue) 01:59:50|NO.80956

>>ご推察の通りHSPで256色PNG保存したいです。
ここの部分がいまいちわからないけど、もうちょっと詳しく教えてください。

1.アルファチャンネル付き各種画像ファイルを 8bit + α値で改めて保存したい
2.HSPのウィンドウに表示されている画像を 8bit + α値で保存したい

1.は基本的に、WinAPI の GDI+ という Windows にもともとある機能を使えば変換は可能。
2.はちょっと厄介で、HSPにα値という情報がないので自分で作成するしかない。

質問者さんがなにをしたいかによって、プログラムが違うからなるべく詳しくね。



ばってん

リンク

2017/8/15(Tue) 05:38:18|NO.80959

>MillkeySoftwさま

情報不足すみません、私のしたいことは1です。

hspのscreenに表示したα付き画像を8bit_pngで保存したいになります。



おすなり

リンク

2017/8/19(Sat) 17:51:25|NO.81011

mirage17さんの通りでできますけどね。



ソラ(元スペース)

リンク

2017/8/19(Sat) 21:28:44|NO.81013

mirage17さんが紹介した方法は外部ソフトを使っていますよね。
ばってんさんはHSPでやりたいのでは?



ばってん

リンク

2017/8/19(Sat) 22:36:02|NO.81014

>ソラさま
フォローありがとうございます。
はいHSP上でやりたいです。

なんとなく、Artlet2Dと画像関連モジュール(略して仮。衣日和さん)の
ソースを(私が)理解して、PixelFormat8bppIndexedを使って保存してやれば
出来そうな気がしますが…チカラ及ばず。。です。



nori

リンク

2017/8/25(Fri) 23:56:20|NO.81107

何処で引っかかっているのかを書いてもらえると回答しやすいかも

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
エラー処理等省略しているので、そのままの使用はオススメしません。



ばってん

リンク

2017/8/26(Sat) 12:28:13|NO.81112

>noriさま

ありがとうございます。
無事8bitPNG保存できました!

自前でこしらえたもの(ネット上のソースのツギハギ、えいやッ)
は1枚保存するのに5〜10秒かかってしまい、何処で引っかかっているのかも
別件で時間が取れず(言い訳)ソース解読できずに放置状態でした。

まだ頂いたソース理解出来てていませんが、
時間を取って理解を深めたいと思います。

ありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.