所以我试着写一个简单的bmp到jpeg图像转换器程序。您可能知道,jpeg压缩,DCT,量化和熵编码涉及3个主要步骤。我想将在每个中间阶段计算的值写入文件。
现在我的问题是在我将每个像素的RGB值转换为YUV格式并将其存储到3个独立的2-D阵列后,是否在每个阵列上计算了DCT?因此给我3个不同的阵列,并在它们上面应用了DCT?如果这是正确的,那么下一步将是量化对应于Y,U和V的每个阵列。然后必须对这些2-D阵列中的每一个应用熵编码。
如何将这3个数组组合/写入文件,以便它们可以作为.jpeg文件读取?
答案 0 :(得分:3)
首先,我建议您下载jpeg specifications。
您必须为每个颜色通道独立计算DCT:因此对于YUV颜色空间,您必须为每个Y 8x8块计算一个DCT,一个用于U,一个用于V通道。
大多数时候U和V通道都是二次采样的:这意味着每个U和V有2或4个Y块。
应用DCT后,您可以量化每个DCT:不同的通道通常需要不同的量化表(jpeg规范建议正确的表格)。
然后使用霍夫曼算法对量化结果进行编码:您可以将交错的每个颜色通道(1到4个Y块后跟1个U和1个V块)或线性模式(首先全部)转储到jpeg流Y块,然后是所有的U,然后是V)。
jpeg流可能包含RST标记,在丢失字节的情况下重新同步解码。
但你真的需要有jpeg规范才能完成这项任务。