MonkeyImage API 教程

来源:互联网 发布:mysql注入 编辑:程序博客网 时间:2024/06/06 04:44

MonkeyImage

一个用来控制设备或模拟器屏幕图像的猴子快跑(monkeyrunner)类。图像在截屏时通过屏幕缓冲区拷贝出来。该对象的方法允许你将图像转换为各种存储格式、存储与文件、剪裁以及和另一个MonkeyImage对象进行比较。 


你不需要新建一个MonkeyImage实例。可以用MonkeyDevice.takeSnapshot()方法通过截屏来新建一个实例。

概览

方法
string

convertToBytes(string format)

将当前图像转换成特定格式,并且作为字符串返回。你可以将它作为可迭代的二进制字节来访问。
tuple

getRawPixel(integer x, integer y)

返回图像位置坐标(x,y)上的单个像素点,作为一个整数元组,以(a,r,g,b)格式。
integer

getRawPixelInt(integer x, integer y)

返回图像位置坐标(x,y)上的单个像素点,作为一个32位的整数
MonkeyImage

getSubImage(tuple rect)

将当前图像上矩形选框选出的区域新建一个MonkeyImage对象。
boolean

sameAs(MonkeyImage other, float percent)

将该MonkeyImage对象与其他的进行比较,并返回比较的结果。percent参数指定两个图像之间差异在多少百分比之内可以看做“相等”。
void

writeToFile(string path, string format)

用指定的文件名将图像以指定的格式写入文件。

公有方法


string convertToBytes (string format)

将当前图像转换成特定格式,并且作为字符串返回。你可以将它作为可迭代的二进制字节来访问。 

参数
format 期望输出的格式。支持所有常见的栅格化输出格式。默认值是“png”(Portable Network Graphics编写网络图像)。


示例

[python] view plaincopy
  1. img = device.takeSnapshot()  
  2.   
  3. png1 = img.convertToBytes()  
  4.   
  5. png2 = img.convertToBytes()  
  6.   
  7. bmp = img.convertToBytes('bmp')  
  8.   
  9. jpg = img.convertToBytes('JPG')  
  10.   
  11. gif = img.convertToBytes('gif')  
  12.   
  13. raw = img.convertToBytes('raw')  
  14.   
  15. invalid = img.convertToBytes('xxx')  
  16.   
  17. #is the 2 pngs equal?  
  18. print "Two png is equal in bytes:",png1 == png2  
  19.   
  20. #is the png equals to bmp?  
  21. print "png and bmp is equal in bytes:", png1 == bmp  
  22.   
  23. #is the jpg eqals to the raw?  
  24. print "jpg and bmp is equals in bytes:",jpg == bmp  
  25.   
  26. #is the jpg eqals to the xxx?  
  27. print "jpg is a valid argument:",jpg != invalid  
  28.   
  29. #is the gif eqals to the xxx?  
  30. print "gif is a valid argument:",gif != invalid  
  31.   
  32. #is the bmp eqals to the xxx?  
  33. print "bmp is a valid argument:",bmp != invalid  
  34.   
  35. #is the raw equas to xxxx? aims at checking whether argument 'raw' is invalid like 'xxx'  
  36. print 'raw is a valid argument:',raw != invalid  
  37.   
  38. #would invalid argument drop to png by default?  
  39. print 'Would invalid argument drop to png by default:',png1 == invalid  
输出:





tuple getRawPixel (integer x, integer y)

返回图像位置坐标(x,y)上的单个像素点,作为一个整数元组,以(a,r,g,b)格式。 

参数
x 水平方向像素位置,在截屏方向的最左边为0点。
y 垂直方向像素位置,在截屏方向的最顶端为0点。
返回
以(a,r,g,b)格式返回一个代表像素的整数元组,其中a是透明度,r,g,b分别是红绿蓝三个颜色值。


integer getRawPixel (integer x, integer y)

返回图像位置坐标(x,y)上的单个像素点,作为一个32位的整数。 

参数
x 水平方向像素位置,在截屏方向的最左边为0点。
y 垂直方向像素位置,在截屏方向的最顶端为0点。
返回
一个由像素的a,r,g,b的8位通道值组成的32位整数。其中a是最左边的8位值,r是近邻的8位,以此类推。


示例

[python] view plaincopy
  1. viewer = device.getHierarchyViewer()  
  2. note = viewer.findViewById('id/title')  
  3. text = viewer.getText(note)  
  4. print text.encode('utf-8')  
  5.   
  6. point = viewer.getAbsoluteCenterOfView(note)  
  7. x = point.x  
  8. y = point.y  
  9.   
  10. img = device.takeSnapshot()  
  11.   
  12. pixelTuple = img.getRawPixel(x,y)  
  13. pixelInt = img.getRawPixelInt(x,y)  
  14. print "Pixel in tuple:",pixelTuple  
  15. print "Pixel in int:", pixelInt  
输出:


这里把两个相似的方法放到一起来比较,他们都是获得指定一个坐标的argb值,其中a就是alpha(透明度),rgb就是颜色三元组红绿蓝了。但前者返回的是一个元组,后者返回的是整型。
那么两个类型的值是怎么对应起来的呢?其实就是第一个方法的元组的返回值(a,r,g,b)中的每个值转换成8个bit的二进制值然后按顺序从左到右排列起来再转换成十进制整型就是第二个方法的返回值了。
以示例输出为例,比如b在第一个返回值中是141,换成二进制就是1001101,其他雷同。
再看第二个方法的整型返回值是-7500403,转换成二进制其实就是11111111100011011000110110001101(至于下图calculator转换后为什么前面那么多个1,其实不用管他,因为是负数所以前面要加上FF之类而已),那么最后的8个bit转换成十进制其实就是上面的的141.

MonkeyImage getSubImage (tuple rect)

将当前图像上矩形选框选出的区域新建一个MonkeyImage对象。 

参数
rect 一个指定区域的元组(x,y,w,h)。x和y指定了选定区域左上角的0始像素位置。w代表选区宽度,h是高度,都是以像素为单位。
图像的方向与截屏时的手机方向相同。
返回

一个包含选定区域的MonkeyImage对象。


boolean sameAs ( MonkeyImage otherImage, float percent )

将该MonkeyImage对象与其他的进行比较,并返回比较的结果。percent参数指定两个图像之间差异在多少百分比之内可以看做“相等”。 

参数
otherImage 用来与本对象比较的另一个MonkeyImage对象。
percent 一个0.0-1.0之间(0.0和1.0包含)浮动的浮点数(float),它表示一个用来使该方法返回“真”的两个图像含有相同像素的百分比。默认值是1.0,即所有的像素必须相同。
返回
两个图像相同则返回“true”,反之返回“false”。


void writeToFile (string filename, string format)

用指定的文件名将图像以指定的格式写入文件。 

参数
filename 完全合法的文件名和输出格式的扩展名后缀。

format 文件输出格式。若未指定,则该放假通过文件名的扩展名来猜测文件格式。若未提供扩展名,则默认使用“png”(Portable Network Graphics便携网络图像)格式。




MonkeyImage验证性代码:

#conding=uft-8import sysfrom com.android.monkeyrunner import MonkeyRunner, MonkeyDevicefrom com.android.monkeyrunner.easy import EasyMonkeyDevicefrom com.android.monkeyrunner.easy import Byfrom datetime import datetimedevice=MonkeyRunner.waitForConnection()img1=device.takeSnapshot()#takeSnapshot()img2=device.takeSnapshot()result=img1.sameAs(img2,0.9)#sameAs()subimg=img1.getSubImage((0,50,50,100))#getSubImage()pic1=img1.convertToBytes()#convertToBytes()path2=sys.path[0][sys.path[0].find(':')+1 : ]+"\\"+ datetime.now().strftime('%Y-%m-%d-%H-%M-%S')+".png"'''path2解析print sys.path[0] #sys.path【0】返回 lib\monkeyrunner.jar:加上当前脚本所在路径#输出结果为 lib\monkeyrunner.jar:C:\Users\ramos-cs\Desktop\monkeyrunnerindex=sys.path[0].find(':')+1print index # index为冒号后面的真实路径所在索引#输出结果为21path1=sys.path[0][index : ]#切片获取当前脚本所在路径,[index : ]截取从index开始后面的字符串print path1 #输出结果为 C:\Users\ramos-cs\Desktop\monkeyrunnerpath2=path1 +"\\"+ datetime.now().strftime('%Y-%m-%d-%H-%M-%S')+".png"print path2#输出结果为 C:\Users\ramos-cs\Desktop\monkeyrunner\2015-09-14-11-30-45.png'''img1.writeToFile(path2,"png")#path2:完全合法的文件名和输出格式的扩展名后缀; "png" 文件输出格式subimg.writeToFile(path2,"png")#writeToFile()



附 MonkeyImag官方API文档:http://www.android-doc.com/tools/help/MonkeyImage.html


0 0