Last update 1999/09/23 MNG/PNGを使ってみる (C)平山直之 無断転載は禁止、リンクはフリー 誤字脱字の指摘は歓迎 PNGとは ……ってこれはさすがに説明の必要はないですね。 ご存じない方は適当に検索してしらべるなどしてください。 MNGとは 簡単に言うと、レイヤ画像、アニメーションなど複数のイメージを必要とするオブジェクトを規定するフォーマットで、内部的にはPNGフォーマットが使われます。まだ正式な仕様としては定まっていないようです。 本家はこちら。日本語版を海賊版として訳されている方もいらっしゃいますね。 PNGを自作プログラムで利用する PNGフォーマットを自作プログラムから利用しようとする人の便宜を図って、libpngというPNGフォーマット操作用のライブラリが用意されています。以前Cマガジンで紹介されたので、ご存知の方も多いでしょう。Cライブラリですが
libpng で(ファイルストリームでなく)配列変数から直接 PNGデータを読み書きする方法がようやく分かったので、 その顛末。 libpng の使い方のページを探しても、ファイルポインタを渡すのばかりで メモリオブジェクトを直接渡すサンプルプログラムが殆ど見つかりません。 その上、見つけたモノもオーバーフロウの対策が入ってない(ように見える)ので、 libpng.txt を見直すことにしました。 伝説のお茶の間 libpng1.2.8 libpng.txt 訳 libpng にある入出力はpng_read() や png_write() を通して処理されます。 現行では fread() や fwrite() を呼ぶだけです。FILE * は png_struct 内部に記憶され、png_init_io() を経由して初期化されます。 I/O 命令を変更したいなら、png_init_io(
メモリ上に確保したPNGデータをlibpngに読み込んでもらってlibpngから画像データを取得してみる感じです。 /* read_png_from_mem.c * メモリ上にある、PNGデータをlibpngを介して読み込むサンプル。 * 参考: * http://d.hatena.ne.jp/yoya/20080714 * http://diary.awm.jp/~yoya/data/2008/07/14/png_test.c * http://gmoon.jp/png/ */ #include <stdio.h> #include <stdlib.h> #include <png.h> typedef struct my_png_buffer_ { unsigned char *data; /* PNGのデータが入ったメモリへのポインタ */ unsigned long data_le
■ 概要: 本プログラムは、zlib, libpng のコードを利用して、PNG ファイルの画像を、テクスチャマッピングで使用するサンプルプログラムです。 ■ 対象環境: Windows XP, 2000, NT 4.0, 3.51 / Me, 98, 95 UNIX ■ 動作確認環境: Windows 98 SE ■ 実行方法: 実行プログラムと同じディレクトリに syuri.png ファイルを用意してください。 この syuri.png ファイルをテクスチャマッピングの素材として使用します。 ■ 最新バージョン: 最新バージョンは、http://www.asahi-net.or.jp/~yw3t-trns/index.htm からダウンロードしてください。 ■ プログラムの扱い: 本ソフトウェアは、zlib, libpng を利用しており、PNG ファイルの読み込みが可能です。 コピー
■ 概要: 本プログラムは、zlib, libpng のコードを利用して、PNG ファイルの画像を、テクスチャマッピングで使用するサンプルプログラムです。 ■ 対象環境: Windows XP, 2000, NT 4.0, 3.51 / Me, 98, 95 UNIX ■ 動作確認環境: Windows 98 SE ■ 実行方法: 実行プログラムと同じディレクトリに syuri.png ファイルを用意してください。 この syuri.png ファイルをテクスチャマッピングの素材として使用します。 ■ 最新バージョン: 最新バージョンは、http://www.asahi-net.or.jp/~yw3t-trns/index.htm からダウンロードしてください。 ■ プログラムの扱い: 本ソフトウェアは、zlib, libpng を利用しており、PNG ファイルの読み込みが可能です。 コピー
#include <png.h> #include <pnginfo.h> // データ読込時のコールバック関数 int offset = 0; void ReadEndProcess( png_structp _pPng, png_bytep _buf, png_size_t _size ) { uint8* p = (uint8*)png_get_io_ptr( _pPng ); memcpy( _buf, p+offset, _size ); offset += _size; } bool IsPNG( const uint8* _pData ) { if( png_sig_cmp( _pData, 0, 8 ) != 0 ) { return false; } return true; } // テクスチャの読み込み。 bool Load( const uint8* _pData,
OpenGLでlibpngを利用してテクスチャを貼り付ける手順を調べたのでメモ。 OpenGLでテクスチャを利用する際、画像ファイルフォーマットのパースはOpenGLでサポートされないので自前でパースするか、あるいは既存のライブラリを利用するなどして読み込む必要がある。 C/C++で画像ファイルを扱うライブラリは例えば以下がある。 boost::gil C++のBoostライブラリに含まれるGeneric Image Library.一番汎用に見える。jpgやpngを扱うにはこのライブラリのほかにlibjpgやlibpngがインストールされている必要がある。ばりばりにテンプレートを使う。 libpng,libjpg C言語用の画像処理ライブラリ。 OpenCV Intelで作られた画像処理ライブラリ。 MIST 名古屋大学情報系のポスドクとか学生が作っているらしいライブラリ。詳しくはよく分
PNGを扱うのにlibpngを使ってみたくなりました。せっかくなので、libpng.dll をソースコードからコンパイルして作成してみることにしました。 libpng はその処理の大半を zlib に任せているので、先ずは zlib.dll を作成する必要があります。zlibのソースコードは本家からDLしてきます。現時点の最新は zlib-1.2.8.tar.gz でした。 解凍するとwin32ディレクトリに Makefile が複数準備されています。cygwin上のmingw(i686-w64-mingw32/x86_64-w64-mingw32)でコンパイルするには少し手を加える必要があります。ここではgcc用のMakefile(Makefile.gcc)を編集します。それと、cygwin32上のmingwでは libgcc を自動で入れてくれていた(気がする)のにcygwin64上の
LibPng: PNG image compression library Version 1.2.37 Description The libpng package contains a library of functions for creating and manipulating PNG (Portable Network Graphics) image format files. PNG is a bit-mapped graphics format similar to the GIF format. PNG was created to replace the GIF format, since GIF uses a patented data compression algorithm. Libpng should be installed if you need to
libpng is the official PNG reference library. It supports almost all PNG features, is extensible, and has been extensively tested for over 28 years. The home site for development versions (i.e., may be buggy or subject to change or include experimental features) is https://libpng.sourceforge.io/, and the place to go for questions about the library is the png-mng-implement mailing list. libpng is a
Windows上でzlibが必要になった。libpngを使おうとしたら依存関係の都合でzlibも欲しくなったのだ。 zlibのバイナリは例えばZlib for Windowsなどで入手できるものの、微妙に古い。そこで最新版だと思われるzlib-1.2.7をMinGW*1でビルドすることにした。 ソースコードはhttp://zlib.net/から入手。取得したzlib-1.2.7.tar.bz2を伸張・展開するとzlib-1.2.7というディレクトリができるので、コマンドプロンプトでその中に入る。 単純にビルドするだけなら以下でOK。 make -f win32\Makefile.gcc all 今回は高速化の為にアセンブラコードcontrib/asm686/match.Sを使い、且つ若干の最適化オプションを追加してビルドする。match.Sを使うとPentiumより前のCPUでは動作しなく
id:eel3:20120615:1339768796 にてMinGWでzlibをビルドした理由はlibpngを使う為だ。 zlibと同様にlibpngのバイナリもLibPng for Windowsで入手できるものの、こちらも微妙に古い。しかもセキュリティホールが残っているバージョンだ。そこでlibpngも最新版をMinGW*1でビルドすることにした。 当初はlibpng-1.5.10を使う予定だったものの、諸事情によりlibpng-1.2.49に変更した。どちらも一通りビルドしたので記録を残しておく。 なおソースコードは双方ともhttp://www.libpng.org/pub/png/libpng.htmlから入手した。 libpng-1.2.49 libpng-1.2.49.tar.xzを取得。伸張・展開するとlibpng-1.2.49というディレクトリができるので、コマンドプロン
前回まで画像ファイルの入出力について、ファイルフォーマットの詳細説明から、 入出力を全て自前で実装する場合の説明を行ってきた。 今回は画像フォーマットについて理解した上で、読み書きの処理を一から全て実装するのではなく、 オープンソースのライブラリを利用する方法を説明する。 今回説明するのはPNG画像の入出力だ。 PNG 形式の登場は1996年であり、 コンピュータ黎明期から存在しているフォーマットというにはやや歴史は浅いが、 現在では、おそらく画像を扱うソフトウェアで、 扱えないものを探すほうが難しいぐらい一般的に普及している画像形式だろう。 PNG は Portalbe Network Graphics の頭字語(アクロニム)とされる。 また、かつて可逆圧縮の画像フォーマットとして インターネットを中心に普及した GIF 形式の特許問題を発端として開発された経緯から、 PNG is No
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く