我已将 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 值之间存在冗长的步骤序列。
总结一下:
- 霍夫曼解码
- 游程解码
- 反量化
- 保留离散余弦变换
- 上采样
- 从 YCbCr 色彩空间到 RGB 的转换
对于渐进式和顺序 JPEG 流,第一步必须以不同的方式处理。
除非您想要进行大量开发,否则您需要使用库来为您执行这些步骤(如前面所建议的)。读取 JPEG 需要位级编程和绝对完美。处理中的一位错误将完全导致解码失败。
关于C++。从字节数组中获取RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23852907/