|
更新:
谢谢您的帮助,我知道了!我应该在使用时增加i
putc(input_char, output_file);
input_char = chars[i+1];
putc(input_char, output_file);
input_char = chars[i+2];
putc(input_char, output_file);
input_char = chars[i+3];
putc(input_char, output_file);
我有一个包含几个jpeg图像的文件。我需要将每个图像放在单独的文件中。我已经将给定的文件放入:
unsigned char* chars;
我等于
chars = (unsigned char*) malloc (sizeof(unsigned char)*count+1);
(count是总字节数)
这是我代码的很大一部分。在尝试浏览整个文件之前,我试图只使一张图像工作。我以为这样可以,但是我无法获得图像。我得到一个名为image.jpg的文件,其中有很多字节,但是没有图片。似乎文件的开头是错误的,但是我不确定。任何建议或技巧将不胜感激。提前致谢。
FILE* output_file;
unsigned char input_char;
for(i=0; i <=count-3 && flag2==0; i++)
{
input_char = chars[i];
if ((chars[i] == 0xff ) &&
(chars[i+1] == 0xd8) &&
(chars[i+2] == 0xff) &&
(chars[i+3] == 0xe0))
{
if (flag==1) {
puts(\"closing file I\");
fclose(output_file);
puts(\"closed I\");
flag2 = 1;
break;
}
pictures++;
puts(\"New pic! I\");
puts(\"Opening file I!\");
output_file = fopen(\"image.jpg\", \"wb\");
putc(input_char, output_file);
input_char = chars[i+1];
putc(input_char, output_file);
input_char = chars[i+2];
putc(input_char, output_file);
input_char = chars[i+3];
putc(input_char, output_file);
flag = 1;//there is at least one image, so it will need to be closed
}
else if ((chars[i] == 0xff) &&
(chars[i+1] == 0xd8) &&
(chars[i+2] == 0xff) &&
(chars[i+3] == 0xe1))
{
if (flag==1) {
puts(\"closing file II\");
fclose(output_file);
puts(\"closed II\");
flag2 = 1;
break;
}
pictures++;
puts(\"New pic II!\");
puts(\"Opening file! II\");
output_file = fopen(\"Image.jpg\", \"wb\");
putc(input_char, output_file);
input_char = chars[i+1];
putc(input_char, output_file);
input_char = chars[i+2];
putc(input_char, output_file);
input_char = chars[i+3];
putc(input_char, output_file);
flag = 1;//there is at least one image, so it will need to be closed
}
else
{
if (flag==1) //There is an image opened
{
putc(input_char, output_file);
}
}
}