mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-28 07:03:00 +08:00
canvas blur optimization
This commit is contained in:
parent
453165a34c
commit
32fb95e7af
@ -491,6 +491,7 @@ void lv_canvas_blur_ver(lv_obj_t * canvas, uint16_t r)
|
||||
|
||||
if((r & 0x1) == 0) r_back--;
|
||||
|
||||
bool has_alpha = lv_img_cf_has_alpha(ext->dsc.header.cf);
|
||||
lv_coord_t col_w = lv_img_buf_get_img_size(1, ext->dsc.header.h, ext->dsc.header.cf);
|
||||
uint8_t * col_buf = lv_draw_buf_get(col_w);
|
||||
lv_img_dsc_t line_img;
|
||||
@ -512,38 +513,41 @@ void lv_canvas_blur_ver(lv_obj_t * canvas, uint16_t r)
|
||||
uint32_t bsum = 0;
|
||||
|
||||
lv_color_t c;
|
||||
lv_opa_t opa = LV_OPA_TRANSP;
|
||||
lv_opa_t opa = LV_OPA_COVER;
|
||||
|
||||
for(y = -r_back; y <= r_front; y++) {
|
||||
y_safe = y < 0 ? 0 : y;
|
||||
|
||||
c = lv_img_buf_get_px_color(&ext->dsc, x, y_safe, style->image.color, false);
|
||||
opa = lv_img_buf_get_px_alpha(&ext->dsc, x, y_safe, false);
|
||||
if(has_alpha) opa = lv_img_buf_get_px_alpha(&ext->dsc, x, y_safe, false);
|
||||
|
||||
lv_img_buf_set_px_color(&line_img, 0, y_safe, c, false);
|
||||
lv_img_buf_set_px_alpha(&line_img, 0, y_safe, opa, false);
|
||||
if(has_alpha) lv_img_buf_set_px_alpha(&line_img, 0, y_safe, opa, false);
|
||||
|
||||
rsum += c.ch.red;
|
||||
gsum += c.ch.green;
|
||||
bsum += c.ch.blue;
|
||||
asum += opa;
|
||||
if(has_alpha) asum += opa;
|
||||
}
|
||||
|
||||
/*Just to indicate that the px is visible*/
|
||||
if(has_alpha == false) asum = LV_OPA_COVER;
|
||||
|
||||
for(y = 0; y < ext->dsc.header.h; y++) {
|
||||
if(asum) {
|
||||
c.ch.red = rsum / r;
|
||||
c.ch.green = gsum / r;
|
||||
c.ch.blue = bsum / r;
|
||||
opa = asum / r;
|
||||
if(has_alpha) opa = asum / r;
|
||||
|
||||
lv_img_buf_set_px_color(&ext->dsc, x, y, c, false);
|
||||
}
|
||||
lv_img_buf_set_px_alpha(&ext->dsc, x, y, opa, false);
|
||||
if(has_alpha) lv_img_buf_set_px_alpha(&ext->dsc, x, y, opa, false);
|
||||
|
||||
y_safe = y - r_back;
|
||||
y_safe = y_safe < 0 ? 0 : y_safe;
|
||||
c = lv_img_buf_get_px_color(&line_img, 0, y_safe, style->image.color, false);
|
||||
opa = lv_img_buf_get_px_alpha(&line_img, 0, y_safe, false);
|
||||
if(has_alpha) opa = lv_img_buf_get_px_alpha(&line_img, 0, y_safe, false);
|
||||
|
||||
rsum -= c.ch.red;
|
||||
gsum -= c.ch.green;
|
||||
@ -554,15 +558,15 @@ void lv_canvas_blur_ver(lv_obj_t * canvas, uint16_t r)
|
||||
y_safe = y_safe > ext->dsc.header.h - 1 ? ext->dsc.header.h - 1 : y_safe;
|
||||
|
||||
c = lv_img_buf_get_px_color(&ext->dsc, x, y_safe, style->image.color, false);
|
||||
opa = lv_img_buf_get_px_alpha(&ext->dsc, x, y_safe, false);
|
||||
if(has_alpha) opa = lv_img_buf_get_px_alpha(&ext->dsc, x, y_safe, false);
|
||||
|
||||
lv_img_buf_set_px_color(&line_img, 0, y_safe, c, false);
|
||||
lv_img_buf_set_px_alpha(&line_img, 0, y_safe, opa, false);
|
||||
if(has_alpha) lv_img_buf_set_px_alpha(&line_img, 0, y_safe, opa, false);
|
||||
|
||||
rsum += c.ch.red;
|
||||
gsum += c.ch.green;
|
||||
bsum += c.ch.blue;
|
||||
asum += opa;
|
||||
if(has_alpha) asum += opa;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user