我正在使用BufferedImage
类将图像作为像素读入,然后我使用位移来将其适当的组件放入单独的int数组中。这很好用。
我已使用此引用site手动执行像素数组的DCT功能。
使用的方法:forwardDCT()
,quantitizeMatrix()
,dequantitzeMatrax()
,inverseDCT()
反馈到生成的图像数组中以重建JPEG文件,然后我使用BufferedImage的write()
方法将像素数据作为图像写回。
这完美无缺,我可以查看图像。 (我用来压缩视觉效果的价值更好。)
我的问题是,有没有办法将量化系数写为压缩值为JPEG?
因为BufferedImage write()方法用于输入像素数据,而不是系数数据?
希望这很清楚。
由于
答案 0 :(得分:2)
最终,DCT计算只是整个JPEG编码过程中的一个步骤。完整的实现还必须处理量化,霍夫曼编码,并符合JPEG标准。
Java有效地为您提供了一个JPEG编码器接口,可以让您执行保存图像等有用的操作。
ImageIO.write()用于JPEG图像的ImageWriter取决于您的系统。 JPEG的默认ImageWriter只允许您使用JPEGImageWriteParam类(http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageWriteParam.html)更改一些影响量化和编码的设置。
将手工制作的DCT系数转换为JPEG文件可能涉及编写整个JPEG库。如果您不想完成所有工作,那么您可以修改现有库的源,以便它使用您的DCT系数。
答案 1 :(得分:1)
在DCT之前。 。 。
虽然JPEG不了解颜色,但JPEG文件格式使用YCbCr颜色空间是正常的。如果您正在考虑编写JPEG文件,则需要先进行此转换。
量化之后。 。 。
系数是运行长度编码的。这是您必须添加的一个步骤。这是JPEG编码中最复杂的部分。