トップページ > 記事閲覧
SaveDrawValidGraphToPNGについて
名前:よつば 日時: 2022/02/21 14:51

DXライブラリには日頃大変お世話になっております。 現在、簡単な画像加工ツールを開発しています。 MakeScreen でアルファチャンネル付きの描画対象にできるグラフィックハンドルを作成し、 そこに乗算済みアルファを使用して画像を描画しています。 画面上では正常な描画結果が反映されていますが、 このグラフィックハンドルをSaveDrawValidGraphToPNGなどで保存した画像では 乗算済みアルファが正しく反映されていないように思います。 確認したDXライブラリのバージョンは3.23で、 下記スレッドの修正を含めたバージョンです。 (ttps://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=5266) お手すきの折にでもご確認頂ければ幸いです。
メンテ

Page: 1 |

Re: SaveDrawValidGraphToPNGについて ( No.1 )
名前:管理人 日時:2022/02/22 00:20

乗算済みアルファを使用して作成された MakeScreen のグラフィックハンドルの内容は 『乗算済みアルファの画像』なので、SaveDrawValidGraphToPNG などで保存する場合は 保存する前に『通常アルファの画像』に変換する必要があります 具体的には DX_GRAPH_FILTER_INTERP_ALPHA を使用します // 通常アルファの画像格納用のテンポラリ画像を作成 int TempScreen = MakeScreen( 画像の横幅, 画像の縦幅 ); // テンポラリ画像に乗算済みアルファの画像から通常アルファ画像に変換したものを格納 GraphFilterBlt( 乗算済みアルファの画像, TempScreen, DX_GRAPH_FILTER_INTERP_ALPHA ); // テンポラリ画像を保存 SaveDrawValidGraphToPNG( TempScreen, 0, 0, 画像の横幅, 画像の縦幅, "Save.png" ); // テンポラリ画像を削除 DeleteGraph( TempScreen ); 又は // 乗算済みアルファの画像を通常アルファ画像に変換 GraphFilterBlt( ScreenHandle, DX_GRAPH_FILTER_INTERP_ALPHA ); // 通常アルファの画像に変換した状態で保存 SaveDrawValidGraphToPNG( ScreenHandle, 0, 0, 画像の横幅, 画像の縦幅, "Save.png" ); // 通常アルファの画像を乗算済みアルファの画像に再変換( DX_GRAPH_FILTER_PREMUL_ALPHA を使用 ) GraphFilterBlt( ScreenHandle, DX_GRAPH_FILTER_PREMUL_ALPHA ); 後者の方が3行で済んで若干お手軽感がありますが、乗算済みアルファ → 通常アルファ → 乗算済みアルファ によって若干画像が劣化する他、処理負荷も前者より高いので、少し煩雑ですが前者の方がお勧めです よろしければお試しください m(_ _)m
メンテ
Re: SaveDrawValidGraphToPNGについて ( No.2 )
名前:よつば(解決) 日時:2022/02/22 10:12

こんな方法があったのですね! 期待通りの挙動になることを確認いたしました。 ご回答ありがとうございました!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存