blob: b390e35d5cc81930fad106e4d57802fd57165b53 [file] [log] [blame]
package com.android.rs.refocus;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.util.Log;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.nio.ByteBuffer;
/**
* Created by xinyiwang on 6/30/15.
*/
public class ImageCompare {
private static byte[] loadImageByteArray(String file_path) {
Bitmap bitmap = BitmapFactory.decodeFile(file_path);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
return stream.toByteArray();
}
public static boolean compareImage(String file1, String file2) {
byte[] first = loadImageByteArray(file1);
byte[] second = loadImageByteArray(file2);
for (int i = 0; i < first.length; i++) {
int v1 = 0xFF & first[i];
int v2 = 0xFF & second[i];
int error = Math.abs(v1 - v2);
if (error > 2) {
return false;
}
}
return true;
}
private static byte[] loadBitmapByteArray(Bitmap bitmap) {
int bytes = bitmap.getByteCount();
ByteBuffer buffer = ByteBuffer.allocate(bytes);
bitmap.copyPixelsToBuffer(buffer);
byte[] array = buffer.array();
return array;
}
public static class CompareValue {
float aveDiff = 0;
float diffPercent = 0f;
}
public static void compareBitmap(Bitmap bitmap1, Bitmap bitmap2, CompareValue result) {
byte[] first = loadBitmapByteArray(bitmap1);
byte[] second = loadBitmapByteArray(bitmap2);
int loopCount = first.length > second.length ? second.length : first.length;
int diffCount = 0;
int diffSum = 0;
for (int i = 0; i < loopCount; i++) {
int v1 = 0xFF & first[i];
int v2 = 0xFF & second[i];
int error = Math.abs(v1 - v2);
if (error > 0) {
diffCount++;
//if (error > result.maxDiff) {
//result.maxDiff = error;
//}
diffSum += error;
}
}
result.diffPercent = ((float)diffCount)/first.length;
result.aveDiff = ((float)diffSum)/first.length;
}
public static void compareIntermediate(String folder1, String folder2) {
File folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
String folder_path = folder.getAbsolutePath();
//String folder_path = "/storage/self/primary/";
String file_path_1_base = folder_path + "/" + folder1;
String file_path_2_base = folder_path + "/" + folder2;
File dir1 = new File(file_path_1_base);
for ( File imgFile : dir1.listFiles()) {
String file_path_2 = file_path_2_base + "/" + imgFile.getName();
String file_path_1 = file_path_1_base + "/" + imgFile.getName();
System.out.println(file_path_1);
System.out.println(file_path_2);
boolean same = compareImage(file_path_1, file_path_2);
if (same) {
Log.d("imageCompare:", imgFile.getName() + " is the same!");
} else {
Log.d("imageCompare:", imgFile.getName() + " is different!");
}
}
}
public static void printWrongIndex(String folder1, String folder2, String file, Context mContext) {
File folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
String folder_path = folder.getAbsolutePath();
//String folder_path = "/storage/self/primary/";
String file_path_1 = folder_path + "/" + folder1 + "/" + file;
String file_path_2 = folder_path + "/" + folder2 + "/" + file;
Bitmap bitmap1 = BitmapFactory.decodeFile(file_path_1);
ByteArrayOutputStream stream1 = new ByteArrayOutputStream();
bitmap1.compress(Bitmap.CompressFormat.PNG, 100, stream1);
byte[] first = stream1.toByteArray();
Bitmap bitmap2 = BitmapFactory.decodeFile(file_path_1);
ByteArrayOutputStream stream2 = new ByteArrayOutputStream();
bitmap2.compress(Bitmap.CompressFormat.PNG, 100, stream2);
byte[] second = stream2.toByteArray();
int width = bitmap1.getWidth();
int height = bitmap1.getHeight();
byte[] difference = new byte[first.length];
//System.out.println("Total pixel: " + width * height);
//System.out.println("intdifference length: " + intdifference.length);
//System.out.println("byte array length" + first.length);
for (int i = 0; i < first.length; i++) {
int v1 = 0xFF & first[i];
int v2 = 0xFF & second[i];
int error = Math.abs(v1 - v2);
//if (error > 2 ) {
// intdifference[i/4] = 0;
//} else {
// intdifference[i/4] = 255;
//}
difference[i] = (byte)(first[i] - second[i]);
}
//Bitmap differenceBitmap = Bitmap.createBitmap(difference, width, height, Bitmap.Config.ARGB_8888);
Bitmap differenceBitmap = BitmapFactory.decodeByteArray(difference,0, difference.length);
MediaStoreSaver.savePNG(differenceBitmap, "difference", "updateSharp1Difference.png", mContext);
System.out.println("difference image saved!");
}
}