@@ -229,13 +229,40 @@ STATIC mp_obj_t bitmapfilter_mix(size_t n_args, const mp_obj_t *pos_args, mp_map
229229 shared_module_bitmapfilter_mix (bitmap , mask , weights );
230230 return mp_const_none ;
231231}
232-
233232MP_DEFINE_CONST_FUN_OBJ_KW (bitmapfilter_mix_obj , 0 , bitmapfilter_mix );
234233
234+ STATIC mp_obj_t bitmapfilter_solarize (size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
235+ enum { ARG_bitmap , ARG_threshold , ARG_mask };
236+ static const mp_arg_t allowed_args [] = {
237+ { MP_QSTR_bitmap , MP_ARG_REQUIRED | MP_ARG_OBJ , { .u_obj = MP_OBJ_NULL } },
238+ { MP_QSTR_threshold , MP_ARG_OBJ , { .u_obj = MP_OBJ_NULL } },
239+ { MP_QSTR_mask , MP_ARG_OBJ , { .u_obj = MP_ROM_NONE } },
240+ };
241+ mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
242+ mp_arg_parse_all (n_args , pos_args , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
243+
244+ mp_float_t threshold = (args [ARG_threshold ].u_obj == NULL ) ? MICROPY_FLOAT_CONST (0.5 ) : mp_obj_get_float (args [ARG_threshold ].u_obj );
245+ mp_arg_validate_type (args [ARG_bitmap ].u_obj , & displayio_bitmap_type , MP_QSTR_bitmap );
246+ displayio_bitmap_t * bitmap = MP_OBJ_TO_PTR (args [ARG_bitmap ].u_obj );
247+
248+
249+ displayio_bitmap_t * mask = NULL ;
250+ if (args [ARG_mask ].u_obj != mp_const_none ) {
251+ mp_arg_validate_type (args [ARG_mask ].u_obj , & displayio_bitmap_type , MP_QSTR_mask );
252+ mask = MP_OBJ_TO_PTR (args [ARG_mask ].u_obj );
253+ }
254+
255+ shared_module_bitmapfilter_solarize (bitmap , mask , threshold );
256+ return mp_const_none ;
257+ }
258+
259+ MP_DEFINE_CONST_FUN_OBJ_KW (bitmapfilter_solarize_obj , 0 , bitmapfilter_solarize );
260+
235261STATIC const mp_rom_map_elem_t bitmapfilter_module_globals_table [] = {
236262 { MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_bitmapfilter ) },
237263 { MP_ROM_QSTR (MP_QSTR_morph ), MP_ROM_PTR (& bitmapfilter_morph_obj ) },
238264 { MP_ROM_QSTR (MP_QSTR_mix ), MP_ROM_PTR (& bitmapfilter_mix_obj ) },
265+ { MP_ROM_QSTR (MP_QSTR_solarize ), MP_ROM_PTR (& bitmapfilter_solarize_obj ) },
239266};
240267STATIC MP_DEFINE_CONST_DICT (bitmapfilter_module_globals , bitmapfilter_module_globals_table );
241268
0 commit comments