这是我的代码的简化版本。我得到应用程序屏幕的两个屏幕截图并存储在first.png和sec.png中,我可以看到它位于app \ src文件夹中。我可以打开图像,看看它们是正确的截图。但是,当我尝试使用bitmapfactory将它们放入位图时,我得到null。我已尝试给出绝对路径和相对路径,并且我已经遵循了其他相同的问题回答,因此请在将其标记为重复之前先查看它。
class Test{
private static boolean compareImages() throws FileNotFoundException {
Bitmap bitmap1 = BitmapFactory.decodeFile("src/"+imgFirst);
Bitmap bitmap2 = BitmapFactory.decodeFile("src/"+imgSecond);
if (bitmap1.getWidth() != bitmap2.getWidth() ||
bitmap1.getHeight() != bitmap2.getHeight()) {
return false;
}
for (int y = 0; y < bitmap1.getHeight(); y++) {
for (int x = 0; x < bitmap1.getWidth(); x++) {
if (bitmap1.getPixel(x, y) != bitmap2.getPixel(x, y)) {
return false;
}
}
}
return true;
}
public static boolean test() {
File scrFile = (Setup.getDriver()).getScreenshotAs(OutputType.FILE);//The Setup.getDriver() returns an AppiumDriver.
FileUtils.copyFile(scrFile, new File(imgFirst));
scrFile = (Setup.getDriver()).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File(imgSecond));
if(compareImages())
return false;
else
return true;
}
private static String imgFirst = "first.png";
private static String imgSecond = "sec.png";
}
答案 0 :(得分:0)
如果您在NPE
上获得BitmapFactory.decodeFile
,则应尝试获取文件的绝对路径并将其用作:
String firstImage=new File(getFilesDir(), imgFirst).getAbsolutePath();
Bitmap bitmap1 = BitmapFactory.decodeFile(firstImage);
参考:SO-3388898