用Java计算两个ARGB整数之间的差异的最快方法?
|
给定一个来自DataBuffer的int,其中将ARGB数据与掩码一起打包
A = 0xFF000000
R = 0xFF0000
G = 0xFF00
B = 0xFF
我正在执行以下操作,但想知道Java中是否没有更快的方法?
DataBuffer db1 = img1.getData().getDataBuffer();
DataBuffer db2 = img2.getData().getDataBuffer();
int x, y;
int totalDiff = 0;
for (int i = 0; i < WIDTH * HEIGHT; ++i) {
x = db1.getElem(i);
y = db2.getElem(i);
totalDiff += Math.abs((x & 0xFF) - (y & 0xFF))
+ Math.abs(((x & 0xFF00) >> 8) - ((y & 0xFF00) >> 8))
+ Math.abs(((x & 0xFF0000) >> 16) - ((y & 0xFF0000) >> 16 ));
}
没有找到相关结果
已邀请:
3 个回复
细瑞
。这将加速您的代码。 像这样:
编辑: 另一个可以为您带来更高速度的想法。如果仅是一种试探法,则可能足以计算图像的“降采样”版本的差异。将
替换为ѭ5,并将速度提高10倍。当然,这是否有意义取决于图像的类型。 编辑: 在您提到的一个评论中,它是GA的适应度函数...在这种情况下,从图像中抓取100个(或仅10个)随机位置并比较该位置的像素可能就足够了。提高的速度极有可能超过准确性的损失。
bab
您知道
只会在0-255范围内。 如果您可以提出要确定的内容,这将会有所帮助? 也就是说,像素信息是否可以更有利于存储您想要达到的目标,例如色度(YUV,YCrCb)?
细屠截殴些