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:
@@ -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'])
|
||||||
|
|||||||
Reference in New Issue
Block a user