アルファ値を含んだ画像を扱う必要があるので、libpng をインポートした。
PNG では、インデックスカラーの場合でも、カラーパレットにアルファ値を含める事が出来る。
ただ、zlib が必要なのと、記憶割り当てを使う事から、BMP やJPEG を使っていたが、インデックスカラーでアルファ付画像を扱う必要性があり、やはりインポートをする事になってしまった・・
書き込みを使う事は「稀」と考えて、デコーダーのみではあるが・・・
Windows のフレームワーク「glfw_app」では以前からサポートしてあるので、そのコードを再利用したので簡単ではあったけど、意外とライブラリビルド時の「configure」の使い方で google 先生の助けを借りたw
libpng をビルドするには、zlib が必要なので、事前に zlib をビルドしておいた。
※zlib のビルドは普通に出来ると思う。
libpng のビルドでは、ツール関係(コマンドライン実行ファイル)のビルドで失敗するものの(RX マイコンでは、動かす環境のハードルが高い)、ライブラリの構築には成功しているので、それで「ヨシ」とした。
※github には「libpng.a」とヘッダーなど必要な物を上げてあるので、それを利用するぶんには、自分でビルドをする必要は無い。
./configure --includedir="/d/Git/RX/zlib" --host=rx-elf --disable-shared
Makefile 編集
make
cp .libs/libpng16.a /d/Git/RX/libpng/libpng.a
cp png.h /d/Git/RX/libpng/.
cp pnglibconf.h /d/Git/RX/libpng/.
cp pngconf.h /d/Git/RX/libpng/.
上記のように、「ホスト」を指定し、zlib のパスを追加してある。
しかしこれだけでは不十分で、make すると、zlib.h が無いとか言ってエラーになる・・・
正しいやり方が判らなかったので、手っ取り早く、configure で生成された Makefile を直接編集した。
・DEFAULT_INCLUDES = -I. -I/d/Git/RX/zlib
※zlib のパスを追加
・CFLAGS = -mcpu=rx600 -O2 -I/d/Git/RX/zlib
※最適化「-O2」を追加
・シェアードライブラリは必要無いので、省いてある。
・ビルドすると、「.libs」ディレクトリにライブラリが出来ている。
・必要なヘッダーをコピーする。
png ファイルのロードは、以前に実装したので、それをほぼそのまま使っている。(glfw3_app/common/img_io/png_io.hpp)
※組み込みでは、png ファイルを出力する事は「稀」と思うので、ロードのみサポートしている。
PNG 画像のアルファ値は、元の画素と合成されて描画する。
※アルファ値が「0」の場合、そのピクセルは描画されない。
#include "graphics/img_in.hpp"
namespace {
typedef img::scaling<RENDER> PLOT;
PLOT plot_(render_);
typedef img::img_in<PLOT> IMG_IN;
IMG_IN imgs_(plot_);
}
imgs_.load(filename);・
・img_in クラスは、BMP、JPEG、PNG を自動で判別してロードするクラス。
・scaling クラスはワークメモリを最小限にして、スケールしながら描画するもので、それなりにエイリアシングも除去してくれる。
# cd res
# image ff.png
libpng warning: iCCP: known incorrect sRGB profile
# dir
6727 Jul 9 2016 08:21 ff.png
3407 Jul 9 2016 08:21 forte.png
23148 Jul 9 2016 08:21 NoImage.png
6371 Jul 9 2016 08:21 pause.png
3419 Jul 9 2016 08:21 piano.png
6856 Jul 9 2016 08:21 play.png
373882 Jul 9 2016 08:21 Player.icns
117306 Jul 9 2016 08:21 player.ico
17632 Jul 9 2016 08:21 PlayerICON.png
6361 Jul 9 2016 08:21 plus.png
6748 Jul 9 2016 08:21 rew.png
6607 Jul 9 2016 08:21 right.png
3934 Jul 9 2016 08:21 seek_handle.png
6364 Jul 9 2016 08:21 seg12.ttf
4680 May 6 2019 23:08 select.bmp
6780 Jul 9 2016 08:21 select.png
4028 Jul 9 2016 08:21 slider_handle.png
6343 Jul 9 2016 08:21 stop.png
6605 Jul 9 2016 08:21 up.png
Total 19 files
# image NoImage.png
libpng warning: iCCP: known incorrect sRGB profile
# image ff.png
libpng warning: iCCP: known incorrect sRGB profile
# image PlayerICON.png
libpng warning: iCCP: known incorrect sRGB profile
#
実験は、RX65N Envision Kit で行った。