image recoloring for little vGL

  • 定义slider的宽度

    #define SLIDER_WIDTH 40
  • 变量定义

    static lv_obj_t* red_slider, * green_slider, * blue_slider, * intense_slider, * img1;
    static lv_style_t img_style;
  • slider滑动回调函数

    
    static void slider_event_callback(lv_obj_t* obj, lv_event_t event)
    {
        if (event == LV_EVENT_VALUE_CHANGED)
        {
            /*Recolor the image based on the sliders' values*/
            img_style.image.color = lv_color_make(lv_slider_get_value(red_slider), lv_slider_get_value(green_slider),
                lv_slider_get_value(blue_slider));
            img_style.image.intense = lv_slider_get_value(intense_slider);
            lv_img_set_style(img1, LV_IMG_STYLE_MAIN, &img_style);
        }
    }
  • 图片数据引用及声明

    LV_IMG_DECLARE(my_jumper)
    

      图片资源下载地址

       链接:https://pan.baidu.com/s/1_Wk7PH93_bIh29pHsaOVRA 
       提取码:qq3b 

  • 创建R,G,B,intense等slider

    static void create_sliders(void)
    {
        /*Create a set of RGB sliders*/
        /*Use the red one as a base for all the settings*/
        red_slider = lv_slider_create(lv_scr_act(), NULL);
        lv_slider_set_range(red_slider, 0, 255);
        lv_obj_set_size(red_slider, SLIDER_WIDTH, 200);
    
        lv_obj_set_event_cb(red_slider, slider_event_callback);
    
        /*Create the intensity slider first,as it does not use any custom styles*/
        intense_slider = lv_slider_create(lv_scr_act(), red_slider);
        lv_slider_set_range(intense_slider, LV_OPA_TRANSP, LV_OPA_COVER);
        /*Create the slider knob and fill styles*/
        /*Fill styles are initialized with a gradient between black and the slider's respective color.*/
        /*Knob styles are simply filled with the slider's respective color.*/
    
        static lv_style_t slider_red_fill_style, slider_red_knob_style;
        lv_style_copy(&slider_red_fill_style, lv_slider_get_style(red_slider, LV_SLIDER_STYLE_INDIC));
        lv_style_copy(&slider_red_knob_style, lv_slider_get_style(red_slider, LV_SLIDER_STYLE_KNOB));
    
        slider_red_fill_style.body.main_color = lv_color_make(255, 0, 0);
        slider_red_fill_style.body.grad_color = LV_COLOR_BLACK;
    
        slider_red_knob_style.body.main_color = slider_red_fill_style.body.main_color;
        slider_red_knob_style.body.grad_color = slider_red_fill_style.body.main_color;
    
        static lv_style_t slider_green_fill_style, slider_green_knob_style;
        lv_style_copy(&slider_green_fill_style, &slider_red_fill_style);
        lv_style_copy(&slider_green_knob_style, &slider_red_knob_style);
    
        slider_green_fill_style.body.main_color = lv_color_make(0, 255, 0);
        slider_green_knob_style.body.main_color = slider_green_fill_style.body.main_color;
        slider_green_knob_style.body.grad_color = slider_green_fill_style.body.main_color;
    
        static lv_style_t slider_blue_fill_style, slider_blue_knob_style;
        lv_style_copy(&slider_blue_fill_style, &slider_red_fill_style);
        lv_style_copy(&slider_blue_knob_style, &slider_red_knob_style);
        slider_blue_fill_style.body.main_color = lv_color_make(0, 0, 255);
        slider_blue_knob_style.body.main_color = slider_blue_fill_style.body.main_color;
        slider_blue_knob_style.body.grad_color = slider_blue_fill_style.body.main_color;
        /*Set the red slider*/
        lv_slider_set_style(red_slider, LV_SLIDER_STYLE_INDIC, &slider_red_fill_style);
        lv_slider_set_style(red_slider, LV_SLIDER_STYLE_KNOB, &slider_red_knob_style);
    
        /*Copy it for the other two sliders*/
        green_slider = lv_slider_create(lv_scr_act(), red_slider);
        lv_slider_set_style(green_slider, LV_SLIDER_STYLE_INDIC, &slider_green_fill_style);
        lv_slider_set_style(green_slider, LV_SLIDER_STYLE_KNOB, &slider_green_knob_style);
    
        blue_slider = lv_slider_create(lv_scr_act(), red_slider);
        lv_slider_set_style(blue_slider, LV_SLIDER_STYLE_INDIC, &slider_blue_fill_style);
        lv_slider_set_style(blue_slider, LV_SLIDER_STYLE_KNOB, &slider_blue_knob_style);
    
        lv_obj_align(red_slider, NULL, LV_ALIGN_IN_LEFT_MID, 10, 0);
    
        lv_obj_align(green_slider, red_slider, LV_ALIGN_OUT_RIGHT_MID, 10, 0);
    
        lv_obj_align(blue_slider, green_slider, LV_ALIGN_OUT_RIGHT_MID, 10, 0);
    
        lv_obj_align(intense_slider, blue_slider, LV_ALIGN_OUT_RIGHT_MID, 10, 0);
    
    }
  • 图片着色处理实现

void image_recoloring_demo(void)
{
    /*Create 4 sliders to adjust RGB color and re-color intensity*/
    create_sliders();

    /*Now create the actual image*/
    img1 = lv_img_create(lv_scr_act(), NULL);
    lv_img_set_src(img1, &my_jumper);
    lv_obj_align(img1, intense_slider, LV_ALIGN_OUT_RIGHT_MID, 10, 0);

    /*Create a message box for information*/

    static const char* btns[] = { "OK","" };
    lv_obj_t* mbox = lv_mbox_create(lv_scr_act(), NULL);

    lv_mbox_set_text(mbox, "Welcome to the image recoloring demo!\nThe first \
three sliders control the RGB value of the recoloring.\n\
        The last slider controls the intensity.");
    lv_mbox_add_btns(mbox, btns);
    lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
    lv_style_copy(&img_style, lv_img_get_style(img1, LV_IMG_STYLE_MAIN));
}
  • 运行效果图

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值