Java ImageIO.read()和BitmapFactory.decodeByteArray()的

Java ImageIO.read()和BitmapFactory.decodeByteArray()的,java,android,bitmapfactory,Java,Android,Bitmapfactory,我现在正在开发一个小型的服务器客户端应用程序,服务器在计算机上,客户端在安卓设备上。在某个时刻,我希望设备检查它拥有的图像是否是最新的,并使用尽可能少的数据,因此我编写了一些代码来为图像创建一个校验和,这将使客户端更容易确定它的pic是否是最新的。 (我本来打算发送代码,但那太长了,所以我会先尝试不发送代码) 在伪代码中: long getCheckSumFor(Image i) { long xVal; long yVal; count x from 0 to i.wi

我现在正在开发一个小型的服务器客户端应用程序,服务器在计算机上,客户端在安卓设备上。在某个时刻,我希望设备检查它拥有的图像是否是最新的,并使用尽可能少的数据,因此我编写了一些代码来为图像创建一个校验和,这将使客户端更容易确定它的pic是否是最新的。
(我本来打算发送代码,但那太长了,所以我会先尝试不发送代码) 在伪代码中:

long getCheckSumFor(Image i) {
    long xVal;
    long yVal;
    count x from 0 to i.width
         long val = 0;
         count y from 0 to i.height
             val += i.getPixel(x, y);
         yVal += val % Integer.MAX_VALUE;
    count y from 0 to i.height
         long val = 0;
         count x from 0 to i.width
             val += i.getPixel(x, y);
         xVal += val % Integer.MAX_VALUE;
    int tx = xVal % Integer.MAX_VALUE;
    int ty = yVal % Integer.MAX_VALUE;
    return a long with the first 4 bytes taken from ty and the last 4 bytes taken from tx
}
这基本上就是它的工作原理,但它为相同的输入提供不同的输出(取决于哪个平台、PC或Android)。
我在PC上使用
ImageIO.read()
BitmapFactory.decodeByteArray()
(不带BitmapFactory.Options)读取图片,调试表明yVal在不同平台上已经有所不同,所以我想每个方法读取JPEG的方式可能略有不同?如果这是真的,有没有办法让我用同样的方式来解读它们呢
提前感谢,

谢尔顿

如果改用MD5怎么办?您可以在Java和Android中执行此操作

如果改用MD5怎么办?您可以在Java中执行此操作,对于Android

不要使用
位图、BuffereImage或BitmapFactory

只需获取图像文件的字节数即可计算校验和

如果发送文件,则发送文件的字节,并且不要使用任何转换文件字节的类


不在发送端。不在接收端。

请勿使用
位图、BuffereImage或BitmapFactory

只需获取图像文件的字节数即可计算校验和

如果发送文件,则发送文件的字节,并且不要使用任何转换文件字节的类


不在发送端。不在接收端。

Image.getPixel()在Android上不存在。你在说什么?你为什么要谈论或使用BitmapFactory?你不会先做位图吧?我想你的服务器会提供一个图像文件。因此,对图像文件中的字节进行校验和。但是,首先下载文件,然后计算校验和有什么意义呢?Image.getPixel()在PC上不存在,至少在java中不存在(这是伪代码,所以没有真正使用的API)。我说的是告诉您该方法,这样如果其中有任何错误,就更容易发现问题。BitmapFactory可以读取JPEG以及其他图像格式(据我从互联网上听到的消息,它解码得非常好,图像看起来不错)。我以前说过我下载过图像文件吗?不。。Android和PC使用相同的输入,但来自不同的来源。为什么你对确定图像文件字节的校验和没有反应?这就是重点。不要使用位图和位图工厂。我可以这样做,但首先我想知道为什么这不起作用,而不是直接屈服于它,因为有一件事没有完全做到我认为它应该做的
安卓和PC使用相同的输入,但来自不同的来源???什么意思?据我所知,Android正在从您的电脑下载文件。Android上不存在Image.getPixel()。你在说什么?你为什么要谈论或使用BitmapFactory?你不会先做位图吧?我想你的服务器会提供一个图像文件。因此,对图像文件中的字节进行校验和。但是,首先下载文件,然后计算校验和有什么意义呢?Image.getPixel()在PC上不存在,至少在java中不存在(这是伪代码,所以没有真正使用的API)。我说的是告诉您该方法,这样如果其中有任何错误,就更容易发现问题。BitmapFactory可以读取JPEG以及其他图像格式(据我从互联网上听到的消息,它解码得非常好,图像看起来不错)。我以前说过我下载过图像文件吗?不。。Android和PC使用相同的输入,但来自不同的来源。为什么你对确定图像文件字节的校验和没有反应?这就是重点。不要使用位图和位图工厂。我可以这样做,但首先我想知道为什么这不起作用,而不是直接屈服于它,因为有一件事没有完全做到我认为它应该做的
安卓和PC使用相同的输入,但来自不同的来源???什么意思?安卓正在从你的电脑下载一个文件,我明白了。128位。。。太好了,我要试试128位。。。太好了,我要试着这样做我的目标是找出,为什么ImageIO和BitmapFactory会读两幅图像不一样是这样的我的目标是找出,为什么ImageIO和BitmapFactory会读两幅图像不一样