From 72166acda0f3d42e2f1bd632992144e7a8f3b193 Mon Sep 17 00:00:00 2001 From: MistEO Date: Wed, 25 Aug 2021 10:47:17 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=90=AF=E7=94=A8=E7=BA=AFad?= =?UTF-8?q?b=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MeoAssistance/AbstractTask.cpp | 53 +++++++++++++++------------------- MeoAssistance/AbstractTask.h | 2 +- MeoAssistance/Assistance.cpp | 2 +- MeoAssistance/ProcessTask.cpp | 2 +- 4 files changed, 27 insertions(+), 32 deletions(-) diff --git a/MeoAssistance/AbstractTask.cpp b/MeoAssistance/AbstractTask.cpp index 2ca7c13cdf..892bcc5e55 100644 --- a/MeoAssistance/AbstractTask.cpp +++ b/MeoAssistance/AbstractTask.cpp @@ -37,46 +37,41 @@ void AbstractTask::set_exit_flag(bool* exit_flag) m_exit_flag = exit_flag; } -cv::Mat AbstractTask::get_format_image(bool hd) +cv::Mat AbstractTask::get_format_image(bool raw) { - cv::Mat raw_image; - if (hd) { - raw_image = m_view_ptr->getAdbImage(); - } - else { - raw_image = m_view_ptr->getImage(m_view_ptr->getWindowRect()); - } + cv::Mat raw_image = m_view_ptr->getAdbImage(); + if (raw_image.empty()) { m_callback(AsstMsg::ImageIsEmpty, json::value(), m_callback_arg); return raw_image; } - if (raw_image.rows < 100) { - m_callback(AsstMsg::WindowMinimized, json::value(), m_callback_arg); - return raw_image; - } + //if (raw_image.rows < 100) { + // m_callback(AsstMsg::WindowMinimized, json::value(), m_callback_arg); + // return raw_image; + //} - if (hd) { + if (raw) { set_control_scale(1.0); return raw_image; } else { - // 把模拟器边框的一圈裁剪掉 - const EmulatorInfo& window_info = m_view_ptr->getEmulatorInfo(); - int x_offset = window_info.x_offset; - int y_offset = window_info.y_offset; - int width = raw_image.cols - x_offset - window_info.right_offset; - int height = raw_image.rows - y_offset - window_info.bottom_offset; + constexpr double DefaultRatio = static_cast(Configer::DefaultWindowWidth) / static_cast(Configer::DefaultWindowHeight); + double cur_ratio = static_cast(raw_image.cols) / static_cast(raw_image.rows); + cv::Size scale_size; + double scale = 0.0; + if (cur_ratio >= DefaultRatio) { // 说明是宽屏或默认16:9,按照高度计算缩放 + scale_size = cv::Size(cur_ratio * Configer::DefaultWindowWidth, Configer::DefaultWindowHeight); + scale = static_cast(raw_image.rows) / static_cast(Configer::DefaultWindowHeight); + } + else { // 否则可能是偏正方形的屏幕,按宽度计算 + scale_size = cv::Size(Configer::DefaultWindowWidth, cur_ratio * Configer::DefaultWindowHeight); + scale = static_cast(raw_image.cols) / static_cast(Configer::DefaultWindowWidth); + } + cv::Mat resize_mat; + cv::resize(raw_image, resize_mat, cv::Size(Configer::DefaultWindowWidth, Configer::DefaultWindowHeight)); + set_control_scale(scale); - cv::Mat cropped(raw_image, cv::Rect(x_offset, y_offset, width, height)); - - // 根据图像尺寸,调整控制的缩放 - set_control_scale(cropped.cols, cropped.rows); - - //// 调整尺寸,与资源中截图的标准尺寸一致 - //cv::Mat dst; - //cv::resize(cropped, dst, cv::Size(m_configer.DefaultWindowWidth, m_configer.DefaultWindowHeight)); - - return cropped; + return resize_mat; } } diff --git a/MeoAssistance/AbstractTask.h b/MeoAssistance/AbstractTask.h index 2cb7a1079a..76d8028d50 100644 --- a/MeoAssistance/AbstractTask.h +++ b/MeoAssistance/AbstractTask.h @@ -55,7 +55,7 @@ namespace asst { virtual void set_task_chain(std::string name) { m_task_chain = std::move(name); } virtual const std::string& get_task_chain() { return m_task_chain; } protected: - virtual cv::Mat get_format_image(bool hd = false); // 参数hd:高清截图,会慢一点 + virtual cv::Mat get_format_image(bool raw = false); // 参数raw:原图 virtual bool set_control_scale(double scale); virtual bool set_control_scale(int cur_width, int cur_height); virtual bool sleep(unsigned millisecond); diff --git a/MeoAssistance/Assistance.cpp b/MeoAssistance/Assistance.cpp index 56703687a4..9b99fab3e0 100644 --- a/MeoAssistance/Assistance.cpp +++ b/MeoAssistance/Assistance.cpp @@ -155,7 +155,7 @@ std::optional Assistance::catch_emulator(const std::string& emulato { // 指定的模拟器 ret = create_handles(Configer::get_instance().m_handles[emulator_name]); } - if (ret && m_window_ptr->showWindow() && m_window_ptr->resizeWindow()) + if (ret) { m_inited = true; return cor_name; diff --git a/MeoAssistance/ProcessTask.cpp b/MeoAssistance/ProcessTask.cpp index 5e2ede0f48..e202271982 100644 --- a/MeoAssistance/ProcessTask.cpp +++ b/MeoAssistance/ProcessTask.cpp @@ -236,7 +236,7 @@ std::shared_ptr ProcessTask::match_image(Rect* matched_rect) break; } - callback_json["elite_rect"] = json::array({ rect.x, rect.y, rect.width, rect.height }); + callback_json["rect"] = json::array({ rect.x, rect.y, rect.width, rect.height }); callback_json["name"] = task_name; if (matched_rect != NULL) { *matched_rect = std::move(rect);