我的程序找到所有50个jpgs。但是,图像不完整'。有些是一半恢复,有些不到四分之一,有些只是完全灰色。当我打开一个jpeg时,它在打开时显示为灰色,以十六进制表示大多数是彩色像素,这没有任何意义。我试图从各个角度找到这个错误。
任何人都可以帮助我理解为什么我的图片已被损坏'
// 000.jpg
int j = 0;
// storing 000.jpg
char jpeg[8];
// buffer
unsigned char bf[512];
// FILE pointer
FILE *img = NULL;
// reading into memory card file
while(fread(bf, 512, 1, inptr) == 1)
{
if (bf[0] == 0xff && bf[1] == 0xd8 && bf[2] == 0xff && (bf[3] & 0xf0) == 0xe0)
{
sprintf(jpeg, "%03i.jpg", j);
img = fopen(jpeg, "w");
do
{
fwrite(bf, 512, 1, img);
fread(bf, 512, 1, inptr);
}
while(bf[0] != 0xff && bf[1] != 0xd8 && bf[2] != 0xff && (bf[3] & 0xf0) != 0xe0);
fclose(img);
j++;
// fread is going to read it again
fseek(inptr, -512, SEEK_CUR);
}
}
fclose(inptr);
return 0;
}
答案 0 :(得分:0)
确保将“ b”标志传递给fopen。例如:
fopen(jpeg, "wb");
否则,标准库将(通常无济于事)自动为您转换行尾(例如,在Windows中\ n变成\ r \ n),将其应用于二进制文件会导致损坏。
使用上面的模式说明符,文件将作为文本文件打开。为了将文件打开为二进制文件,模式字符串中必须包含“ b”字符。