Skip to content
This repository was archived by the owner on Oct 28, 2023. It is now read-only.

Commit 65ca2d4

Browse files
committed
add badge.eink_png_info(filename or bytestring)
1 parent d24e2d9 commit 65ca2d4

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

esp32/modbadge.c

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,75 @@ STATIC mp_obj_t badge_eink_png(mp_obj_t obj_x, mp_obj_t obj_y, mp_obj_t obj_file
370370
}
371371
STATIC MP_DEFINE_CONST_FUN_OBJ_3(badge_eink_png_obj, badge_eink_png);
372372

373+
STATIC mp_obj_t badge_eink_png_info(mp_obj_t obj_filename)
374+
{
375+
lib_reader_read_t reader;
376+
void * reader_p;
377+
378+
bool is_bytes = MP_OBJ_IS_TYPE(obj_filename, &mp_type_bytes);
379+
380+
if (is_bytes) {
381+
size_t len;
382+
const uint8_t* png_data = (const uint8_t *) mp_obj_str_get_data(obj_filename, &len);
383+
struct lib_mem_reader *mr = lib_mem_new(png_data, len);
384+
if (mr == NULL)
385+
{
386+
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "out of memory!"));
387+
return mp_const_none;
388+
}
389+
reader = (lib_reader_read_t) &lib_mem_read;
390+
reader_p = mr;
391+
392+
} else {
393+
const char* filename = mp_obj_str_get_str(obj_filename);
394+
struct lib_file_reader *fr = lib_file_new(filename, 1024);
395+
if (fr == NULL)
396+
{
397+
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "Could not open file '%s'!",filename));
398+
return mp_const_none;
399+
}
400+
reader = (lib_reader_read_t) &lib_file_read;
401+
reader_p = fr;
402+
}
403+
404+
struct lib_png_reader *pr = lib_png_new(reader, reader_p);
405+
if (pr == NULL)
406+
{
407+
if (is_bytes) {
408+
lib_mem_destroy(reader_p);
409+
} else {
410+
lib_file_destroy(reader_p);
411+
}
412+
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "out of memory."));
413+
return mp_const_none;
414+
}
415+
416+
int res = lib_png_read_header(pr);
417+
418+
mp_obj_t tuple[4];
419+
if (res >= 0) {
420+
tuple[0] = mp_obj_new_int(pr->ihdr.width);
421+
tuple[1] = mp_obj_new_int(pr->ihdr.height);
422+
tuple[2] = mp_obj_new_int(pr->ihdr.bit_depth);
423+
tuple[3] = mp_obj_new_int(pr->ihdr.color_type);
424+
}
425+
426+
lib_png_destroy(pr);
427+
if (is_bytes) {
428+
lib_mem_destroy(reader_p);
429+
} else {
430+
lib_file_destroy(reader_p);
431+
}
432+
433+
if (res < 0)
434+
{
435+
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "failed to load image: res = %d", res));
436+
}
437+
438+
return mp_obj_new_tuple(4, tuple);
439+
}
440+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(badge_eink_png_info_obj, badge_eink_png_info);
441+
373442
/* END OF PNG READER TEST */
374443

375444

@@ -675,6 +744,7 @@ STATIC const mp_rom_map_elem_t badge_module_globals_table[] = {
675744
{MP_ROM_QSTR(MP_QSTR_eink_busy_wait), MP_ROM_PTR(&badge_eink_busy_wait_obj)},
676745

677746
{MP_ROM_QSTR(MP_QSTR_eink_png), MP_ROM_PTR(&badge_eink_png_obj)},
747+
{MP_ROM_QSTR(MP_QSTR_eink_png_info), MP_ROM_PTR(&badge_eink_png_info_obj)},
678748
{MP_ROM_QSTR(MP_QSTR_eink_display_raw), MP_ROM_PTR(&badge_eink_display_raw_obj)},
679749

680750
/*

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy