From 41b50eade214f42db0e94052e83d2e3f20c73874 Mon Sep 17 00:00:00 2001 From: MistEO Date: Tue, 11 Apr 2023 23:25:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=BA=E5=A4=9C=E7=A5=9E=E7=9A=84?= =?UTF-8?q?=E6=88=AA=E5=9B=BE=E9=94=99=E8=AF=AF=E5=A2=9E=E5=8A=A0=E6=A3=80?= =?UTF-8?q?=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/4276 --- src/MaaCore/Controller/AdbController.cpp | 13 ++++++------- src/MaaCore/Controller/AdbController.h | 1 - src/MaaCore/Controller/PlayToolsController.cpp | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/MaaCore/Controller/AdbController.cpp b/src/MaaCore/Controller/AdbController.cpp index e6b34d3276..593132f823 100644 --- a/src/MaaCore/Controller/AdbController.cpp +++ b/src/MaaCore/Controller/AdbController.cpp @@ -182,7 +182,6 @@ void asst::AdbController::clear_info() noexcept m_width = 0; m_height = 0; m_screen_size = { 0, 0 }; - m_screencap_data_general_size = 0; } bool asst::AdbController::inited() const noexcept @@ -368,7 +367,12 @@ bool asst::AdbController::screencap(cv::Mat& image_payload, bool allow_reconnect if (temp.empty()) { return false; } - cv::cvtColor(temp, temp, cv::COLOR_RGB2BGR); + std::vector channels; + cv::split(temp, channels); + if (cv::countNonZero(channels[3] != 255) != 0) { + return false; + } + cv::cvtColor(temp, temp, cv::COLOR_RGBA2BGR); image_payload = temp; return true; }; @@ -476,10 +480,6 @@ bool asst::AdbController::screencap(const std::string& cmd, const DecodeFunc& de return false; } auto& data = ret.value(); - if (m_screencap_data_general_size && data.size() < m_screencap_data_general_size * 0.1) { - Log.warn("data is too small!"); - // return false; - } bool tried_conversion = false; if (m_adb.screencap_end_of_line == AdbProperty::ScreencapEndOfLine::CRLF) { @@ -522,7 +522,6 @@ bool asst::AdbController::screencap(const std::string& cmd, const DecodeFunc& de } m_adb.screencap_end_of_line = AdbProperty::ScreencapEndOfLine::CRLF; } - m_screencap_data_general_size = data.size(); return true; } diff --git a/src/MaaCore/Controller/AdbController.h b/src/MaaCore/Controller/AdbController.h index d3c2cf2ec4..64a329a134 100644 --- a/src/MaaCore/Controller/AdbController.h +++ b/src/MaaCore/Controller/AdbController.h @@ -126,7 +126,6 @@ namespace asst bool m_support_socket = false; bool m_server_started = false; bool m_inited = false; - size_t m_screencap_data_general_size = 0; inline static int m_instance_count = 0; }; diff --git a/src/MaaCore/Controller/PlayToolsController.cpp b/src/MaaCore/Controller/PlayToolsController.cpp index ea009e6abc..ab0476e698 100644 --- a/src/MaaCore/Controller/PlayToolsController.cpp +++ b/src/MaaCore/Controller/PlayToolsController.cpp @@ -111,7 +111,7 @@ bool asst::PlayToolsController::screencap(cv::Mat& image_payload, bool allow_rec std::vector buffer(image_size); asio::read(m_socket, asio::buffer(buffer, image_size)); image_payload = cv::Mat(m_screen_size.second, m_screen_size.first, CV_8UC4, buffer.data()); - cv::cvtColor(image_payload, image_payload, cv::COLOR_RGB2BGR); + cv::cvtColor(image_payload, image_payload, cv::COLOR_RGBA2BGR); } catch (const std::exception& e) { Log.error("Cannot get screencap:", e.what());