我从Android和Java开始,我的英语不是很好(对不起)。 我正在做一个应用程序比较相机拍摄的2张照片并返回浮动值= 2张照片中相同像素的比例。
public static float comparePic(String img_1, String img_2){
Bitmap bitmap1 = BitmapFactory.decodeFile(img_1);
Bitmap bitmap2 = BitmapFactory.decodeFile(img_2);
int equ = 0;
//get one height and one width because we assume that pictures have always same sizes
int h = bitmap1.getHeight();
int w = bitmap1.getWidth();
for(int y=0;y<h;y++){
for (int x=0;x<w;x++){
int pixel1 = bitmap1.getPixel(x,y);
int pixel2 = bitmap2.getPixel(x,y);
//alpha doesn't matter, they're jpg
int redValue1 = Color.red(pixel1);
int redValue2 = Color.red(pixel2);
int greenValue1 = Color.green(pixel1);
int greenValue2 = Color.green(pixel2);
int blueValue1 = Color.blue(pixel1);
int blueValue2 = Color.blue(pixel2);
if (redValue1==redValue2 && greenValue1==greenValue2 && blueValue1==blueValue2){
equ++;
}
}
}
return (float)equ/(h*w);
}
当我执行它时,我有这样的信息:“我/编舞:跳过730帧!应用程序可能在其主线程上做了太多工作。” 所以我尝试用线程来做,但我总是失败因为我不知道如何返回值。 此外,通过跳过帧我猜,比率是不正确的。 我知道这是一项异常的工作,所以我该怎么办? 谢谢!
答案 0 :(得分:0)
您可以在主类中(或者您需要值的任何地方)添加公共(setter-)方法。
异步线程完成后,调用equ
作为参数的方法。
您显然需要关心线程安全性,因此请考虑使该方法同步。
答案 1 :(得分:0)
你应该尝试AsyncTask。这是专门为后台处理准备的课程。它有一些缺点(使用AsyncTask进行网络连接并不是一个好主意),但是对于一些图片比较来说它是一个很棒的工具。
答案 2 :(得分:0)
使用接口定义Asynctask并在主Activity中实现该接口。
通过这种方式,您可以通知主机活动后台asynctask已完成。