No.007 - 10 PNGファイル(1) PNG操作の準備 |
PNG を扱うための準備です。 libpng の導入方法を説明します。 |
png.h 訳 | libpng.txt 訳 | readme 訳 | LISENCE 訳 | TODO 訳 |
・ 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 と 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がコンパイルできたら実際のアプリケーション作成に移ります。 アプリケーション作成時プロジェクト設定で作ったライブラリにリンクを張ります。 あとはアプリケーションでlibpngの関数が必要なファイルに"png.h"をincludeします。 これでlibpngの関数が使えます。 |
|||||||||
|
|||||||||
さて、環境設定がだいぶ手間ですがしかし、PNG仕様書をぐ〜っと1から10まで読むよりははるかに楽です。 次回がちょっと長いので、今回はここまでの解説で終わりです。 次回はPNG操作の手順です。 |
|||||||||