在雷電模擬器內指定區域查詢回復圖示,對映到螢幕畫素點選
這是使用雷電模擬器開啟小米手機吧,我想點選回帖圖示,本來很簡單,做一個圖示的識別就完事了,可是呢,這個圖示很容易被相似的圖示給識別到了,例如左邊的分享圖示,做太精確的識別必然更耗時間,而且還容易出錯。所以需要把查詢的區域固定到模擬器中間部分。
那麼第一步,先找到模擬器的位置,例如用Home圖示來判斷:
public Location 查詢雷電模擬器的主頁圖示()
{
// 截圖
value.sys.screenCapture();
Location location = new Location(-1, -1);
// 讀取圖片到LortImage物件
LortImage lortImage = ReadImage.getImageInArrayLort_COLUMN(value.path.imagePath, 0, 0, 1919, 1079);
IndexFindColor indexFindColor = new IndexFindColor(new Location(850,946), ColorStr.reverseColorString("131313"), 10, 10, 10);
indexFindColor.add(850,940, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(850,951, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(849,994, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(849,989, ColorStr.reverseColorString("131313"));
indexFindColor.add(849,985, ColorStr.reverseColorString("131313"));
indexFindColor.add(852,981, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(856,981, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(846,897, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(854,896, ColorStr.reverseColorString("131313"));
location = indexFindColor.find(lortImage, indexFindColor);
return location;
}
找到模擬器圖示位置之後,就可以確定這個模擬器左上角和右下角座標,也就是這個模擬器螢幕大小:
Location 主頁圖示 = value.identification.查詢雷電模擬器的主頁圖示();
LocationRegion 模擬器螢幕區域 = new LocationRegion(主頁圖示, -568, -905, -17, 75);
模擬器螢幕區域.println();
輸出結果:
10, 44 561, 1024
然後讓指令碼生成這個區域的影像:
然後這個圖示應該在這個範圍內去查詢:
識別帖子圖示:
public Location 查詢帖子的回覆圖示()
{
// 已經使用模擬器區域截圖, 所以也不可以使用整個螢幕截圖
Location location = new Location(-1, -1);
// 讀取圖片到LortImage物件
LortImage lortImage = ReadImage.getImageInArrayLort_COLUMN(value.path.imagePath, new Location(10, 44).calcMove(195, -44), new Location(561, 1024).calcMove(309, 935));
IndexFindColor indexFindColor = new IndexFindColor(new Location(530,391), ColorStr.reverseColorString("545151"), 30);
indexFindColor.add(533,390, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(540,382, ColorStr.reverseColorString("545151"));
indexFindColor.add(548,391, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(551,392, ColorStr.reverseColorString("585555"));
indexFindColor.add(537,402, ColorStr.reverseColorString("545151"));
indexFindColor.add(544,402, ColorStr.reverseColorString("545151"));
indexFindColor.add(538,392, ColorStr.reverseColorString("545151"));
indexFindColor.add(540,393, ColorStr.reverseColorString("585555"));
indexFindColor.add(543,392, ColorStr.reverseColorString("545151"));
location = indexFindColor.find(lortImage, indexFindColor);
return location;
}
現在,回覆的圖示的確是找到了,但是這樣一繞,對應的複雜的工作就隨之而來了。影像區域變化:整個電腦螢幕區域 -> 模擬器螢幕區域 -> 帖子中間區域,所以在找到回覆圖示後,又要一直把之前所有偏移的座標重新加上,才能得到準確的整個螢幕的座標,這樣去點選才能對應到這個圖示上去。
所以:
Location 主頁圖示 = value.identification.查詢雷電模擬器的主頁圖示();
LocationRegion 模擬器螢幕區域 = new LocationRegion(主頁圖示, -568, -905, -17, 75);
value.sys.模擬器區域截圖(模擬器螢幕區域);
Location 回覆圖示 = value.identification.查詢帖子的回覆圖示();
回覆圖示.move(205, 0); // 從帖子中間部分的左上角偏移到模擬器左上角, 205, 0的計算方法: new Location(10, 44).calcMove(195, -44), 相加 = 205, 0
回覆圖示.move(模擬器螢幕區域.getStartLocation());
回覆圖示.println();
現在這個圖示我們們就可以去點選了,它就是回覆圖示在螢幕中的準確位置。
接下來封裝為一個類:
/**
* 模擬器
*/
public class Emulator
{
public Value value;
public Location 主頁圖示;
public LocationRegion 螢幕區域範圍;
public Emulator(Value value)
{
this.value = value;
主頁圖示 = 查詢雷電模擬器的主頁圖示();
螢幕區域範圍 = new LocationRegion(主頁圖示, -568, -905, -17, 75);
}
public void 回覆帖子()
{
Location location = 查詢帖子的回覆圖示();
if (location.getBooleanValue() == true)
{
value.rp.tapLeft(location);
}
else
{
System.out.println("失敗...沒有找到回覆圖示");
}
}
public Location 查詢帖子的回覆圖示()
{
模擬器區域截圖();
Location location = new Location(-1, -1);
// 讀取圖片到LortImage物件
LortImage lortImage = ReadImage.getImageInArrayLort_COLUMN(value.path.imagePath, new Location(10, 44).calcMove(195, -44), new Location(561, 1024).calcMove(309, 935));
IndexFindColor indexFindColor = new IndexFindColor(new Location(530,391), ColorStr.reverseColorString("545151"), 30);
indexFindColor.add(533,390, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(540,382, ColorStr.reverseColorString("545151"));
indexFindColor.add(548,391, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(551,392, ColorStr.reverseColorString("585555"));
indexFindColor.add(537,402, ColorStr.reverseColorString("545151"));
indexFindColor.add(544,402, ColorStr.reverseColorString("545151"));
indexFindColor.add(538,392, ColorStr.reverseColorString("545151"));
indexFindColor.add(540,393, ColorStr.reverseColorString("585555"));
indexFindColor.add(543,392, ColorStr.reverseColorString("545151"));
location = indexFindColor.find(lortImage, indexFindColor);
if (location.getBooleanValue() == true)
{
location.move(new Location(10, 44).calcMove(195, -44));
location.move(螢幕區域範圍.getStartLocation());
}
return location;
}
private void 模擬器區域截圖()
{
value.rp.screenCaptureRegion(螢幕區域範圍, value.path.imagePath);
}
private Location 查詢雷電模擬器的主頁圖示()
{
// 截圖
value.sys.screenCapture();
// 讀取圖片到LortImage物件
LortImage lortImage = ReadImage.getImageInArrayLort_COLUMN(value.path.imagePath, 0, 0, 1919, 1079);
IndexFindColor indexFindColor = new IndexFindColor(new Location(850,946), ColorStr.reverseColorString("131313"), 10, 10, 10);
indexFindColor.add(850,940, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(850,951, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(849,994, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(849,989, ColorStr.reverseColorString("131313"));
indexFindColor.add(849,985, ColorStr.reverseColorString("131313"));
indexFindColor.add(852,981, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(856,981, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(846,897, ColorStr.reverseColorString("FFFFFF"));
indexFindColor.add(854,896, ColorStr.reverseColorString("131313"));
主頁圖示 = indexFindColor.find(lortImage, indexFindColor);
return 主頁圖示;
}
}
使用:
// 建立模擬器
Emulator emulator = new Emulator(value);
// 回覆帖子
emulator.回覆帖子();
完成。
相關文章
- 螢幕畫素知識
- 3D UI 場景中如何把 X Y 平面的尺寸對映為螢幕畫素3DUI
- 電腦顯示器破圖了怎麼辦修復 顯示器螢幕橫條紋修復教程
- 雷電模擬器安裝frida
- canvas畫素點操作 —— 視訊綠幕摳圖Canvas
- 地圖 判斷點在區域內地圖斷點
- linux區域網內磁碟對映Linux
- 區域網高畫質螢幕共享軟體在不同行業應用行業
- Life of a Pixel:前端程式碼如何通過瀏覽器演化為螢幕顯示的畫素前端瀏覽器
- iOS 高德地圖怎麼在螢幕內顯示所有的Marker?iOS地圖
- lcd螢幕顯示jpeg圖片,其中lcd每個畫素佔據4位元組
- BMP圖片的複製#顯示到螢幕
- fiddler5+雷電模擬器4.0對app抓包設定APP
- 雷達報文模擬回放/雷達資料模擬發生器
- Swift iOS : 裝入webview時,如何讓圖片都顯示在螢幕內SwiftiOSWebView
- Deskreen 1.0.2 –將電腦螢幕共享到瀏覽器中,做第二塊螢幕瀏覽器
- 圖片區域點選處理
- 虛擬模擬部署新方案-畫素流技術
- android螢幕適配三:通過畫素密度適配Android
- 直播app開發,點選螢幕時顯示進度條APP
- 在桌面上建立螢幕保護程式圖示(轉)
- 顯示器螢幕重新整理率怎麼調?電腦顯示器螢幕重新整理率的設定方法
- Yii2 在模組內對映 Controller 到其它控制器Controller
- 【JavaScript】拖拽圖片檔案顯示縮圖 + div點選模擬 input[type=file]JavaScript
- 模擬在頁面點選匯入csv
- Auto.js 在模擬器上 截圖顯示黑色問題JS
- ABAP選擇螢幕:根據使用者選擇動態顯示螢幕(轉老宋)
- 怎麼調整電腦螢幕顯示亮度 怎麼設定電腦螢幕亮度
- 動態隱藏/顯示選擇螢幕
- 基於Vue實現圖片在指定區域內移動Vue
- canvas clearRect()清除指定區域內容Canvas
- 移動端使用scrollTop方法點選展開內容使該區域在滾動到瀏覽器最頂端瀏覽器
- SpringBoot JPA查詢對映到自定義實體類Spring Boot
- 雷帕黴素的缺點?
- win10電腦顯示器螢幕不能鋪滿怎麼辦 win10電腦顯示不能鋪滿螢幕處理方法Win10
- 外網連線內部區域網的方法--ip 埠對映
- JQuery模擬點選clickjQuery
- win10 螢幕不能全屏怎麼恢復_win10電腦螢幕顯示不滿屏處理方法Win10