2012-02-19 10 views
0

イメージファイル(PIXELIMAGEFORMAT)を読み込もうとして多くの問題が発生しています。カスタムイメージ形式をロードするC/C++バイナリ

Bytes 0-15: PIXELIMAGEFORMAT (The Magic Header Value) 
Bytes 16-17: Width   (Formatted as 0000 xxxx xxxx xxxx) 
Bytes 18-19: Height   (Formatted as 0000 xxxx xxxx xxxx) 
Bytes 20-23: Bits Per Pixel (Formatted as 1000 1000 1000 1000) 
Bytes 24-31: NULL    (All 0's) 
Bytes 32-END: 32-Bit RGBA  (8 Bit Red, 8 Bit Green, 8 Bit Blue, 8 Bit Alpha) 

私のイメージのロードコードは次のとおりです:

char* vimg_LoadPIXELIMAGE(char* filePath) { 
    FILE* file; 
    file = fopen(filePath, "rb"); 
    if (file == NULL) return "a"; 

    char* header = (char*)malloc(32); 
    fread(header, sizeof(char), 32, file); 
    char* magicHeader = (char*)malloc(16); 
    const char magic[] = { 
    'P', 'I', 'X', 'E', 'L', 
    'I', 'M', 'A', 'G', 'E', 
    'F', 'O', 'R', 'M', 'A', 'T' 
    }; 
    strncpy(magicHeader, header, 16); 

    if (magicHeader != magic) return "b"; 

    unsigned short width; 
    unsigned short height; 

    memcpy(&width, header + 16, 2); 
    memcpy(&height, header + 18, 2); 

    unsigned int fileSize = width * height; 

    char* fullbuffer = (char*)malloc(fileSize+32); 
    char* buffer = (char*)malloc(fileSize); 
    fread(fullbuffer, 1, fileSize + 32, file); 
    memcpy(buffer, fullbuffer + 32, fileSize); 

    return buffer; 
} 

私のメインのコードは、私のイメージフォーマットがある

(終了文字列なし)PIXELIMAGEFORMATにマジックヘッダの値を比較し過ぎて

を得ることはありません機能は:

void main(int argc, char* argv) { 
    char* imgSRC; 
    imgSRC = vimg_LoadPIXELIMAGE("img.pfi"); 
    if (imgSRC == "a") 
    printf("File Is Null!\n"); 
    else if (imgSRC == "b") 
    printf("File Is Not a PIXELIMAGE!\n"); 
    else if (imgSRC == NULL) 
    printf("SEVERE ERROR!!!\n"); 
    else 
    printf(imgSRC); 
    system("pause"); 
} 

現在は何ですか?SHOULD doは、各バイナリピクセルのchar値を出力します。

希望する場合は、現在の画像ファイルも投稿できます。

ありがとうございます!

  • エイドリアンコリャド

答えて

1

あなたは、バッファ自身のバッファのアドレスを比較していない、あなたがmemcmp使用する必要があります。

if (memcmp(magicHeader, magic, 16) != 0) return "b"; 

をこれが答えではありませんが、

あなたはアドレスを比較しますNULLは、私はチェックの順序を変更するだろう、返されることがあるため、また

if (*imgSRC == 'a') 

if (imgSRC == NULL) 
    printf("SEVERE ERROR!!!\n"); 
else if (*imgSRC == 'a') 
    printf("File Is Null!\n"); 
else if (*imgSRC == 'a') 
    printf("File Is Not a PIXELIMAGE!\n"); 
else 
    printf(imgSRC); 
+0

'* imgSRC'がメモリ位置であるため、動作しないだろうとルあなたは値を比較する必要があります。 'imgSRC'はchar配列です。とにかく、それはどこにエラーではありません。エラーは、 'magicHeader'と' magic'を比較するときに発生します。どちらも* DO *は同じ値を持ちます... –

+0

また、NULLは特に返されません。ヌル値。コードを実行するたびに、「ファイルはピクチャではありません!」というメッセージが表示されます。文字列。 –

+0

@AdrianCollado - 編集 – MByD

関連する問題