1
0
mirror of https://gitee.com/sui-feng-cb/AzurLaneAutoScript1 synced 2026-03-30 00:27:14 +08:00

Opt: ADB screenshots loader

Try other loaders if loader fixed but unable to parse
This commit is contained in:
LmeSzinc
2021-12-18 23:32:47 +08:00
parent 395cbf9d5f
commit bf53167572

View File

@@ -10,12 +10,13 @@ from retry import retry
from module.base.timer import Timer, timer from module.base.timer import Timer, timer
from module.device.ascreencap import AScreenCap from module.device.ascreencap import AScreenCap
from module.exception import ScriptError
from module.logger import logger from module.logger import logger
class Screenshot(AScreenCap): class Screenshot(AScreenCap):
_screenshot_method = 0 _screenshot_method = [0, 1, 2]
_screenshot_method_fixed = False _screenshot_method_fixed = [0, 1, 2]
_screenshot_interval_timer = Timer(0.1) _screenshot_interval_timer = Timer(0.1)
_last_save_time = {} _last_save_time = {}
@@ -25,27 +26,27 @@ class Screenshot(AScreenCap):
image = self.device.screenshot() image = self.device.screenshot()
return image.convert('RGB') return image.convert('RGB')
def _load_screenshot(self, screenshot): def _load_screenshot(self, screenshot, method):
if self._screenshot_method == 0: if method == 0:
return Image.open(BytesIO(screenshot)).convert('RGB') return Image.open(BytesIO(screenshot)).convert('RGB')
elif self._screenshot_method == 1: elif method == 1:
return Image.open(BytesIO(screenshot.replace(b'\r\n', b'\n'))).convert('RGB') return Image.open(BytesIO(screenshot.replace(b'\r1\n', b'\n'))).convert('RGB')
elif self._screenshot_method == 2: elif method == 2:
return Image.open(BytesIO(screenshot.replace(b'\r\r\n', b'\n'))).convert('RGB') return Image.open(BytesIO(screenshot.replace(b'\r\r\n', b'\n'))).convert('RGB')
else:
raise ScriptError(f'Unknown method to load screenshots: {method}')
def _process_screenshot(self, screenshot): def _process_screenshot(self, screenshot):
if self._screenshot_method_fixed: for method in self._screenshot_method_fixed:
return self._load_screenshot(screenshot) try:
else: result = self._load_screenshot(screenshot, method=method)
for _ in range(3): self._screenshot_method_fixed = [method] + self._screenshot_method
try: return result
screenshot = self._load_screenshot(screenshot) except OSError:
except OSError: continue
self._screenshot_method += 1
else: self._screenshot_method_fixed = self._screenshot_method
self._screenshot_method_fixed = True raise OSError(f'cannot load screenshot')
break
return screenshot
def _screenshot_adb(self): def _screenshot_adb(self):
screenshot = self.adb_shell(['screencap', '-p']) screenshot = self.adb_shell(['screencap', '-p'])