c++ - 如何将 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);
解决方案
显示的代码中有多个问题。
while(!DataFile.eof()){
这始终是一个错误。有关详细说明,请参阅链接的问题。
DataFile >> output[i];
根据定义,格式化提取运算符>>
跳过所有空白字符并忽略它们。你的 jpg 文件肯定有字节 0x09、0x20 和其他几个字节,在它的某个地方,这会自动跳过并且不读取它们。
为了正确执行此操作,您需要使用 read() 和 gcount()来读取您的二进制文件。正确使用gcount()
还应该导致您的代码正确检测到文件结束条件。
推荐阅读
- http - 如何在终端中使用命令行将我的 https 更改为 http?
- java - 如果我的验证器需要在验证之前调用数据库,我应该让数据库处理这个验证吗?
- postgresql - 如何解决 Scala 中的 GC 超限问题?
- kubernetes - io.fabric8.kubernetes.client.KubernetesClientException:禁止!配置的服务帐户无权访问
- reactjs - 如何在反应中实现 xlink:title
- holoviews - Holoviews 布局中每个绘图的不同颜色
- json - AWS Api Gateway - 在 JSON\ 正文中获取空格
- vim - 如何在spacevim中将'Esc'键映射到'jk'
- python - 使用列表理解加速“任何”
- anylogic - Anylogic:使用 Logging 跟踪 AGV 距离