C++。从字节数组中获取RGB

标签 c++ c file jpeg

我已将 JPEG 格式读入字符数组

char* FileName = "NewI.jpg";
FILE* ImageFile = fopen(FileName, "rb");
if (!ImageFile) {
    return -1;
}
fseek(ImageFile, 0, SEEK_END);
unsigned long int FileLength = ftell(ImageFile);
fseek(ImageFile, 0, SEEK_SET);
char* Bytes = (char*)malloc(FileLength * sizeof(char));
fread(Bytes, FileLength, sizeof(unsigned char), ImageFile);
fclose(ImageFile);

如何获取每个像素的 RGB?

最佳答案

这太长了,无法容纳评论,但旨在作为评论。

您面临的问题是 JPEG 文件中的原始值和 RGB 值之间存在冗长的步骤序列。

总结一下:

  1. 霍夫曼解码
  2. 游程解码
  3. 反量化
  4. 保留离散余弦变换
  5. 上采样
  6. 从 YCbCr 色彩空间到 RGB 的转换

对于渐进式和顺序 JPEG 流,第一步必须以不同的方式处理。

除非您想要进行大量开发,否则您需要使用库来为您执行这些步骤(如前面所建议的)。读取 JPEG 需要位级编程和绝对完美。处理中的一位错误将完全导致解码失败。

关于C++。从字节数组中获取RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23852907/

相关文章:

c++ - 为什么在 C++ 中可以在头文件中定义成员函数而不是自由函数?

c++ - 你如何复制一个对象?

c++ - 基类的虚拟 friend 函数?

c - 将文件中的数据读入 C 中的数组错误

c - 进程组内的流水线

Javascript - 使用 <script> 标签包含另一个脚本?

python - python中根据文件名对文件进行排序

c++ - C++ 中的全局变量

c - 传递双指针作为函数参数

java - 在java中将文件作为附件发送