`
kuwoleft
  • 浏览: 1072346 次
文章分类
社区版块
存档分类
最新评论

如何在RFT中比较两个图像文件?

 
阅读更多

如何在RFT中比较两个图像文件?

下面脚本截获屏幕图像并保存到文件中,然后比较两个图像文件:

public void testMain(Object[] args)

{

CaptureScreen.captureScreen("C://tmp1.jpg");

startApp("calc");

计算器window().activate();

CaptureScreen.captureScreen("C://tmp2.jpg");

boolean result = compareImages("C://tmp1.jpg","C://tmp2.jpg");

if(result)

{

System.out.println("The two image are same!");

}

else

{

System.out.println("The two image are different.");

doImageDiff("C://tmp1.jpg","C://tmp2.jpg","C://tmp3.jpg");

}

}

captureScreen的写法参考:

http://blog.csdn.net/Testing_is_believing/archive/2010/01/23/5247785.aspx

通过比较像素点的方式比较两个图像文件:

public static boolean compareImages(String expectedImage, String actualImage)

{

BufferedImage expected = null, actual = null;

try

{

FileInputStream in = new FileInputStream(expectedImage);

JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);

expected = decoder.decodeAsBufferedImage();

in.close();

in = new FileInputStream(actualImage);

decoder = JPEGCodec.createJPEGDecoder(in);

actual = decoder.decodeAsBufferedImage();

in.close();

}

catch (Exception e) {

System.out.println("Error in BitmapOps#compareImages: error reading images: " + e);

return false;

}

if (expected == null || actual == null)

return false;

if (expected.getHeight() != actual.getHeight() || expected.getWidth() != actual.getWidth())

return false;

for (int y = 0; y < expected.getHeight(); ++y)

{

for (int x = 0; x < expected.getWidth(); ++x)

{

if (expected.getRGB(x, y) != actual.getRGB(x, y))

return false;

}

}

return true;

}

分析出两个图像文件不相等的地方,把差异的地方高亮显示并保存到图像文件:

public static void doImageDiff(String expectedImage, String actualImage, String diffImage)

{

BufferedImage expected = null, actual = null;

try

{

FileInputStream in = new FileInputStream(expectedImage);

JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);

expected = decoder.decodeAsBufferedImage();

in.close();

in = new FileInputStream(actualImage);

decoder = JPEGCodec.createJPEGDecoder(in);

actual = decoder.decodeAsBufferedImage();

in.close();

}

catch (Exception e) {

System.out.println("Error in BitmapOps#doImageDiff: error reading images: " + e);

return;

}

try {

BufferedImage difference = new BufferedImage(expected.getWidth(), expected.getHeight(), expected.getType());

if (expected == null || actual == null)

{

System.out.println("Error in BitmapOps#doImageDiff: Expected image or actual image is null");

return;

}

if (expected.getHeight() != actual.getHeight() || expected.getWidth() != actual.getWidth())

{

System.out.println("Error in BitmapOps#doImageDiff: Images are not the same size");

return;

}

for (int y = 0; y < expected.getHeight(); ++y)

{

for (int x = 0; x < expected.getWidth(); ++x)

{

int rgb = expected.getRGB(x, y) - actual.getRGB(x, y);

difference.setRGB(x, y, rgb);

}

}

FileOutputStream out = new FileOutputStream(diffImage);

JPEGImageEncoder encoder =

JPEGCodec.createJPEGEncoder(out);

encoder.encode(difference);

out.flush();

out.close();

}

catch (Exception e) {

System.out.println("Error in BitmapOps#doImageDiff: error writing image: " + e);

}

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics