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値を出力します。
希望する場合は、現在の画像ファイルも投稿できます。
ありがとうございます!
- エイドリアンコリャド
'* imgSRC'がメモリ位置であるため、動作しないだろうとルあなたは値を比較する必要があります。 'imgSRC'はchar配列です。とにかく、それはどこにエラーではありません。エラーは、 'magicHeader'と' magic'を比較するときに発生します。どちらも* DO *は同じ値を持ちます... –
また、NULLは特に返されません。ヌル値。コードを実行するたびに、「ファイルはピクチャではありません!」というメッセージが表示されます。文字列。 –
@AdrianCollado - 編集 – MByD