diff --git a/src/draw/vg_lite/lv_draw_vg_lite_img.c b/src/draw/vg_lite/lv_draw_vg_lite_img.c index b24208dcc..55c517720 100644 --- a/src/draw/vg_lite/lv_draw_vg_lite_img.c +++ b/src/draw/vg_lite/lv_draw_vg_lite_img.c @@ -82,17 +82,7 @@ void lv_draw_vg_lite_img(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t * return; } - vg_lite_color_t color = 0; - if(LV_COLOR_FORMAT_IS_ALPHA_ONLY(decoder_dsc.decoded->header.cf) || dsc->recolor_opa > LV_OPA_TRANSP) { - /* alpha image and image recolor */ - src_buf.image_mode = VG_LITE_MULTIPLY_IMAGE_MODE; - color = lv_vg_lite_color(dsc->recolor, LV_OPA_MIX2(dsc->opa, dsc->recolor_opa), true); - } - else if(dsc->opa < LV_OPA_COVER) { - /* normal image opa */ - src_buf.image_mode = VG_LITE_MULTIPLY_IMAGE_MODE; - lv_memset(&color, dsc->opa, sizeof(color)); - } + vg_lite_color_t color = lv_vg_lite_image_recolor(&src_buf, dsc); /* convert the blend mode to vg-lite blend mode, considering the premultiplied alpha */ bool has_pre_mul = lv_draw_buf_has_flag(decoder_dsc.decoded, LV_IMAGE_FLAGS_PREMULTIPLIED); diff --git a/src/draw/vg_lite/lv_draw_vg_lite_vector.c b/src/draw/vg_lite/lv_draw_vg_lite_vector.c index 343b21ac3..6a1b454ee 100644 --- a/src/draw/vg_lite/lv_draw_vg_lite_vector.c +++ b/src/draw/vg_lite/lv_draw_vg_lite_vector.c @@ -246,7 +246,7 @@ static void task_draw_cb(void * ctx, const lv_vector_path_t * path, const lv_vec vg_lite_matrix_t pattern_matrix; lv_vg_lite_matrix(&pattern_matrix, &m); - vg_lite_color_t recolor = lv_vg_lite_color(dsc->fill_dsc.img_dsc.recolor, dsc->fill_dsc.img_dsc.recolor_opa, true); + vg_lite_color_t recolor = lv_vg_lite_image_recolor(&image_buffer, &dsc->fill_dsc.img_dsc); LV_VG_LITE_ASSERT_MATRIX(&pattern_matrix); diff --git a/src/draw/vg_lite/lv_vg_lite_utils.c b/src/draw/vg_lite/lv_vg_lite_utils.c index 266049905..eb48fe8a7 100644 --- a/src/draw/vg_lite/lv_vg_lite_utils.c +++ b/src/draw/vg_lite/lv_vg_lite_utils.c @@ -780,6 +780,28 @@ void lv_vg_lite_image_matrix(vg_lite_matrix_t * matrix, int32_t x, int32_t y, co } } +vg_lite_color_t lv_vg_lite_image_recolor(vg_lite_buffer_t * buffer, const lv_draw_image_dsc_t * dsc) +{ + LV_ASSERT_NULL(buffer); + LV_ASSERT_NULL(dsc); + + if((buffer->format == VG_LITE_A4 || buffer->format == VG_LITE_A8) || dsc->recolor_opa > LV_OPA_TRANSP) { + /* alpha image and image recolor */ + buffer->image_mode = VG_LITE_MULTIPLY_IMAGE_MODE; + return lv_vg_lite_color(dsc->recolor, LV_OPA_MIX2(dsc->opa, dsc->recolor_opa), true); + } + + if(dsc->opa < LV_OPA_COVER) { + /* normal image opa */ + buffer->image_mode = VG_LITE_MULTIPLY_IMAGE_MODE; + vg_lite_color_t color; + lv_memset(&color, dsc->opa, sizeof(color)); + return color; + } + + return 0; +} + bool lv_vg_lite_buffer_open_image(vg_lite_buffer_t * buffer, lv_image_decoder_dsc_t * decoder_dsc, const void * src, bool no_cache, bool premultiply) { diff --git a/src/draw/vg_lite/lv_vg_lite_utils.h b/src/draw/vg_lite/lv_vg_lite_utils.h index e6fc51ac4..3a6ebd038 100644 --- a/src/draw/vg_lite/lv_vg_lite_utils.h +++ b/src/draw/vg_lite/lv_vg_lite_utils.h @@ -130,7 +130,7 @@ void lv_vg_lite_buffer_from_draw_buf(vg_lite_buffer_t * buffer, const lv_draw_bu void lv_vg_lite_image_matrix(vg_lite_matrix_t * matrix, int32_t x, int32_t y, const lv_draw_image_dsc_t * dsc); -void lv_vg_lite_image_dec_init(vg_lite_matrix_t * matrix, int32_t x, int32_t y, const lv_draw_image_dsc_t * dsc); +vg_lite_color_t lv_vg_lite_image_recolor(vg_lite_buffer_t * buffer, const lv_draw_image_dsc_t * dsc); bool lv_vg_lite_buffer_open_image(vg_lite_buffer_t * buffer, lv_image_decoder_dsc_t * decoder_dsc, const void * src, bool no_cache, bool premultiply); diff --git a/tests/ref_imgs_vg_lite/draw/svg_draw_svg_image_4.lp32.png b/tests/ref_imgs_vg_lite/draw/svg_draw_svg_image_4.lp32.png index c2990c7ac..de66f0de3 100644 Binary files a/tests/ref_imgs_vg_lite/draw/svg_draw_svg_image_4.lp32.png and b/tests/ref_imgs_vg_lite/draw/svg_draw_svg_image_4.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/svg_draw_svg_image_4.lp64.png b/tests/ref_imgs_vg_lite/draw/svg_draw_svg_image_4.lp64.png index c2990c7ac..de66f0de3 100644 Binary files a/tests/ref_imgs_vg_lite/draw/svg_draw_svg_image_4.lp64.png and b/tests/ref_imgs_vg_lite/draw/svg_draw_svg_image_4.lp64.png differ