プログラム数学CGメモ

アクセスカウンタ

help リーダーに追加 RSS VC++2005 PNGの読み込み

<<   作成日時 : 2008/12/12 14:11   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

// とりあえずインクルード
#include "png.h"

int LoadPNG()
{
// PNGファイルのオープン
FILE *fp = fopen("C:\\test.png", "rb");
if(fp == NULL)
return 0;

// PNGのヘッダ(PNGファイルかどうかのチェック用)
char header[8];
fread(header, 1, 8, fp);

// ヘッダがPNGファイルのものかチェック
if (png_sig_cmp((png_bytep)header, 0, 8))
return 0;

// PNGを扱うためのポインタ
png_structp png_ptr; // png_structのポインタ
png_infop info_ptr; // 同じくpng_infoのポインタ
png_infop end_info;

// png_ptrのメモリ確保
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr)
return (0);

// info_ptrのメモリ確保
info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
return (0);
}

// end_infoのメモリ確保
end_info = png_create_info_struct(png_ptr);
if (!end_info) {
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
return (0);
}

// エラーならここにジャンプしてくる
// setjmpが0以外の戻り値で帰ってきたらエラー
if (setjmp(png_jmpbuf(png_ptr)))
{
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
fclose(fp);
return 0;
}

// ファイルポインタのセット(このファイルから読み込む)
png_init_io(png_ptr, fp);

// 事前に読み進めた分(ヘッダの確認)を知らせる
png_set_sig_bytes(png_ptr, 8);

// 画像情報の取得
png_uint_32 width,height;
int bit_depth,color_type,interlace_type;
int compression_type,filter_type;

png_read_info(png_ptr,info_ptr);
png_get_IHDR(png_ptr,info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, &compression_type, &filter_type);

// RGBAの画像だけ読み込む
if(color_type == PNG_COLOR_TYPE_RGB_ALPHA)
{
// 画像用メモリの確保
png_bytep* image_row = new png_bytep[height];
for(int i = 0;i < height;i++)
image_row[i] = new png_byte[width * 4];

png_read_image(png_ptr,image_row);
png_read_end(png_ptr,end_info);

// 確認
for(int i = 0;i < height;i++)
for(int j = 0;j < width;j++)
{
CString str = "";
str.Format("画素はR%d,G%d,B%d,A%d",image_row[i][j*4],image_row[i][j*4+1],image_row[i][j*4+2],image_row[i][j*4+3]);
MessageBox(NULL,str,"画素",0);
}
}
// メモリ開放
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
}

伝説のお茶の間
MNG/PNGを使ってみる

設定テーマ

関連テーマ 一覧

月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文