gpt4 book ai didi

c - 如何在c中打开几个jpg图像?

转载 作者:行者123 更新时间:2023-12-04 10:48:32 25 4
gpt4 key购买 nike

更新 :
感谢您的帮助,我想通了!我应该在我使用时增加 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);
}
}
}

最佳答案

首先,我认为使用 memmem(3) 完全重写会更成功。函数( memmem(3) 是类似于 strstr(3) 的 GNU 扩展,但适用于任意内存,而不仅仅是 C 字符串。如果 memmem(3) 对您不可用,编写自己的版本并不难。)。当然,使用 memmem(3)如果嵌入的 JPEG 文件包含与这些 header 字节匹配的数据,这仍然是一个问题。我不知道这是可能的,但我也不知道这是不可能的。当心。 :)

随着时间的推移,这个循环看起来只是维护起来很麻烦,这就是为什么我提出了一种完全不同的方法。但是,如果您致力于这种方法,请注意您将多次复制 header 字节;我希望您的输出文件的前几个字节实际上是:0xff 0xd8 0xff 0xe0 0xd8 0xff 0xe0 -- 你还没踩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);


使用此代码:
            putc(chars[i++], output_file);
putc(chars[i++], output_file);
putc(chars[i++], output_file);
putc(chars[i++], output_file);

( i++ 是错误修正,因为您没有为每个字符向前移动 i;删除 input_char 变量只是清理,因为我发现使用该变量比不使用它更难阅读。)

关于c - 如何在c中打开几个jpg图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5710572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com