@@ -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
370
370
}
371
371
STATIC MP_DEFINE_CONST_FUN_OBJ_3 (badge_eink_png_obj , badge_eink_png );
372
372
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
+
373
442
/* END OF PNG READER TEST */
374
443
375
444
@@ -675,6 +744,7 @@ STATIC const mp_rom_map_elem_t badge_module_globals_table[] = {
675
744
{MP_ROM_QSTR (MP_QSTR_eink_busy_wait ), MP_ROM_PTR (& badge_eink_busy_wait_obj )},
676
745
677
746
{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 )},
678
748
{MP_ROM_QSTR (MP_QSTR_eink_display_raw ), MP_ROM_PTR (& badge_eink_display_raw_obj )},
679
749
680
750
/*
0 commit comments