|
peterlin 發表於 Sept 10, 2016 1:19:17 GMT
|
|
|
AnkuLua 發表於 Sept 10, 2016 3:16:07 GMT
LG 螢幕 2560 x 1440 是比較耗記憶體,加上getColor 也是耗記憶體的函數,所以較容易閃退
其他App 用所謂findColor 是不直覺做法
把圖貼上來吧,沒甚麼解決不了的
|
|
|
peterlin 發表於 Sept 10, 2016 5:16:12 GMT
不好意思, 一樣是下面這一張圖的問題, 每個位置我各抓了2張(字變大變小), 在我手機很順了, 但朋友們都會卡住, 所以想改用findColor的方式來解問題, 謝啦.
|
|
|
AnkuLua 發表於 Sept 10, 2016 6:59:08 GMT
恭喜您,自己的手機可以動的很順 在他人手機不順很可能是因為手機解析度長寬比和您的不同 解法一(鋸箭法): 用remoteAKL 在 你朋友手機上重抓有問題的圖 ankulua-tw.boards.net/thread/76/remoteakl-android-pc解法一(治本法): 用autoResize 在腳本開始時量測正確的compareDimrnsion ankulua-tw.boards.net/thread/54/autoresize付上最新的autoResize 函數,可以設定region,加快速度 function autoResize(target, defaultDimension, immersive, region) local oldROI = Settings:getROI(); local max = 0 local localX = defaultDimension if (region ~= nil) then Settings:setROI(region) end if (exists(target, 0)) then resumeROI(oldROI) return defaultDimension end
setImmersiveMode(not immersive) if (exists(target, 0)) then resumeROI(oldROI) return defaultDimension end
setImmersiveMode(immersive) target:similar(0.8) local range = defaultDimension * 0.15 for x = defaultDimension - range, defaultDimension + range, 10 do Settings:setCompareDimension(true, x) if (exists(target, 0)) then if (getLastMatch():getScore() < max) then localX = x - 10 break end max = getLastMatch():getScore() end end
max = 0 for x = (localX - 9), (localX + 9) do Settings:setCompareDimension(true, x) if (exists(target, 0)) then if (getLastMatch():getScore() < max) then Settings:setCompareDimension(true, x - 1) toast("CompareDimension = "..(x-1)) resumeROI(oldROI) return (x - 1) end max = getLastMatch():getScore() end end if (max == 0) then Settings:setCompareDimension(true, defaultDimension) resumeROI(oldROI) return -1 end
resumeROI(oldROI) return (localX + 9) end
|
|
|
ltl 發表於 Sept 27, 2016 17:33:58 GMT
我覺得區域找色還蠻重要的。 常常拿來判斷血條等bar狀物,比OCR數值更簡單省力。(有時連數值都沒)
例如定義一個Region (左到右, 高=1) 或 (寬=1, 上到下) 然後掃描方法能指定 左上到右下(順序) 或 右下到左上(反序) 順序找黑色(底色) 或反序找前景色,就可以算出當下比例。 這個比例就很好用了。
看有沒有辦法把Region的色彩快取起來。 或是退而求其次、能夠做灰階模糊比對也好。大部分的bar都是黑底、高亮前景。
雖然說可以用前景色單一像素圖去做找圖,但有些血條是漸層色,比較麻煩。
|
|
|
AnkuLua 發表於 Sept 28, 2016 1:41:32 GMT
我覺得區域找色還蠻重要的。 常常拿來判斷血條等bar狀物,比OCR數值更簡單省力。(有時連數值都沒) 例如定義一個Region (左到右, 高=1) 或 (寬=1, 上到下) 然後掃描方法能指定 左上到右下(順序) 或 右下到左上(反序) 順序找黑色(底色) 或反序找前景色,就可以算出當下比例。 這個比例就很好用了。 看有沒有辦法把Region的色彩快取起來。 或是退而求其次、能夠做灰階模糊比對也好。大部分的bar都是黑底、高亮前景。 雖然說可以用前景色單一像素圖去做找圖,但有些血條是漸層色,比較麻煩。 聽來似乎己經可以用現有涵數來實現了 一個例子,大家研究研究 local xStart, yStart = 133, 600 for i = 1, 100 do if (i == 1) then usePreviousSnap(false) else usePreviousSnap(true) end -- 避免重複取圖 local r, g, b = getColor(Location(xStart, yStart + i)) -- 做您對r, g, b 想做的判斷 end usePreviousSnap(false) -- 記得設回來,不然就GG了
|
|
|
ltl 發表於 Sept 28, 2016 5:40:01 GMT
getColor 會使用快取的Snap嗎? 好像在哪篇有看到Snap會轉成灰階圖?
|
|
|
AnkuLua 發表於 Sept 28, 2016 5:49:30 GMT
Snap 是指截圖 getColor 不會轉灰階,其他會轉灰階
不過,剛剛發現usePreviousSnap() 對 getColor() 沒作用 目前版本就沒法省截圖時間
|
|
|
ltl 發表於 Sept 28, 2016 6:01:22 GMT
對,我的意思就是, 既使用了 usePreviousSnap(),可能快取的Snap已經轉成了灰階圖,所以getColor還是只能再抓一次才能取得正確色彩。 當然也可能Snap存的是原圖,只是Region內部的區域快取是灰階圖,這樣就有可能有效。
當然我不知道核心是怎麼做的,所以只是猜測囉。
|
|
|
AnkuLua 發表於 Sept 28, 2016 7:18:38 GMT
反正getColor 取的就是有顏色的圖,不是灰階
|
|
|
whiteworm 發表於 Oct 1, 2019 8:30:29 GMT
不好意思,這函數的實際使用我研究很久還是看不懂QQ
例如我想要抓取座標(100,200)為顏色r=42 g=11 b=17 (或是Hex=#2A0B11)的時候執行動作A (因為圖示一樣但顏色不同的時候有不動的動作)
請問這該怎麼寫??感謝指教~~
|
|
|
AnkuLua 發表於 Oct 1, 2019 9:27:22 GMT
不好意思,這函數的實際使用我研究很久還是看不懂QQ 例如我想要抓取座標(100,200)為顏色r=42 g=11 b=17 (或是Hex=#2A0B11)的時候執行動作A (因為圖示一樣但顏色不同的時候有不動的動作) 請問這該怎麼寫??感謝指教~~ r, g, b = getColor(Location(100, 200)) if (r == 42 and g == 11 and b == 17) then print("found") end
|
|
|
whiteworm 發表於 Oct 2, 2019 9:26:41 GMT
加上getColor 也是耗記憶體的函數,所以較容易閃退 請問我可以在現有的別人寫好的腳本增加getColor嗎? 因為自己的截圖似乎無法用在別人的腳本裡 再者,假設我將全腳本都用getColor的方式寫判斷,而不用截圖的話 在判斷的時間會比較快比較短嗎? 以上,感謝回覆~~
|
|
|
AnkuLua 發表於 Oct 2, 2019 10:31:40 GMT
加上getColor 也是耗記憶體的函數,所以較容易閃退 請問我可以在現有的別人寫好的腳本增加getColor嗎? 因為自己的截圖似乎無法用在別人的腳本裡 再者,假設我將全腳本都用getColor的方式寫判斷,而不用截圖的話 在判斷的時間會比較快比較短嗎? 以上,感謝回覆~~ 如果您的截圖無法用在別人的腳本裡,getColor 應該也不會動 自己的截圖要用在別人的腳本需要注意全螢幕截圖要先依照compareDimesion 縮放 真的能避免getColor 就避免,不好維護
|
|