2012-04-04 27 views
1

私はlibpngを初めて使用しました。ドキュメントは本当に混乱しています。 以下は動作していない私のコードですが、その理由がわかりません。 誰かが私を正しい方向に向けることができますか?または別の( "簡単")ライブラリを示唆していますか?はlibpngでpngファイルを読むことができません

  1. png_create_info_struct

  2. png_infopを作成png_create_read_struct

  3. png_structpを作成rbモードで

  4. fopenでファイルを開く:私はのlibpngを理解する方法

    領域を割り当てる

  5. が明らか

    #include <stdio.h> 
    #include <png.h> 
    
    int main(int argc, char **argv) 
    { 
        int x, y; 
        int height, width; 
    
        png_structp png_ptr; 
        png_infop info_ptr; 
    
        png_bytep *row_pointers; 
    
        FILE *fp = fopen("test.png", "rb"); 
        { 
         if (!fp) 
          printf("File could not be opened for reading"); 
    
         png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 
    
         info_ptr = png_create_info_struct(png_ptr); 
    
         png_read_info(png_ptr, info_ptr); 
         width = png_get_image_width(png_ptr, info_ptr); 
         height = png_get_image_height(png_ptr, info_ptr); 
    
         row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height); 
         for (y=0; y<height; y++) 
          row_pointers[y] = (png_byte*)malloc(png_get_rowbytes(png_ptr,info_ptr)); 
    
         png_read_image(png_ptr, row_pointers); 
    
         fclose(fp); 
        } 
    
        for (y=0; y<height; y++) 
        { 
         png_byte *row = row_pointers[y]; 
         for (x=0; x<width; x++) 
         { 
          png_byte* ptr = &(row[x*4]); 
          printf("Pixel at position [ %d - %d ] has RGBA values: %d - %d - %d - %d\n", x, y, ptr[0], ptr[1], ptr[2], ptr[3]); 
         } 
        } 
    } 
    
+1

正確には動作しません。 – user7116

+0

'png_create_read_struct'が失敗します。コンパイラはエラーを何も書いていないので、何もしません。 – user1281071

+0

どうしてですか?より具体的にする必要があります。 – user7116

答えて

1

データを読み込み、/画像チャンクの読み方場所についてlibpngをに渡された情報はありません。使用:

... png_init_io(png_ptr、fp); png_read_info ..

+2

彼はまだ 'png_ptr'を' png_init_io'を使うために非nullにする必要があります。 – user7116

+0

@sixlettervariables:あなたは正しいですが、彼はすぐにその問題に直面します:-) – udslk

4

同様に、png_create_read_structに失敗しました。 (私の場合には、標準エラー出力はどこにも行かない)、さらに情報なしでデバッグするのは難しいことですが、幸い自分のエラーや警告の機能を提供することができます。

これを使用して
void user_error_fn(png_structp png_ptr, png_const_charp error_msg); 
void user_warning_fn(png_structp png_ptr, png_const_charp warning_msg); 

、アプリケーションが使用していたことを示す印刷役立つ誤りをlibpngを実行時に見つかったlibpngとは異なるバージョンのヘッダです。謎解き。

個々の問題は異なる場合がありますが、libpngのエラーレポートを使用すると洞察が得られるはずです。

関連する問題