libpng最新版(1.2.33)をWindows CEでビルドしてみた。移植済み(libpng for WindowsCE)のも公開されているがベースがlibpng 1.2.3とちょっと古い。
ソース自体はかなり移植性が高く作られており(元々クロスプラットフォームなんだから当たり前だ)、ほとんど修正することなくWindows CE環境でビルドできた。
PNG_USER_CONFIGを定義しておくと、ユーザー定義のpngusr.hを読み込んでくれるようになってるところがポイント。このお陰で元のソースを修正することなく、最小限のファイルの追加で済んだ。
手順はこんな感じ
- 適当なプロジェクト(static library)を作成し、必要なソースファイルを追加(png.c, pngset.c, pngget.c, pngread.c, pngpread.c, pngrtran.c, pngrutil.c, pngerror.c, pngmem.c, pngrio.c, pngwio.c, pngtrans.c, pngwrite.c, pngwtran.c, pngwutil.c)
- プリプロセッサで PNG_NO_MMX_CODE, PNG_SETJMP_NOT_SUPPORTED, PNG_USER_CONFIG, PNG_ABORT=wce_abort の定義を追加する
- pngusr.hファイルを新規作成し、以下の内容を追加する。
void wce_abort(void);
- pngusr.cファイルを新規作成し、以下の内容を追加する。プロジェクトに追加する。
#include
void wce_abort(void)
{
RaiseException(STATUS_INVALID_PARAMETER, EXCEPTION_NONCONTINUABLE_EXCEPTION, 0, NULL);
}
Windows CE用のCRTではabortが提供されていないので、RaiseExceptionで代替してみた。元々エラーの場合にabort()とかlongjmp()で抜けるっていう仕様もかなりアレな実装だと思うが…。もうちょっとマトモな実装にはならんもんかのう。
pngtest.cもビルドしてみて、pngtest.exeでのテストはとりあえずPASSしてる模様。実際に描画しての確認はまた今度…
あ、zlibを使ってるので、こっちも別途用意しておく必要がある。(⇒zlibce)