diff --git a/src/draw/sw/lv_draw_sw_vector.c b/src/draw/sw/lv_draw_sw_vector.c index efe1df1aa3..b9002975ef 100644 --- a/src/draw/sw/lv_draw_sw_vector.c +++ b/src/draw/sw/lv_draw_sw_vector.c @@ -299,7 +299,6 @@ static void _set_paint_fill_pattern(Tvg_Paint * obj, Tvg_Canvas * canvas, const return; } - const uint8_t * src_buf = decoder_dsc.decoded->data; const lv_image_header_t * header = &decoder_dsc.decoded->header; lv_color_format_t cf = header->cf; @@ -309,8 +308,21 @@ static void _set_paint_fill_pattern(Tvg_Paint * obj, Tvg_Canvas * canvas, const return; } + const uint32_t tvg_stride = header->w * sizeof(uint32_t); + if(header->stride != tvg_stride) { + LV_LOG_WARN("img_stride != tvg_stride (%" LV_PRIu32 " != %" LV_PRIu32 "), width = %" LV_PRIu32, + (uint32_t)header->stride, + tvg_stride, (uint32_t)header->w); + lv_result_t result = lv_draw_buf_adjust_stride((lv_draw_buf_t *)decoder_dsc.decoded, tvg_stride); + if(result != LV_RESULT_OK) { + lv_image_decoder_close(&decoder_dsc); + LV_LOG_ERROR("Failed to adjust stride"); + return; + } + } + Tvg_Paint * img = tvg_picture_new(); - tvg_picture_load_raw(img, (uint32_t *)src_buf, header->w, header->h, true); + tvg_picture_load_raw(img, (uint32_t *)decoder_dsc.decoded->data, header->w, header->h, true); Tvg_Paint * clip_path = tvg_paint_duplicate(obj); tvg_paint_set_composite_method(img, clip_path, TVG_COMPOSITE_METHOD_CLIP_PATH); tvg_paint_set_opacity(img, LV_UDIV255(p->opa * opa)); diff --git a/tests/ref_imgs/draw/vector_draw_shapes.lp32.png b/tests/ref_imgs/draw/vector_draw_shapes.lp32.png index c5260f8a50..a3d3504f2e 100644 Binary files a/tests/ref_imgs/draw/vector_draw_shapes.lp32.png and b/tests/ref_imgs/draw/vector_draw_shapes.lp32.png differ diff --git a/tests/ref_imgs/draw/vector_draw_shapes.lp64.png b/tests/ref_imgs/draw/vector_draw_shapes.lp64.png index 1d2d5175df..c777e2f7e0 100644 Binary files a/tests/ref_imgs/draw/vector_draw_shapes.lp64.png and b/tests/ref_imgs/draw/vector_draw_shapes.lp64.png differ diff --git a/tests/ref_imgs/draw/vector_draw_shapes_during_rendering.lp32.png b/tests/ref_imgs/draw/vector_draw_shapes_during_rendering.lp32.png index e49d30ea2a..09940438dc 100644 Binary files a/tests/ref_imgs/draw/vector_draw_shapes_during_rendering.lp32.png and b/tests/ref_imgs/draw/vector_draw_shapes_during_rendering.lp32.png differ diff --git a/tests/ref_imgs/draw/vector_draw_shapes_during_rendering.lp64.png b/tests/ref_imgs/draw/vector_draw_shapes_during_rendering.lp64.png index 8633cefe23..528e6ed528 100644 Binary files a/tests/ref_imgs/draw/vector_draw_shapes_during_rendering.lp64.png and b/tests/ref_imgs/draw/vector_draw_shapes_during_rendering.lp64.png differ diff --git a/tests/ref_imgs/draw/vector_draw_shapes_opa_50_during_rendering.lp32.png b/tests/ref_imgs/draw/vector_draw_shapes_opa_50_during_rendering.lp32.png old mode 100755 new mode 100644 index 1d99e2ff32..55f7856eed Binary files a/tests/ref_imgs/draw/vector_draw_shapes_opa_50_during_rendering.lp32.png and b/tests/ref_imgs/draw/vector_draw_shapes_opa_50_during_rendering.lp32.png differ diff --git a/tests/ref_imgs/draw/vector_draw_shapes_opa_50_during_rendering.lp64.png b/tests/ref_imgs/draw/vector_draw_shapes_opa_50_during_rendering.lp64.png index 10ededf74e..64e8ee615a 100644 Binary files a/tests/ref_imgs/draw/vector_draw_shapes_opa_50_during_rendering.lp64.png and b/tests/ref_imgs/draw/vector_draw_shapes_opa_50_during_rendering.lp64.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes.lp32.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes.lp32.png index 733f81abea..5fdc36e9f4 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes.lp32.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes.lp64.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes.lp64.png index ba67e807f1..8b0910552e 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes.lp64.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes.lp64.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_0_during_rendering.lp32.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_0_during_rendering.lp32.png index d10a270a02..3b8cb670aa 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_0_during_rendering.lp32.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_0_during_rendering.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_0_during_rendering.lp64.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_0_during_rendering.lp64.png index c6d1a6a220..970d44af83 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_0_during_rendering.lp64.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_0_during_rendering.lp64.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp32.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp32.png index a3769260bd..941b733bf4 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp32.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp64.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp64.png index 958f3c0786..02f0ee56d1 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp64.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp64.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp32.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp32.png index 86308cefc0..fff85b673b 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp32.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp64.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp64.png index beea70faec..66a64a1cca 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp64.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp64.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp32.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp32.png index f4b4952a9d..ca176ae989 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp32.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp64.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp64.png index 2b0ef25a68..4213f6f8fd 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp64.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp64.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_during_rendering.lp32.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_during_rendering.lp32.png index d10a270a02..3b8cb670aa 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_during_rendering.lp32.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_during_rendering.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_during_rendering.lp64.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_during_rendering.lp64.png index c6d1a6a220..970d44af83 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_during_rendering.lp64.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_during_rendering.lp64.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_opa_50_during_rendering.lp32.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_opa_50_during_rendering.lp32.png old mode 100755 new mode 100644 index 60dc7040a4..d1b8d358c9 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_opa_50_during_rendering.lp32.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_opa_50_during_rendering.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_opa_50_during_rendering.lp64.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_opa_50_during_rendering.lp64.png index f8197a5311..cdecb95120 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_opa_50_during_rendering.lp64.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_opa_50_during_rendering.lp64.png differ diff --git a/tests/src/test_cases/draw/test_draw_vector.c b/tests/src/test_cases/draw/test_draw_vector.c index f3506ff93c..1a42eb6f8f 100644 --- a/tests/src/test_cases/draw/test_draw_vector.c +++ b/tests/src/test_cases/draw/test_draw_vector.c @@ -164,6 +164,24 @@ static void draw_shapes(lv_layer_t * layer, const lv_matrix_t * transform) lv_vector_path_append_rect(path, &img_area, 0, 0); lv_vector_dsc_add_path(ctx, path); + /* Test PNG image file */ + lv_vector_path_clear(path); + lv_area_t rect3 = {200, 360, 0, 0}; + lv_area_set_width(&rect3, 200); + lv_area_set_height(&rect3, 100); + lv_vector_path_append_rect(path, &rect3, 0, 0); + + lv_draw_image_dsc_init(&img_dsc); + img_dsc.src = "A:src/test_assets/test_img_lvgl_logo.png"; + lv_vector_dsc_set_transform(ctx, transform); + lv_vector_dsc_set_fill_units(ctx, LV_VECTOR_FILL_UNITS_OBJECT_BOUNDING_BOX); + lv_vector_dsc_set_fill_image(ctx, &img_dsc); + lv_vector_dsc_set_fill_opa(ctx, LV_OPA_COVER); + + lv_matrix_identity(&mt); + lv_vector_dsc_set_fill_transform(ctx, &mt); + lv_vector_dsc_add_path(ctx, path); + lv_draw_vector(ctx); lv_vector_path_delete(path); lv_vector_dsc_delete(ctx);