【问题标题】:C++. Get RGB from byte arrayC++。从字节数组中获取 RGB
【发布时间】:2014-05-25 07:08:37
【问题描述】:

我已将 JPEG 格式读入 char 数组

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 图像已压缩,因此您必须首先正确解码数据。这不是微不足道的,而且有图书馆为此是有原因的。
  • 你确实应该试试图书馆。查看 libjpeg、FreeImage 或类似库
  • 您也可以将 jpeg 文件加载到您喜欢的绘图程序中,并将其保存为 bmp 文件。 BMP 文件未压缩,因此更容易提取 RGB 值。
  • 律师模式开启:即使是 BMP 也可能包含压缩数据。理论上...
  • @deviantfan 是的,理论上...但大多数绘图程序都相当实用:)

标签: c++ c file jpeg


【解决方案1】:

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

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

总结一下:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-12
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多