|
// とりあえずインクルード #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を使ってみる |
| << 前記事(2008/12/05) | トップへ | 後記事(2008/12/27)>> |
| タイトル (本文) | ブログ名/日時 |
|---|
| 内 容 | ニックネーム/日時 |
|---|
| << 前記事(2008/12/05) | トップへ | 後記事(2008/12/27)>> |