diff --git a/config.toml b/config.toml index 0d0d90b..0494822 100644 --- a/config.toml +++ b/config.toml @@ -14,6 +14,7 @@ framerate = 16 vflip = false hflip = false export_options = 'scale=1920:-1,crop=1920:1080:0:102' +cache_images = false [CAMERA] # Nikon D40x capturemode = 3 # use IR remote diff --git a/main_c.py b/main_c.py index e2d5dc7..1f2fb4c 100644 --- a/main_c.py +++ b/main_c.py @@ -90,6 +90,7 @@ project_settings_defaults = { 'vflip' : False, 'hflip' : False, 'export_options' : 'scale=1920:-1,crop=1920:1080:0:102', + 'cache_images' : False, } # Camera Settings (Nikon D40x) @@ -128,6 +129,7 @@ class KISStopmo(tk.Tk): self.fullscreen_bool = project_settings['fullscreen_bool'] self.screen_w, self.screen_h = project_settings['screen_w'], project_settings['screen_h'] self.framerate = project_settings['framerate'] + self.playback = False # ~ self.photo = None self.end_thread = False @@ -195,20 +197,19 @@ class KISStopmo(tk.Tk): self.splashscreen = self.generate_splashscreen() - image = self.update_image() - if image: + self.image = None + self.update_image() + if self.image: if self.onion_skin: if self.img_index: - photo = self.apply_onionskin(image, self.onionskin_alpha_default, self.onionskin_fx) + photo = self.apply_onionskin(self.image, self.onionskin_alpha_default, self.onionskin_fx) else: - photo = ImageTk.PhotoImage(image) - + photo = ImageTk.PhotoImage(self.image) self.label.configure(image=photo) self.label.image = photo if project_settings['trigger_mode'] == 'event': root.after(1000, self.trigger_bg_loop) - # ~ root.after(1000, self.wait_for_capture) # Key binding root.bind("", lambda event: root.attributes("-fullscreen", False)) @@ -219,7 +220,7 @@ class KISStopmo(tk.Tk): root.bind("", self.preview_animation) root.bind("", self.trigger_export_animation) root.bind("", self.remove_frame) - # ~ root.bind("", self.print_imglist) + root.bind("", self.print_imglist) if project_settings['trigger_mode'] != 'event': root.bind("", self.capture_image) @@ -432,11 +433,14 @@ class KISStopmo(tk.Tk): image = image.transpose(Image.Transpose.FLIP_TOP_BOTTOM) if hflip: image = image.transpose(Image.Transpose.FLIP_LEFT_RIGHT) - self.img_list[filetuple[0]] = image + if project_settings['cache_images']: + # TODO : Do not cache image to preserve memory + self.img_list[filetuple[0]] = image except FileNotFoundError: return False else: - image = filetuple[-1] + if project_settings['cache_images']: + image = filetuple[-1] return image @@ -471,7 +475,7 @@ class KISStopmo(tk.Tk): def update_image(self, event=None, index=None): - # TODO : check event mode stille works + # TODO : check event mode still works if event is not None: self.img_index = self.check_range(self.img_index+1) if index is None: @@ -493,7 +497,10 @@ class KISStopmo(tk.Tk): photo = self.apply_onionskin(new_image, project_settings['onionskin_alpha_default'], project_settings['onionskin_fx']) self.label.configure(image=photo) self.label.image = photo - return new_image + # ~ return new_image + self.image = new_image + # ~ new_image.close() + return True else: return False @@ -514,11 +521,16 @@ class KISStopmo(tk.Tk): self.onion_skin = False onion_skin_was_on = True # playback + # TODO : Use async function for playback + # ~ self.playback = not self.playback for img in self.img_list: # ~ self.update_image(None, self.img_list.index(img)) + # ~ if self.playback: self.update_image(None, list(self.img_list.keys()).index(img)) root.update_idletasks() time.sleep(1/self.framerate) + # ~ else: + # ~ break # ~ self.update_image(None, self.img_index) self.display_last_frame() # restore OS state