使用BuffereImage在Java中读写JPEG

使用BuffereImage在Java中读写JPEG,java,bufferedimage,dct,Java,Bufferedimage,Dct,我有一个程序,使用BuffereImage类中的getRGB方法读取图像,然后我执行一系列步骤,将DCT变换为8x8块,量化,然后反转,然后使用setRGB使用BuffereImage将数据再次写回JPEG文件 这是一个很好的图像效果完美。但是,当我运行测试仪从原始图像和形成的图像打印出8x8系数的最后一次量化时,值似乎是1还是2 例如: 原始数量。系数:-27、2、1、0、-1、0、0、0等 合成量。系数:-28、1、0、0、0等 有人知道为什么会发生这种情况吗,或者这是正常的吗? 我希望这在

我有一个程序,使用BuffereImage类中的getRGB方法读取图像,然后我执行一系列步骤,将DCT变换为8x8块,量化,然后反转,然后使用setRGB使用BuffereImage将数据再次写回JPEG文件

这是一个很好的图像效果完美。但是,当我运行测试仪从原始图像和形成的图像打印出8x8系数的最后一次量化时,值似乎是1还是2

例如:

原始数量。系数:-27、2、1、0、-1、0、0、0等

合成量。系数:-28、1、0、0、0等

有人知道为什么会发生这种情况吗,或者这是正常的吗? 我希望这在问题上是清楚的。
谢谢

我不熟悉您所做的具体计算,但这听起来像是一个精度问题。您如何在内部存储数据?如果您还没有使用double,请尝试使用double来执行计算。实际上,我没有使用double,但无论如何,生成的图像是否与原始图像具有相同的值?同样,我不熟悉您正在进行的精确计算,但例如:如果您使用矩阵,则将其反转,然后再将其反转-如果精度不够,计算容易出现舍入误差,所得矩阵可能与原始矩阵不同。可能在概念上与你所经历的相似。试着用双精度进行所有计算,确保你在任何地方都不舍入,看看这是否重要。啊,我刚刚用双精度对所有整数进行了重新排列,我只在表示返回像素之前进行了四舍五入,现在我得到了准确的结果。非常感谢你的帮助