現在地 >> メニュー >> 基本編06 >> png形式の画像



png形式の画像


png形式の画像を読み込む場合、OpenCV、glpngなどある。
(OpenCV(ver 2.0時点)はαチャネルは無視して3チャネルで読み込んでいる)

glpngライブラリ


glpngライブラリはpng形式の画像を読み込み、テクスチャにコンバートしてくれる。
また、アルファチャネルもサポートしている。

このあたりからダウンロードできる。
※リンク切れなどがある

メインサイト

導入方法


glpngは2000年にリリースされた後に、メンテナンスがされていない模様で、
VS2005やVS2008では
  • 「ファイル LIBC.lib を開くことができません」
  • 「外部シンボル "__iob" は未解決です」
などエラーをはいて使う事が出来ない。

そこで、VS2005や、VS2008でライブラリを再ビルドして「glpng.lib」、「glpngd.lib」を作成する必要がある。

glpngをビルドして「libファイル」を作る


まずは「glpng.zip」をダウンロードし解凍。

[1]:ヘッダファイルのコピー

その中にある、「glpng.h」を「glut.h」などと同じ場所(「gl」というフォルダ名の所)にコピー

[2]:visual Studioの起動

次にVisual Studioを起動し、プロジェクト名を「glpng」で新規プロジェクトを作成。

「アプリケーションの設定」で「スタティックライブラリ」にチェックをいれ、「プリコンパイル済みヘッダー」のチェックを外す。

[3]:ファイルをコピー


ダウンロードした「glpng\src」フォルダ内
  • glpng.c
  • zlibフォルダ内のファイル
  • pngフォルダ内のファイル
プロジェクトを作成して出来上がったフォルダ「Projects\glpng\glpng」にコピー。

[ソースファイル]→[右クリック]→[追加]→[既存の項目]で先ほどコピーしたファイルを全て追加。

[4]:出力ファイルの設定


次に
[プロジェクト]→[プロパティ]→...から
左上の構成がDebugである事を確認して「出力ファイル」部分を

「$(OutDir)\$(ProjectName).lib」
から
「$(OutDir)\$(ProjectName)d.lib」
に書き換える


Debug構成でやる設定

また、「Release構成」の設定で、
[プロジェクト]→[プロパティ]→...から[デバッグ情報の形式]を「無効」にする。

Release構成でやる設定

※これをやらないと、「Releaseモード」で「libファイル」を使った時に、
「デバッグ情報がないものとして、オブジェクトにリンクします」
のような警告がでるようだ。

【メモ】
もし作成した「glpng」プロジェクトを削除してしまう場合は、
「Debug構成」の方の「デバッグ情報の形式」を「C7 互換 /Z7」にする必要がある。
※プロジェクトを削除すると「glpng(d).lib」に書き込まれた「pdbファイル」の所在(パス)が無効になるため

[5]:ビルド


あとは、[ビルド]→[バッチビルド]→[すべて選択]クリック後
[ビルド]をクリックすればよい。

すると、「Releaseフォルダ」「Debugフォルダ」が作成され、
それぞれの中に「glpng.lib」と「glpngd.lib」ができている。

インストール


「glpng.lib」と「glpngd.lib」を「glut32.lib」と同じ場所に配置する。
例えば「VS2008 Express SP1」の場合は「C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib」になるはず

使い方


ヘッダをインクルードするのみで使用可能。
※内部で「#pragma命令」をしている

... ...
#include <gl/glut.h>
#include <gl/glpng.h> //後ろでインクルード

//---------- テクスチャID ---------------//
GLuint texture[1];


//-------- 画像を読み込んでテクスチャのする ------------//
bool LoadGLTextures()
{
	pngInfo info;
	texture[0] = pngBind("test.png", PNG_NOMIPMAP, PNG_SOLID, &info, GL_CLAMP, GL_NEAREST, GL_NEAREST);
	if (texture[0] == 0) //「0」の場合失敗
	{
		return false;
	}

	return true;
};
... ...

この場合、
ミップマップなし、α値なし、繰り返し方法が「GL_CLAMP」で、拡大・縮小のフィルタが「GL_NEAREST」
のテクスチャができる。

「glpng.h」を「glut.h」より先にインクルードすると、「#defineマクロ」に関する警告が出る。
「#defineマクロの再定義」に関するものだが、同じマクロの定義をしているのだけなのでたぶん問題ない。

警告が気になる場合は、「glpng.h」を「glut.h」の後にインクルードする。

リファレンス


詳しい使い方は あるいは、
ダウンロードしたフォルダ内にある「glpng.htm」に書いてある。

サンプルコード



これ以降は以前の記事です

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます