zlib ライブラリを使用して PNG ファイルを解凍するにはどうすればよいですか? gcc コンパイラで C を使用して PNG ファイルを読み取る必要があります。
4 に答える
libpngを使用しないのはなぜですか? PNG ファイル形式は非常に単純ですが、考えられるさまざまなバリエーションとエンコード方法があり、すべてのケースを確実にカバーするのはかなり面倒です。libpng のようなものは、すべての変換などを自動的に処理します。
これが宿題であり、実際に標準 C ライブラリにしか制限されていない場合は、公式の PNG ファイル形式の仕様 ( http://www.w3.org/TR/PNG/ ) を確認する必要があります。しかし、本当に PNG ファイルをデコードする必要があるのでしょうか? なんらかの方法で表示するだけでよい場合は、間違った道を進んでいます。
一般的な PNG ファイルのデコーダーを作成するのはかなり複雑で時間がかかりますが、単純なファイルの場合はそれほど悪くはありません。実際、PNG 形式ではその一部を圧縮できるため、標準の C ライブラリのみを使用して圧縮するには、gzip 解凍を実装する必要があります (中級の学部課程の妥当な宿題ですが、私の推測では、これがあなたに割り当てられる前に、圧縮アルゴリズムについて議論するのに多くの時間を費やしたでしょう)
ただし、非圧縮、非インターレースの PNG ファイルに制限すれば、それほど難しくありません。Python でデコーダーを書いたことがありますが、簡単なケースだけを数時間で処理できたので、C でも実行できると確信しています。
PNGファイルを読み書きするための基本的なJavaライブラリを一度コーディングしました:http://code.google.com/p/pngj/
パレット化された画像はサポートしていませんが、 [更新: 現在すべての PNG バリアントをサポートしています] それは別として、かなり完全でシンプルで、コードに外部依存関係がありません (つまり、zip 解凍を含む標準の JSE API のみを使用します)。そして、コードが利用可能です。あまり手間をかけずにCに移植できると思います。
おそらく、バイナリ ファイル形式がどのように機能するかを読み、テキスト エディタの代わりに 16 進エディタを使用してファイルを確認する必要があります。一般に、前述のように libpng を使用して png ファイルを処理する必要がありますが、自分でデコードしたい場合は、多くの読み取りを行う必要があります。
これを読むことをお勧めします http://www.libpng.org/pub/png/book/chapter13.html