Skip to content

Commit b728aa7

Browse files
ImageView: add GIF support
1 parent 1993e93 commit b728aa7

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

draft_code/saved_functions.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,12 @@ def file_explorer_event_cb(e):
277277
print("done")
278278

279279

280+
screen = lv.obj()
281+
gif = lv.gif(screen)
282+
gif.set_src("M:data/images/tunnel_160x107.gif")
283+
gif.center()
284+
#gif.set_size(320,240)
285+
lv.screen_load(screen)
280286

281287
# BIN
282288
with open("/icon_64x64.bin", 'rb') as f:
@@ -619,6 +625,8 @@ def log_callback(level, log_str):
619625
lv.log_register_print_cb(log_callback)
620626

621627

628+
lv.log_register_print_cb(None)
629+
622630
# Function to get FPS
623631
def get_fps():
624632
return fps_buffer[0]

internal_filesystem/apps/com.micropythonos.imageview/assets/imageview.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,24 @@ class ImageView(Activity):
1515
images = []
1616
image_nr = None
1717
image_timer = None
18-
image = None
1918
fullscreen = False
2019

20+
# Widgets
21+
image = None
22+
gif = None
23+
2124
def onCreate(self):
2225
screen = lv.obj()
2326
self.image = lv.image(screen)
2427
self.image.center()
2528
self.image.add_flag(lv.obj.FLAG.CLICKABLE)
26-
#self.image.add_event_cb(self.print_events, lv.EVENT.ALL, None)
2729
self.image.add_event_cb(lambda e: self.toggle_fullscreen(),lv.EVENT.CLICKED,None)
30+
self.gif = lv.gif(screen)
31+
self.gif.center()
32+
self.gif.add_flag(lv.obj.FLAG.CLICKABLE)
33+
self.gif.add_flag(lv.obj.FLAG.HIDDEN)
34+
self.gif.add_event_cb(lambda e: self.toggle_fullscreen(),lv.EVENT.CLICKED,None)
35+
#self.image.add_event_cb(self.print_events, lv.EVENT.ALL, None)
2836
self.label = lv.label(screen)
2937
self.label.set_text('Loading images from\n{self.imagedir}')
3038
self.label.align(lv.ALIGN.TOP_MID,0,0)
@@ -57,7 +65,8 @@ def onResume(self, screen):
5765
self.images.clear()
5866
for item in os.listdir(self.imagedir):
5967
print(item)
60-
if item.endswith(".jpg") or item.endswith(".jpeg") or item.endswith(".png") or item.endswith(".raw"):
68+
lowercase = item.lower()
69+
if lowercase.endswith(".jpg") or lowercase.endswith(".jpeg") or lowercase.endswith(".png") or lowercase.endswith(".raw") or lowercase.endswith(".gif"):
6170
fullname = f"{self.imagedir}/{item}"
6271
size = os.stat(fullname)[6]
6372
print(f"size: {size}")
@@ -189,7 +198,17 @@ def extract_dimensions_and_format(self, filename):
189198
def show_image(self, name):
190199
try:
191200
self.label.set_text(name)
192-
if name.endswith(".raw"):
201+
if name.lower().endswith(".gif"):
202+
print("switching to gif mode...")
203+
self.image.add_flag(lv.obj.FLAG.HIDDEN)
204+
self.gif.remove_flag(lv.obj.FLAG.HIDDEN)
205+
self.gif.set_src(f"M:{name}")
206+
else:
207+
self.gif.add_flag(lv.obj.FLAG.HIDDEN)
208+
self.image.remove_flag(lv.obj.FLAG.HIDDEN)
209+
self.image.set_src(f"M:{name}")
210+
211+
if name.lower().endswith(".raw"):
193212
f = open(name, 'rb')
194213
image_data = f.read()
195214
print(f"loaded {len(image_data)} bytes from .raw file")
@@ -212,8 +231,6 @@ def show_image(self, name):
212231
'data': image_data
213232
})
214233
self.image.set_src(image_dsc)
215-
else:
216-
self.image.set_src(f"M:{name}")
217234
self.scale_image()
218235
except OSError as e:
219236
print(f"show_image got exception: {e}")
@@ -235,6 +252,7 @@ def scale_image(self):
235252
scale_factor_h = round(lvgl_h * 256 / image_h)
236253
print(f"scale_factors: {scale_factor_w},{scale_factor_h}")
237254
self.image.set_size(lvgl_w, lvgl_h)
255+
#self.gif.set_size(lvgl_w, lvgl_h) doesn't seem to do anything. get_style_transform_scale_x/y works but then it needs get_style_translate_x/y
238256
#self.image.set_scale(max(scale_factor_w,scale_factor_h)) # fills the entire screen but cuts off borders
239257
self.image.set_scale(min(scale_factor_w,scale_factor_h))
240258
print(f"after set_scale, the LVGL image has size: {self.image.get_width()}x{self.image.get_height()}")

0 commit comments

Comments
 (0)