トップページ > 過去ログ > 記事閲覧
SaveSoftImageToPngで透過情報が保存されない
名前:だてお 日時: 2010/02/07 06:39

DXライブラリ(Ver 3.01a)を使ってプログラムの勉強をしています。 おそらく自分が何か大きな勘違いしていそうなのですが、 中々原因が分からず悩んでいるので質問させて下さい。 MakeARGB8ColorSoftImageでRGBA8カラーのソフトウエアで扱うイメージを作成し、 DrawPixelSoftImageで1ドットずつαつきで色を塗っていって SaveSoftImageToPngを使ってPNG画像として保存するプログラムを作っています。 しかし、出力したPNG画像やDrawSoftImageでの表示確認をしてみると α要素が無い不透明な画像となってしまいます。 CreateGraphFromSoftImageを使って、一度グラフィックハンドルを作成したものを DrawGraphで表示すると、きちんとα要素がある状態で表示されます。 以下が大体のソースをかいつまんだものです。 int image_handle = MakeARGB8ColorSoftImage(横サイズ,縦サイズ); while(繰り返す処理) { (色情報をred,green,blueに入れ、不透明度をalphaにいれる) DrawPixelSoftImage(image_handle,x,y,red,green,blue,alpha); (xとyを動かす処理) } int Gh = CreateGraphFromSoftImage( image_handle ) ; DrawGraph( 0, 0, Gh, TRUE ) ; //α付きで表示される DrawSoftImage(0,0,image_handle); //α無しで表示される SaveSoftImageToPng( ファイル名 , image_handle ,0) ; //α無しで保存される 説明が下手で申し訳ありませんが、どうぞよろしくお願い致します。

Page: 1 |

Re: SaveSoftImageToPngで透過情報が保存されない ( No.1 )
名前:いっち 日時:2010/02/07 15:08

私も事象確認しました。おそらくはDxLibのバグだと思いますので、管理人さんの見解をお待ちするのが良いと思います。 (仕様や制限といった可能性もあります。SaveSoftImage系は非公開ですし) //-- 以下テストソース (test.pngを作成しています)--// int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); if ( DxLib_Init( ) == -1 ) return -1; int image_handle = MakeARGB8ColorSoftImage( 128, 128 ); for ( int y = 0; y < 128; y++ ) { for ( int x = 0; x < 128; x++ ) { DrawPixelSoftImage( image_handle, x, y, x * 2, y * 2, x + y, 64 ); } } int graph_handle1 = CreateGraphFromSoftImage( image_handle ); SaveSoftImageToPng( "test.png", image_handle ,0 ); int graph_handle2 = LoadGraph( "test.png" ); ClearDrawScreen( ); DrawSoftImage( 0, 0, image_handle ); // 左上 DrawGraph( 128, 0, graph_handle1, TRUE ); // 右上 DrawGraph( 0, 128, graph_handle2, TRUE ); // 左下 WaitKey( ); DxLib_End( ); return 0; }
Re: SaveSoftImageToPngで透過情報が保存されない ( No.2 )
名前:だてお 日時:2010/02/07 19:32

いっちさんのソースではっきりと確認できました。 わざわざありがとうございます! なるほど、今のところSaveSoftImageToPngは こういう動作をするものだったのですね。 現在はマスク用の白黒画像を一緒に出力して 半ば強引に問題を回避しています。 もし可能ならば透過PNGで出力できるとありがたいなぁと思います。
Re: SaveSoftImageToPngで透過情報が保存されない ( No.3 )
名前:管理人 日時:2010/02/08 00:00

特に何も考えずにRGBだけを保存していました アルファチャンネルがある場合はアルファチャンネルも保存するようにしましたので、 よろしければお使い下さい m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) あと、DrawSoftImage もアルファチャンネルがある画像の場合は透過するようにしました
Re: SaveSoftImageToPngで透過情報が保存されない ( No.4 )
名前:だてお(解決) 日時:2010/02/08 00:21

管理人様、素早い対応ありがとうございます! 早速試してみたところ問題なく動作しました。 本当にありがとうございます!

Page: 1 |