首页 > 解决方案 > 如何将 JPEG 图像加载到字符数组 C++ 中?

问题描述

我想将 JPEG 图像存储到普通的无符号字符数组中,我使用 ifstream 来存储它;但是,当我检查我存储的数组是否正确(通过再次将其重写为 JPEG 图像)时,我使用存储的数组重写的图像无法正确显示,所以我认为问题一定来了从我用来将图像存储到数组中的技术是不正确的。我想要一个可以完美存储的数组,以便我可以使用它再次重写回 JPEG 图像。如果有人能帮我解决这个问题,我将不胜感激!

int size = 921600;
    unsigned char output[size];
    int i = 0;

    ifstream DataFile;
    DataFile.open("abc.jpeg");
    while(!DataFile.eof()){
        DataFile >> output[i];
        i++;
    }
    /* i try to rewrite the above array into a new image here */
    FILE * image2;
    image2 = fopen("def.jpeg", "w");
    fwrite(output,1,921600, image2);
    fclose(image2);

标签: c++arraysimagejpeg

解决方案


显示的代码中有多个问题。

while(!DataFile.eof()){

始终是一个错误。有关详细说明,请参阅链接的问题。

    DataFile >> output[i];

根据定义,格式化提取运算符>>跳过所有空白字符并忽略它们。你的 jpg 文件肯定有字节 0x09、0x20 和其他几个字节,在它的某个地方,这会自动跳过并且不读取它们。

为了正确执行此操作,您需要使用 read() 和 gcount()来读取您的二进制文件。正确使用gcount()还应该导致您的代码正确检测到文件结束条件。


推荐阅读