【发布时间】:2012-03-09 23:10:23
【问题描述】:
我在尝试加载图像文件 (PIXELIMAGEFORMAT) 时遇到了很多问题。该代码无法通过将魔术头值与PIXELIMAGEFORMAT 进行比较(没有字符串结尾字符)
我的图片格式是:
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;
}
我的主要功能是:
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");
}
目前它应该做的是打印出每个二进制像素的字符值。
如果你愿意,我也可以发布我当前的图像文件。
谢谢!
- 阿德里安·科拉多
【问题讨论】: