From a2daaea5e944ec9bc007cd9ff0c4071131ff964b Mon Sep 17 00:00:00 2001 From: march3 Date: Thu, 14 Dec 2023 12:49:56 +0800 Subject: [PATCH] =?UTF-8?q?Python=E8=B6=85=E4=BA=BA-=E5=AE=87=E5=AE=99?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sim_scenes/featured/earth_seasons.py | 15 +-- sim_scenes/featured/earth_seasons_1.py | 133 ++++++++++++++++++++++++ sim_scenes/featured/earth_seasons_2.py | 132 +++++++++++++++++++++++ sim_scenes/featured/earth_seasons_3.py | 132 +++++++++++++++++++++++ sim_scenes/science/earth_season_func.py | 27 +++-- sim_scenes/universe_sim_scenes.py | 6 +- tools/sim_video_cap.py | 33 ++++-- 7 files changed, 456 insertions(+), 22 deletions(-) create mode 100644 sim_scenes/featured/earth_seasons_1.py create mode 100644 sim_scenes/featured/earth_seasons_2.py create mode 100644 sim_scenes/featured/earth_seasons_3.py diff --git a/sim_scenes/featured/earth_seasons.py b/sim_scenes/featured/earth_seasons.py index 4bc9396..ccac250 100644 --- a/sim_scenes/featured/earth_seasons.py +++ b/sim_scenes/featured/earth_seasons.py @@ -62,7 +62,8 @@ class EarthSeasonsSim(UniverseSimScenes): self.sky.rotation_x = 20 self.sky.rotation_z = -65 - self.earth_clouds.name_text.enabled = False + if hasattr(self.earth_clouds, "name_text"): + self.earth_clouds.name_text.enabled = False def earth_text_display(self, term_name): """ @@ -71,10 +72,11 @@ class EarthSeasonsSim(UniverseSimScenes): @return: """ for e in [self.earth_1, self.earth_2, self.earth_3, self.earth_4]: - if term_name == e.name: - e.name_text.enabled = False - else: - e.name_text.enabled = True + if hasattr(e, "name_text"): + if term_name == e.name: + e.name_text.enabled = False + else: + e.name_text.enabled = True def on_timer_changed(self, time_data: TimeData): if time_data.total_days > 375: @@ -88,7 +90,8 @@ class EarthSeasonsSim(UniverseSimScenes): # 控制4个透明地球文本是否显示,防止地球文字的叠加 self.earth_text_display(term_name) # 地球名称文字显示为相应的节气 - self.earth.name_text.text = term_name + if hasattr(self.earth, "name_text"): + self.earth.name_text.text = term_name # if term_name == "立春": # 找到立春的位置和速度 # print("position", earth.position) # print("velocity", earth.velocity) diff --git a/sim_scenes/featured/earth_seasons_1.py b/sim_scenes/featured/earth_seasons_1.py new file mode 100644 index 0000000..5ef0f93 --- /dev/null +++ b/sim_scenes/featured/earth_seasons_1.py @@ -0,0 +1,133 @@ +# -*- coding:utf-8 -*- +# title :地球季节模拟(四季和24节气) +# description :地球季节模拟(四季和24节气) +# author :Python超人 +# date :2023-02-11 +# link :https://gitcode.net/pythoncr/ +# python_version :3.8 +# ============================================================================== +from ursina import camera + +from bodies import Sun, Earth +from common.consts import SECONDS_PER_DAY, AU +from sim_scenes.func import ursina_run, camera_look_at, create_sphere_sky +from sim_scenes.science.earth_season_func import create_important_pos_earths, get_solar_terms_angles, create_earth +from sim_scenes.universe_sim_scenes import UniverseSimScenes +from simulators.ursina.entities.body_timer import TimeData, BodyTimer +from simulators.ursina.ursina_event import UrsinaEvent + + +class EarthSeasonsSim(UniverseSimScenes): + window_size = (1920 / 3, 1080 / 3) + + def __init__(self): + self.sun = Sun(size_scale=5e1) # 太阳使用透明纹理,不会遮挡摄像机 + # 在 4 个节气的位置创建固定不动的透明地球 + self.earth_1, self.earth_2, self.earth_3, self.earth_4 = \ + create_important_pos_earths(texture="earth-huge.jpg", size_scale=4.5e3, position_offset=1.0) + # 运动的地球 + self.earth, self.earth_clouds = create_earth(earth_texture="earth-huge.jpg", + with_clouds=True, earth_rotation_speed=0.5, + clouds_rotation_speed=0.6) + + # 地球立春的位置和速度 + self.earth.init_position = [-9.1507536e+07, 0.0000000e+00, 1.1907757e+08] + self.earth.init_velocity = [-23.550875, 0., -18.05398] + + self.earth_clouds.init_position = [-9.1507536e+07, 0.0000000e+00, 1.1907757e+08] + self.earth_clouds.init_velocity = [-23.550875, 0., -18.05398] + + self.earth.rotate_axis_color = (255, 255, 50) + self.earth.rotate_axis_scale = 0.65 + + self.bodies = [ + self.sun, self.earth, self.earth_clouds, + self.earth_1, self.earth_2, self.earth_3, self.earth_4, + ] + + # 中国农历24节气表,数据为 节气名称 和 camera.rotation_y 的角度范围值 + self.solar_terms_angles = get_solar_terms_angles() + + def on_ready(self): + # 将 4 个节气位置的地球进行旋转,让中国面对太阳 + self.earth_1.planet.rotation_y += 115 # 春分 + self.earth_2.planet.rotation_y += 15 # 夏至 + self.earth_3.planet.rotation_y -= 80 # 秋分 + self.earth_4.planet.rotation_y -= 145 # 冬至 + + self.earth_1.planet.alpha = 0.3 + self.earth_2.planet.alpha = 0.3 + self.earth_3.planet.alpha = 0.3 + self.earth_4.planet.alpha = 0.3 + + # self.sky = create_sphere_sky(scale=8000) + # self.sky.rotation_y = 100 + # self.sky.rotation_x = 20 + # self.sky.rotation_z = -65 + + if hasattr(self.earth_clouds, "name_text"): + self.earth_clouds.name_text.enabled = False + + # 摄像机始终看向移动的地球 + camera_look_at(self.sun, rotation_z=0) + + def earth_text_display(self, term_name): + """ + 控制4个透明地球文本是否显示,防止地球文字的叠加 + @param term_name: + @return: + """ + for e in [self.earth_1, self.earth_2, self.earth_3, self.earth_4]: + if hasattr(e, "name_text"): + if term_name == e.name: + e.name_text.enabled = False + else: + e.name_text.enabled = True + + def on_timer_changed(self, time_data: TimeData): + if time_data.total_days > 400: + exit(0) + + # 根据角度范围判断,显示中国农历24节气 + for info in self.solar_terms_angles: + if info[1] <= camera.rotation_y < info[2]: + term_name = info[0] + # 控制4个透明地球文本是否显示,防止地球文字的叠加 + self.earth_text_display(term_name) + # 地球名称文字显示为相应的节气 + if hasattr(self.earth, "name_text"): + self.earth.name_text.text = term_name + # if term_name == "立春": # 找到立春的位置和速度 + # print("position", earth.position) + # print("velocity", earth.velocity) + + # print(camera.rotation_y) + + def run(self): + # 订阅事件后,上面2个函数功能才会起作用 + # 运行前会触发 on_ready + UrsinaEvent.on_ready_subscription(self.on_ready) + # 运行中,每时每刻都会触发 on_timer_changed + UrsinaEvent.on_timer_changed_subscription(self.on_timer_changed) + # 设置计时器的最小时间单位为天 + BodyTimer().min_unit = BodyTimer.MIN_UNIT_DAYS + # 使用 ursina 查看的运行效果 + # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 + # position = 左-右+、上+下-、前+后- + ursina_run(self.bodies, + SECONDS_PER_DAY * 10, + # position=(0, 0, 0), # 摄像机和太阳是相同位置 + position=(3 * AU, AU, 0), # 摄像机和太阳是相同位置 + # show_name=True, + show_grid=False, + cosmic_bg='', + # show_timer=True, + timer_enabled=True) + + +if __name__ == '__main__': + """ + 摄像机以太阳的视角看地球(四季和24节气) + """ + sim = EarthSeasonsSim() + sim.run() diff --git a/sim_scenes/featured/earth_seasons_2.py b/sim_scenes/featured/earth_seasons_2.py new file mode 100644 index 0000000..ab3d305 --- /dev/null +++ b/sim_scenes/featured/earth_seasons_2.py @@ -0,0 +1,132 @@ +# -*- coding:utf-8 -*- +# title :地球季节模拟(四季和24节气) +# description :地球季节模拟(四季和24节气) +# author :Python超人 +# date :2023-02-11 +# link :https://gitcode.net/pythoncr/ +# python_version :3.8 +# ============================================================================== +from ursina import camera + +from bodies import Sun, Earth +from common.consts import SECONDS_PER_DAY, AU +from sim_scenes.func import ursina_run, camera_look_at, create_sphere_sky +from sim_scenes.science.earth_season_func import create_important_pos_earths, get_solar_terms_angles, create_earth +from sim_scenes.universe_sim_scenes import UniverseSimScenes +from simulators.ursina.entities.body_timer import TimeData, BodyTimer +from simulators.ursina.ursina_event import UrsinaEvent + + +class EarthSeasonsSim(UniverseSimScenes): + window_size = (1920 / 3, 1080 / 3) + + def __init__(self): + self.sun = Sun(size_scale=5e1) # 太阳使用透明纹理,不会遮挡摄像机 + # 在 4 个节气的位置创建固定不动的透明地球 + self.earth_1, self.earth_2, self.earth_3, self.earth_4 = \ + create_important_pos_earths(texture="earth-huge.jpg", size_scale=4.5e3, position_offset=1.0) + # 运动的地球 + self.earth, self.earth_clouds = create_earth(earth_texture="earth-huge.jpg", + with_clouds=True, earth_rotation_speed=0.5, + clouds_rotation_speed=0.6) + + # 地球立春的位置和速度 + self.earth.init_position = [-9.1507536e+07, 0.0000000e+00, 1.1907757e+08] + self.earth.init_velocity = [-23.550875, 0., -18.05398] + + self.earth_clouds.init_position = [-9.1507536e+07, 0.0000000e+00, 1.1907757e+08] + self.earth_clouds.init_velocity = [-23.550875, 0., -18.05398] + + self.earth.rotate_axis_color = (255, 255, 50) + self.earth.rotate_axis_scale = 0.65 + + self.bodies = [ + self.sun, self.earth, self.earth_clouds, + self.earth_1, self.earth_2, self.earth_3, self.earth_4, + ] + + # 中国农历24节气表,数据为 节气名称 和 camera.rotation_y 的角度范围值 + self.solar_terms_angles = get_solar_terms_angles() + + def on_ready(self): + # 将 4 个节气位置的地球进行旋转,让中国面对太阳 + self.earth_1.planet.rotation_y += 115 # 春分 + self.earth_2.planet.rotation_y += 15 # 夏至 + self.earth_3.planet.rotation_y -= 80 # 秋分 + self.earth_4.planet.rotation_y -= 145 # 冬至 + + self.earth_1.planet.alpha = 0.3 + self.earth_2.planet.alpha = 0.3 + self.earth_3.planet.alpha = 0.3 + self.earth_4.planet.alpha = 0.3 + + # self.sky = create_sphere_sky(scale=8000) + # self.sky.rotation_y = 100 + # self.sky.rotation_x = 20 + # self.sky.rotation_z = -65 + + if hasattr(self.earth_clouds, "name_text"): + self.earth_clouds.name_text.enabled = False + + # 摄像机始终看向移动的地球 + camera_look_at(self.sun, rotation_z=0) + + def earth_text_display(self, term_name): + """ + 控制4个透明地球文本是否显示,防止地球文字的叠加 + @param term_name: + @return: + """ + for e in [self.earth_1, self.earth_2, self.earth_3, self.earth_4]: + if hasattr(e, "name_text"): + if term_name == e.name: + e.name_text.enabled = False + else: + e.name_text.enabled = True + + def on_timer_changed(self, time_data: TimeData): + if time_data.total_days > 400: + exit(0) + + # 根据角度范围判断,显示中国农历24节气 + for info in self.solar_terms_angles: + if info[1] <= camera.rotation_y < info[2]: + term_name = info[0] + # 控制4个透明地球文本是否显示,防止地球文字的叠加 + self.earth_text_display(term_name) + # 地球名称文字显示为相应的节气 + if hasattr(self.earth, "name_text"): + self.earth.name_text.text = term_name + # if term_name == "立春": # 找到立春的位置和速度 + # print("position", earth.position) + # print("velocity", earth.velocity) + + # print(camera.rotation_y) + + def run(self): + # 订阅事件后,上面2个函数功能才会起作用 + # 运行前会触发 on_ready + UrsinaEvent.on_ready_subscription(self.on_ready) + # 运行中,每时每刻都会触发 on_timer_changed + UrsinaEvent.on_timer_changed_subscription(self.on_timer_changed) + # 设置计时器的最小时间单位为天 + BodyTimer().min_unit = BodyTimer.MIN_UNIT_DAYS + # 使用 ursina 查看的运行效果 + # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 + # position = 左-右+、上+下-、前+后- + ursina_run(self.bodies, SECONDS_PER_DAY * 10, + # position=(0, 0, 0), # 摄像机和太阳是相同位置 + position=(0, AU, -3 * AU), # 摄像机和太阳是相同位置 + # show_name=True, + show_grid=False, + cosmic_bg='', + # show_timer=True, + timer_enabled=True) + + +if __name__ == '__main__': + """ + 摄像机以太阳的视角看地球(四季和24节气) + """ + sim = EarthSeasonsSim() + sim.run() diff --git a/sim_scenes/featured/earth_seasons_3.py b/sim_scenes/featured/earth_seasons_3.py new file mode 100644 index 0000000..8402340 --- /dev/null +++ b/sim_scenes/featured/earth_seasons_3.py @@ -0,0 +1,132 @@ +# -*- coding:utf-8 -*- +# title :地球季节模拟(四季和24节气) +# description :地球季节模拟(四季和24节气) +# author :Python超人 +# date :2023-02-11 +# link :https://gitcode.net/pythoncr/ +# python_version :3.8 +# ============================================================================== +from ursina import camera + +from bodies import Sun, Earth +from common.consts import SECONDS_PER_DAY, AU +from sim_scenes.func import ursina_run, camera_look_at, create_sphere_sky +from sim_scenes.science.earth_season_func import create_important_pos_earths, get_solar_terms_angles, create_earth +from sim_scenes.universe_sim_scenes import UniverseSimScenes +from simulators.ursina.entities.body_timer import TimeData, BodyTimer +from simulators.ursina.ursina_event import UrsinaEvent + + +class EarthSeasonsSim(UniverseSimScenes): + window_size = (1920 / 3, 1080 / 3) + + def __init__(self): + self.sun = Sun(size_scale=5e1) # 太阳使用透明纹理,不会遮挡摄像机 + # 在 4 个节气的位置创建固定不动的透明地球 + self.earth_1, self.earth_2, self.earth_3, self.earth_4 = \ + create_important_pos_earths(texture="earth-huge.jpg", size_scale=4.5e3, position_offset=1.0) + # 运动的地球 + self.earth, self.earth_clouds = create_earth(earth_texture="earth-huge.jpg", + with_clouds=True, earth_rotation_speed=0.5, + clouds_rotation_speed=0.6) + + # 地球立春的位置和速度 + self.earth.init_position = [-9.1507536e+07, 0.0000000e+00, 1.1907757e+08] + self.earth.init_velocity = [-23.550875, 0., -18.05398] + + self.earth_clouds.init_position = [-9.1507536e+07, 0.0000000e+00, 1.1907757e+08] + self.earth_clouds.init_velocity = [-23.550875, 0., -18.05398] + + self.earth.rotate_axis_color = (255, 255, 50) + self.earth.rotate_axis_scale = 0.65 + + self.bodies = [ + self.sun, self.earth, self.earth_clouds, + self.earth_1, self.earth_2, self.earth_3, self.earth_4, + ] + + # 中国农历24节气表,数据为 节气名称 和 camera.rotation_y 的角度范围值 + self.solar_terms_angles = get_solar_terms_angles() + + def on_ready(self): + # 将 4 个节气位置的地球进行旋转,让中国面对太阳 + self.earth_1.planet.rotation_y += 115 # 春分 + self.earth_2.planet.rotation_y += 15 # 夏至 + self.earth_3.planet.rotation_y -= 80 # 秋分 + self.earth_4.planet.rotation_y -= 145 # 冬至 + + self.earth_1.planet.alpha = 0.3 + self.earth_2.planet.alpha = 0.3 + self.earth_3.planet.alpha = 0.3 + self.earth_4.planet.alpha = 0.3 + + # self.sky = create_sphere_sky(scale=8000) + # self.sky.rotation_y = 100 + # self.sky.rotation_x = 20 + # self.sky.rotation_z = -65 + + if hasattr(self.earth_clouds, "name_text"): + self.earth_clouds.name_text.enabled = False + + # 摄像机始终看向移动的地球 + camera_look_at(self.sun, rotation_z=0) + + def earth_text_display(self, term_name): + """ + 控制4个透明地球文本是否显示,防止地球文字的叠加 + @param term_name: + @return: + """ + for e in [self.earth_1, self.earth_2, self.earth_3, self.earth_4]: + if hasattr(e, "name_text"): + if term_name == e.name: + e.name_text.enabled = False + else: + e.name_text.enabled = True + + def on_timer_changed(self, time_data: TimeData): + if time_data.total_days > 400: + exit(0) + + # 根据角度范围判断,显示中国农历24节气 + for info in self.solar_terms_angles: + if info[1] <= camera.rotation_y < info[2]: + term_name = info[0] + # 控制4个透明地球文本是否显示,防止地球文字的叠加 + self.earth_text_display(term_name) + # 地球名称文字显示为相应的节气 + if hasattr(self.earth, "name_text"): + self.earth.name_text.text = term_name + # if term_name == "立春": # 找到立春的位置和速度 + # print("position", earth.position) + # print("velocity", earth.velocity) + + # print(camera.rotation_y) + + def run(self): + # 订阅事件后,上面2个函数功能才会起作用 + # 运行前会触发 on_ready + UrsinaEvent.on_ready_subscription(self.on_ready) + # 运行中,每时每刻都会触发 on_timer_changed + UrsinaEvent.on_timer_changed_subscription(self.on_timer_changed) + # 设置计时器的最小时间单位为天 + BodyTimer().min_unit = BodyTimer.MIN_UNIT_DAYS + # 使用 ursina 查看的运行效果 + # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 + # position = 左-右+、上+下-、前+后- + ursina_run(self.bodies, SECONDS_PER_DAY * 10, + # position=(0, 0, 0), # 摄像机和太阳是相同位置 + position=(0, 4 * AU, 0), # 摄像机和太阳是相同位置 + # show_name=True, + show_grid=False, + cosmic_bg='', + # show_timer=True, + timer_enabled=True) + + +if __name__ == '__main__': + """ + 摄像机以太阳的视角看地球(四季和24节气) + """ + sim = EarthSeasonsSim() + sim.run() diff --git a/sim_scenes/science/earth_season_func.py b/sim_scenes/science/earth_season_func.py index 98e6425..babe16e 100644 --- a/sim_scenes/science/earth_season_func.py +++ b/sim_scenes/science/earth_season_func.py @@ -12,7 +12,7 @@ from bodies import Sun, Earth from common.consts import SECONDS_PER_DAY, AU -def create_trans_earth(name, text_color, position, texture="earth_transparent.png"): +def create_trans_earth(name, text_color, position, texture="earth_transparent.png", size_scale=5e3): """ 创建透明的地球 @param name: 名称 @@ -21,21 +21,34 @@ def create_trans_earth(name, text_color, position, texture="earth_transparent.pn @param texture: 透明地球的纹理图片 @return: """ - return Earth(name=name, size_scale=5e3, texture=texture, # 明的地球纹理 + return Earth(name=name, size_scale=size_scale, texture=texture, # 明的地球纹理 text_color=text_color, rotation_speed=0, init_position=position, init_velocity=[0, 0, 0]).set_ignore_gravity(True) # 忽略重力 -def create_important_pos_earths(texture="earth_transparent.png"): +def create_important_pos_earths(texture="earth_transparent.png", size_scale=5e3, position_offset=1.05): """ 创建24节气中4个重要位置的透明地球 @param texture: 透明地球的纹理图片 + @param size_scale: + @param position_offset: + @return: """ - earth_1 = create_trans_earth(name="春分", text_color=(0, 255, 0), position=[-1.05 * AU, 0, 0], texture=texture) - earth_2 = create_trans_earth(name="夏至", text_color=(255, 0, 0), position=[0, 0, -1.05 * AU], texture=texture) - earth_3 = create_trans_earth(name="秋分", text_color=(255, 255, 0), position=[1.05 * AU, 0, 0], texture=texture) - earth_4 = create_trans_earth(name="冬至", text_color=(0, 255, 255), position=[0, 0, 1.05 * AU], texture=texture) + earth_1 = create_trans_earth(name="春分", text_color=(0, 255, 0), position=[-position_offset * AU, 0, 0], + texture=texture, size_scale=size_scale) + earth_2 = create_trans_earth(name="夏至", text_color=(255, 0, 0), position=[0, 0, -position_offset * AU], + texture=texture, size_scale=size_scale) + earth_3 = create_trans_earth(name="秋分", text_color=(255, 255, 0), position=[position_offset * AU, 0, 0], + texture=texture, size_scale=size_scale) + earth_4 = create_trans_earth(name="冬至", text_color=(0, 255, 255), position=[0, 0, position_offset * AU], + texture=texture, size_scale=size_scale) + + earth_1.set_light_disable(True) + earth_2.set_light_disable(True) + earth_3.set_light_disable(True) + earth_4.set_light_disable(True) + return earth_1, earth_2, earth_3, earth_4 diff --git a/sim_scenes/universe_sim_scenes.py b/sim_scenes/universe_sim_scenes.py index 5c2d157..547c12c 100644 --- a/sim_scenes/universe_sim_scenes.py +++ b/sim_scenes/universe_sim_scenes.py @@ -22,7 +22,11 @@ class UniverseSimScenes: def __new__(cls, *args, **kwargs): print("参数个数", len(sys.argv)) if len(sys.argv) > 1: - UniverseSimScenes.set_window_size((1920, 1079), False) + if hasattr(cls, "window_size"): + window_size = cls.window_size + else: + window_size = (1920, 1079) + UniverseSimScenes.set_window_size(window_size, False) cls.record_rate = 2 UniverseSimScenes.screen_record = True application.time_scale = 0.00001 diff --git a/tools/sim_video_cap.py b/tools/sim_video_cap.py index a29eca5..672d6ce 100644 --- a/tools/sim_video_cap.py +++ b/tools/sim_video_cap.py @@ -39,9 +39,20 @@ def get_args(): return args -def screen_shot(window_img_dc): - width, height = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN), \ - win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN) +def get_window_size(hwnd): + rect = win32gui.GetWindowRect(hwnd) + width = rect[2] - rect[0] + height = rect[3] - rect[1] + return width, height + + +def screen_shot(window_img_dc, width=None, height=None): + screen_width, screen_height = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN), \ + win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN) + + if width is None or width == screen_width or height == screen_height: + width, height = screen_width, screen_height + # 创建一个内存设备描述表 mem_dc = window_img_dc.CreateCompatibleDC() # 创建位图对象 @@ -91,9 +102,10 @@ def sim_window_screen_shot(wait_ses=-1, retry_times=3): handle = get_window_handle() if handle > 0: desktop_dc = win32gui.GetWindowDC(handle) + width, height = get_window_size(handle) img_dc = win32ui.CreateDCFromHandle(desktop_dc) try: - img = screen_shot(img_dc) + img = screen_shot(img_dc, width, height) except Exception as e: print("ERROR:", str(e)) print("handle", handle) @@ -136,7 +148,11 @@ def get_current_time(): def check_img(img): - if img[400:500, 400:500].sum() == 0: + if img is None: + return False + w, h, p = img.shape + if img[int(w * 3 / 5):int(w * 4 / 5), int(h * 3 / 5):int(h * 4 / 5)].sum() == 0 and \ + img[int(w * 3 / 8):int(w * 5 / 8), int(h * 3 / 8):int(h * 5 / 8)].sum() == 0: return False return True @@ -172,6 +188,10 @@ if __name__ == '__main__': print("开始录屏时间:", get_current_time()) while True: + if imageNum < args.fps * args.total_time: + # show_image(frame) + video.write(img) + img = sim_window_screen_shot() if img is None: print("\n模拟器窗口已关闭,退出录屏时间:", get_current_time()) @@ -191,9 +211,6 @@ if __name__ == '__main__': imageNum += 1 # frame = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR) - if imageNum < args.fps * args.total_time: - # show_image(frame) - video.write(img) print("视频保存中") video.release() -- GitLab