ImageIO.read() 和 BitmapFactory.decodeByteArray()
ImageIO.read() and BitmapFactory.decodeByteArray()
我现在正在开发一个小型服务器-客户端应用程序,服务器在计算机上,客户端在 android 设备上。在某些时候,我希望设备检查它拥有的图像是否是最新的并使用尽可能少的数据,所以我编写了一些代码来为图像创建校验和,这应该使客户更容易确定图片是否是最新的
(我打算发送代码,但那很长,所以我先试试)
在伪代码中:
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 here and for Android here
中执行此操作
不要使用Bitmap, BufferedImage or BitmapFactory
!
只需取图像文件的字节来计算校验和。
如果发送文件,则发送文件的字节,不要使用任何转换文件字节的class。
不在发送端。不在接收端。
我现在正在开发一个小型服务器-客户端应用程序,服务器在计算机上,客户端在 android 设备上。在某些时候,我希望设备检查它拥有的图像是否是最新的并使用尽可能少的数据,所以我编写了一些代码来为图像创建校验和,这应该使客户更容易确定图片是否是最新的
(我打算发送代码,但那很长,所以我先试试)
在伪代码中:
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 here and for Android here
中执行此操作不要使用Bitmap, BufferedImage or BitmapFactory
!
只需取图像文件的字节来计算校验和。
如果发送文件,则发送文件的字节,不要使用任何转换文件字节的class。
不在发送端。不在接收端。