91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MonkeyImage API 實踐全記錄

發布時間:2020-05-15 04:13:25 來源:網絡 閱讀:2610 作者:zhukev 欄目:移動開發

1.    背景

鑒于網上使用MonkeyImage的實例除了方法sameAs外很難找到,所以本人把實踐各個API的過程記錄下來然自己有更感性的認識,也為往后的工作打下更好的基礎。同時也和上一篇文章《MonkeyDevcie API 實踐全記錄》起到相互呼應的作用。

因為并沒有MonkeyRunner的項目背景,所以這里更多的是描述各個API是怎么一回事,而不是描述在什么場景下需要用到。也就是說是去回答What,而不是How。

首先我們先看下官方給出的MonkeyImage的API描述,對比我現在反編譯的最新的源碼是一致的:

Return Type

Methods

Comment

string

convertToBytes (string format)

Converts the current image to a particular format and returns it as a string that you can then access as an iterable of binary bytes.

 

tuple

getRawPixel (integer x, integer y)

Returns the single pixel at the image location (x,y), as an a tuple of integer, in the form (a,r,g,b).

 

integer

getRawPixelInt (integer x, integer y)

Returns the single pixel at the image location (x,y), as a 32-bit integer.

 

MonkeyImage

getSubImage (tuple rect)

Creates a new MonkeyImage object from a rectangular selection of the current image.

 

boolean

sameAs (MonkeyImage other, float percent)

Compares this MonkeyImage object to another and returns the result of the comparison. Thepercent argument specifies the percentage difference that is allowed for the two images to be "equal".

 

void

writeToFile (string path, string format)

Writes the current image to the file specified by filename, in the format specified by format.

 

 

2.      String convertToBytes(string format)

2.1  示例

img = device.takeSnapshot()  png1 = img.convertToBytes()  png2 = img.convertToBytes()  bmp = img.convertToBytes('bmp')  jpg = img.convertToBytes('JPG')  gif = img.convertToBytes('gif')  raw = img.convertToBytes('raw')  invalid = img.convertToBytes('xxx')  #is the 2 pngs equal? print "Two png is equal in bytes:",png1 == png2  #is the png equals to bmp? print "png and bmp is equal in bytes:", png1 == bmp  #is the jpg eqals to the raw? print "jpg and bmp is equals in bytes:",jpg == bmp  #is the jpg eqals to the xxx? print "jpg is a valid argument:",jpg != invalid  #is the gif eqals to the xxx? print "gif is a valid argument:",gif != invalid  #is the bmp eqals to the xxx? print "bmp is a valid argument:",bmp != invalid  #is the raw equas to xxxx? aims at checking whether argument 'raw' is invalid like 'xxx' print 'raw is a valid argument:',raw != invalid  #would invalid argument drop to png by default? print 'Would invalid argument drop to png by default:',png1 == invalid
輸出:

MonkeyImage API 實踐全記錄


2.2 分析

除了默認的png,常用格式jpg,gif都支持,但bmp格式無效,至于還支持什么其他格式,嘗試跟蹤了下代碼,沒有找到想要的結果

3. tuple getRawPixel(integer x, integer y)Integer getRawPixelInt (integer x, integer y)

3.1 示例

viewer = device.getHierarchyViewer() note = viewer.findViewById('id/title') text = viewer.getText(note) print text.encode('utf-8')  point = viewer.getAbsoluteCenterOfView(note) x = point.x y = point.y  img = device.takeSnapshot()  pixelTuple = img.getRawPixel(x,y) pixelInt = img.getRawPixelInt(x,y) print "Pixel in tuple:",pixelTuple print "Pixel in int:", pixelInt
輸出:
MonkeyImage API 實踐全記錄

3.2 分析

這里把兩個相似的方法放到一起來比較,他們都是獲得指定一個坐標的argb值,其中a就是alpha(透明度),rgb就是顏色三元組紅綠藍了。但前者返回的是一個元組,后者返回的是整型。
那么兩個類型的值是怎么對應起來的呢?其實就是第一個方法的元組的返回值(a,r,g,b)中的每個值轉換成8個bit的二進制值然后按順序從左到右排列起來再轉換成十進制整型就是第二個方法的返回值了。
以示例輸出為例,比如b在第一個返回值中是141,換成二進制就是1001101,其他雷同。
MonkeyImage API 實踐全記錄
再看第二個方法的整型返回值是-7500403,轉換成二進制其實就是11111111100011011000110110001101(至于下圖calculator轉換后為什么前面那么多個1,其實不用管他,因為是負數所以前面要加上FF之類而已),那么最后的8個bit轉換成十進制其實就是上面的的141.
MonkeyImage API 實踐全記錄

4. MonkeyImage getSubImage(tuple rect)

4.1 示例

from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage from com.android.monkeyrunner.easy import EasyMonkeyDevice,By from com.android.chimpchat.hierarchyviewer import HierarchyViewer from com.android.hierarchyviewerlib.models import ViewNode, Window from java.awt import Point  #from com.android.hierarchyviewerlib.device import   #Connect to the target targetDevice targetDevice = MonkeyRunner.waitForConnection()  easy_device = EasyMonkeyDevice(targetDevice)  #touch a button by id would need this targetDevice.startActivity(component="com.example.android.notepad/com.example.android.notepad.NotesList")  #invoke the menu options MonkeyRunner.sleep(6) #targetDevice.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP);  '''      public ViewNode findViewById(String id)       * @param id id for the view.      * @return view with the specified ID, or {@code null} if no view found. ''' #MonkeyRunner.alert("Continue?", "help", "Ok?")  pic = targetDevice.takeSnapshot() pic = pic.getSubImage((0,38,480,762))  newPic = targetDevice.takeSnapshot() newPic = newPic.getSubImage((0,38,480,762))  print (newPic.sameAs(pic,1.0)) newPic.writeToFile('./shot1.png','png')

4.2 分析

以上示例流程是
  • 打開NotePad的NotesList Activity
  • 按下Menu Options按鈕彈出“Add note”這個Menu Entry
  • 截取一個屏幕
  • 調用getSubImage來取得去掉屏幕最上面的狀態欄(因為有時間不斷變化,所以每截屏一次可能都會有所改變)和最下面的Menu Options的一個Image
  • 再重復以上兩個步驟取得另外一個Image
  • 比較以上兩個image是否相同
  • 把第二個image寫到本地。

5 boolean sameAs(MonkeyImage other, float percent)

5.1 示例

見4.1

5.2 分析

流程見4.1,這里要注意第二個浮點型的參數是從0.0到1.0, 1.0代表必須100%相同,0.5代表可以有50%的Error Tolerance.

6. void writeToFile (string path, string format)

6.1 示例

請參見第4章節

6.2 分析

參數很明了,這里需要提一下的是第一個參數路徑,如果你填寫的是相對路徑的話,base用得是MonkeyRunner。也就是說示例中的圖片最終是保存在我的monkeyrunner可執行程序的上一層目錄。


 

作者

自主博客

微信

CSDN

天地會珠海分舵

http://techgogogo.com


服務號:TechGoGoGo

掃描碼:

MonkeyImage API 實踐全記錄

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

呈贡县| 延庆县| 哈巴河县| 米泉市| 泾源县| 德昌县| 黄冈市| 阜平县| 浏阳市| 林西县| 凤冈县| 陵川县| 来凤县| 邢台县| 鹤岗市| 锦屏县| 东光县| 大丰市| 辉县市| 大埔县| 重庆市| 长子县| 利辛县| 辽中县| 平度市| 岳阳市| 平阴县| 车险| 宁蒗| 钟祥市| 金寨县| 金秀| 兴山县| 中阳县| 雷波县| 无锡市| 安西县| 松溪县| 巍山| 柳林县| 长宁县|