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

C++ C++;。从字节数组中获取RGB,c++,c,file,jpeg,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 = (cha

我已将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需要位级编程和绝对完美。处理过程中的一位错误将完全导致解码中断。

    你不会,反正也不是那么容易。请记住,JPEG图像是压缩的,因此您必须首先正确解码数据。这并不是小事,这是有库的原因。你确实应该尝试一个库。查看libjpeg、FreeImage或类似的库。您也可以将jpeg文件加载到您喜爱的绘图程序中,并将其另存为bmp文件。BMP文件是未压缩的,因此提取RGB值更容易。律师模式开启:即使BMP也可能包含压缩数据。理论上…@是的,理论上。。。但大多数绘画程序都相当实用:)