2022/07/22(金) [n年前の日記]
#1 [prog][cg_tools] ディザパターンに変換するプログラムを修正
以下のページで紹介されている、ディザパターンアルゴリズムのサンプルソースに、色々と手を加えて機能追加をしてみた。
_Arbitrary-palette positional dithering algorithm
変更点は以下。
コンパイルに使った環境は、Windows10 x64 21H2 + MSYS2 + MinGW64。g++ 12.1.0 + GNU Make 4.3。
png画像の読み込みや書き込みは stbライブラリの stb_image.h と stb_image_write.h を使わせてもらった。*.cpp と同じ場所に置いておけばコンパイルできるようになる。
_nothings/stb: stb single-file public domain libraries for C/C++
_Arbitrary-palette positional dithering algorithm
変更点は以下。
- -d N で、ディザマップを 2x2, 4x4, 8x8 から選べるようにした。
- -p PALETTE.png で、パレットデータ相当を別途指定できるようにした。
- gdライブラリからstbライブラリに変更したので、単体 exe で実行できるようになった。(MSYS2関係の .dll を別途用意しなくてもいい。静的リンクしてある。)
コンパイルに使った環境は、Windows10 x64 21H2 + MSYS2 + MinGW64。g++ 12.1.0 + GNU Make 4.3。
png画像の読み込みや書き込みは stbライブラリの stb_image.h と stb_image_write.h を使わせてもらった。*.cpp と同じ場所に置いておけばコンパイルできるようになる。
_nothings/stb: stb single-file public domain libraries for C/C++
◎ ソース。 :
ソースは以下。
_yodither1.cpp
_yodither3.cpp
_yodither4.cpp
Makefile は以下。
_Makefile
基本的には、以下でコンパイルできるはず。
_yodither1.cpp
_yodither3.cpp
_yodither4.cpp
Makefile は以下。
_Makefile
基本的には、以下でコンパイルできるはず。
g++ -O3 yodither1.cpp -fopenmp -o yodither1.exe -static -lstdc++ -lgcc -lwinpthread -lm
◎ 実行バイナリ。 :
一応、実行バイナリも含めた一式を .zip にして置いときます。各 .exe を別PC (Windows 10 x64機) にコピーしても動いたので、他のPC上でも動いてくれるのではないかと…。たぶん。
_yodither_20220722.zip
使用例は以下。--help をつければ使い方の簡単な説明が表示されるはずなので…。
16〜32色程度のパレットデータでしか動作確認してません。256色あたりを指定すると、とんでもなく処理時間がかかりそうなので、怖くて試してないです。
_yodither_20220722.zip
使用例は以下。--help をつければ使い方の簡単な説明が表示されるはずなので…。
yodither1.exe --help yodither1.exe -i INPUT.png -o OUTPUT.png yodither1.exe -i INPUT.png -o OUTPUT.png -d 4 yodither1.exe -i INPUT.png -o OUTPUT.png -d 4 -p db32.gpl yodither1.exe -i INPUT.png -o OUTPUT.png -d 4 -p db32.png yodither4.exe --help yodither4.exe -i INPUT.png -o OUTPUT.png yodither4.exe -i INPUT.png -o OUTPUT.png -d 8 yodither4.exe -i INPUT.png -o OUTPUT.png -d 8 -p db32.gpl yodither4.exe -i INPUT.png -o OUTPUT.png -d 8 -p db32.png
> yodither1.exe --help Usage: yodither1.exe -i IN.png -o OUT.png [-d N] [-p PALETTE] [-t] [-v] [-h] -i FILE, --input FILE input png image file. -o FILE, --output FILE output png image file. -d N, --dither N dither map. N = 2/4/8(2x2,4x4,8x8) [default=8] -p FILE, --palette FILE Set palette (.gpl or .png) -t, --trimode Enable tri-mode. -v, --verbose Print verbose -h, --help print this message
> yodither4.exe --help Usage: yodither4.exe -i IN.png -o OUT.png [-d N] [-p PALETTE] [-v] [-h] -i FILE, --input FILE input png image file. -o FILE, --output FILE output png image file. -d N, --dither N dither map. N = 2/4/8 (2x2/4x4/8x8) [Default=4] -v, --verbose Print verbose -h, --help print this message
- yodither1.exe : 処理時間が結構かかる。生成結果の品質はそこそこ良い。
- yodither3.exe : パレットデータを変更すると妙な生成結果になりがち。あまり使えない感じがする。
- yodither4.exe : 処理時間はそれほどかからない。品質は yodither1.exe よりちょっと落ちる。
16〜32色程度のパレットデータでしか動作確認してません。256色あたりを指定すると、とんでもなく処理時間がかかりそうなので、怖くて試してないです。
[ ツッコむ ]
以上です。