007-09(2)  前へ←  ホームへ  →次へ  007-10(2)

No.007 - 10  PNGファイル(1)  PNG操作の準備


PNG を扱うための準備です。
libpng の導入方法を説明します。
 png.h 訳  libpng.txt 訳  readme 訳  LISENCE 訳  TODO 訳


・ PNGの特性
・ライセンス無償 ・可逆圧縮(無劣化)
・フルカラー画像もパレット画像も使える。  ・圧縮にはzlibを使ってるので効率的(高信頼性)
・半透明も使える ・Webでも使える。
筆者はPNGは一般的には万能だと思います。

唯一の弱点は写真の保存に向いてないことくらい。
写真を保存しようとするとどうしてもファイルサイズがでかくなります。(無劣化だからと思えば諦めもつきますが)


・zlibライブラリをダウンロード
png を扱うにはまずzlib を拾ってきてください
やり方はこちら
png は zlib で圧縮されてるので zlib が必要なのです。

「もう持ってるよ」って人は次へ。


・PNGライブラリをダウンロード
zlib を拾ってきたら
今度はlibpng Home Page(英語) でPNGライブラリを貰ってきてください。
2005年8月現在の最新バージョンは1.2.8ですが、古いOS用に1.0.18もあるようです。
Source code: って書いてあるとこからダウンロードしてください。



readmeにzip 形式がwindows用って書いてありますが、多分中身に差はないはず。


・拡張子 C → CPP
拾ってこれたら .c → .cpp に変えて(参照) 下さい(ウチのサイトはC++オンリーなので)。
zlib も .c → .cpp に変えておいてください)

zlib のとき作った拡張子変更プログラムがあるのでよかったら使って下さい。
ext_changer.zip(28KB 実行ファイル)   ・・・ソースはこちら


・コンパイル・エラーを避ける
png.cpp ファイル 11行目の #define PNG_NO_EXTERN をコメントアウトして

// #define PNG_NO_EXTERN

としてください。

読み書き関数を使うので、これやらないとコンパイル・エラーでます。
なんか違う方法もありそうな感じですが、筆者わかりませんでした。


・zlib と libpng のコンパイル・リンクについて
先ず、
png.h 内に書いてある #include "zlib.h"自分の zlib.h のパスを書き加えます。

zlib のパスを書かなくても、zlib 本体まるごとlibpng のフォルダに放り込んでもいいですが、
ただでさえ雑多に並んでるファイル群が、さらに輪をかけて雑多になるので。

筆者の場合は「本物のzlib.h のパス」を書いてあるだけの「擬似zlib.h」ファイルを作って
libpng フォルダに置いておくようにしています(そのほうがバージョンアップも楽だし)。
zlib.h  (libpng フォルダ用)
#include "../zlib/zlib.h"
わずか1行のファイルです。


さて、zlib と libpng の大量の cpp ファイルですが、そのリンク方法はいくつかあり、
それぞれメリット、デメリットがあります。

1.cpp ファイルをそのまま直にリンクする。
   libpng のコンパイル自体には多少時間がかかりますが、
   一番シンプルで、libpng の.lib 独立ライブラリや独立dllが作れます。

2.zlib をライブラリ形式(.lib)にコンパイルした後でリンクする。
   libpng のコンパイル時間は少なくて済みますが、.lib ライブラリを作った場合、
   アプリケーション側で zlib.lib と 別々にリンクする必要があります。
   (ただしバージョンアップ時、片方だけ再ビルドすればいいのでその場合は楽)

3.zlib をDLLにする。
   アプリケーション作成時にも、常にzlib.dll ファイルのディレクトリを確認する必要があり、筆者はお勧めしません。
   また当サイトではLoadLibraryを扱わないので、その他こまかいエラーについてもわかりません。
   (バージョンアップ時、ユーザにzlib.dll やlibpng.dll だけアップデートさせる?)


・・・
筆者はlibpng.lib というカンジの一個のまとまったライブラリがほしいのでです。
BCC Developer のプロジェクト内に zlib ファイル並べてるだけですケド。
libpng.lib というファイルを作った後、アプリケーション作成時リンク張って
PNG操作をできるようにしています。

こうするとアプリケーション自体のコンパイルが速いのです。

筆者はこんなカンジにしてます。出力ファイル名はpng.libとかのがいいかも知れませんがこの辺は完全に個人の好みです。
   

  
libpng.libがコンパイルできたら実際のアプリケーション作成に移ります。
アプリケーション作成時プロジェクト設定で作ったライブラリにリンクを張ります。


あとはアプリケーションでlibpngの関数が必要なファイルに"png.h"をincludeします。
これでlibpngの関数が使えます。





さて、環境設定がだいぶ手間ですがしかし、PNG仕様書をぐ〜っと1から10まで読むよりははるかに楽です。
次回がちょっと長いので、今回はここまでの解説で終わりです。

次回はPNG操作の手順です。


 007-09(2)  前へ←  ホームへ  →次へ  007-10(2)