transparent canvas with chroma keying for little vGL

  • 定義畫布尺寸

    #define TRANSPARENT_CANVAS_WIDTH    50
    #define TRANSPARENT_CANVAS_HIGHT    50
  • 創建一個button

    lv_btn_create(lv_scr_act(), NULL);
  • 定義畫布緩衝buffer,注意不能是局部的

    static lv_color_t cbuf[LV_CANVAS_BUF_SIZE_INDEXED_1BIT(TRANSPARENT_CANVAS_WIDTH,
        TRANSPARENT_CANVAS_HIGHT)];
  • 創建畫布對象

     lv_obj_t* canvas = lv_canvas_create(lv_scr_act(), NULL);
  • 設置關聯畫布緩衝buffer

     lv_canvas_set_buffer(canvas, cbuf, TRANSPARENT_CANVAS_WIDTH, TRANSPARENT_CANVAS_HIGHT, LV_IMG_CF_INDEXED_1BIT);
       
  •    設置透明和紅色2個調色盤

        lv_canvas_set_palette(canvas, 0, LV_COLOR_TRANSP);
        lv_canvas_set_palette(canvas, 1, LV_COLOR_RED);
  • 定義顏色變量C0,C1

        lv_color_t c0;
        lv_color_t c1;
        c0.full = 0;
        c1.full = 1;
    
  • 繪製C0,C1

    lv_canvas_fill_bg(canvas, c1);
    uint32_t x, y;
    for (y = 10; y < 30; y++)
    {
        for (x = 5; x < 20; x++)
        {
            lv_canvas_set_px(canvas, x, y, c0);
        }
    }
  • 完整的實現

#define TRANSPARENT_CANVAS_WIDTH    50
#define TRANSPARENT_CANVAS_HIGHT    50
void transparent_canvas_demo(void) {
    lv_btn_create(lv_scr_act(), NULL);
    static lv_color_t cbuf[LV_CANVAS_BUF_SIZE_INDEXED_1BIT(TRANSPARENT_CANVAS_WIDTH,
    TRANSPARENT_CANVAS_HIGHT)];

    lv_obj_t* canvas = lv_canvas_create(lv_scr_act(), NULL);
    lv_canvas_set_buffer(canvas, cbuf, TRANSPARENT_CANVAS_WIDTH, TRANSPARENT_CANVAS_HIGHT, LV_IMG_CF_INDEXED_1BIT);
    lv_canvas_set_palette(canvas, 0, LV_COLOR_TRANSP);
    lv_canvas_set_palette(canvas, 1, LV_COLOR_RED);
    lv_color_t c0;
    lv_color_t c1;
    c0.full = 0;
    c1.full = 1;

    lv_canvas_fill_bg(canvas, c1);
    uint32_t x, y;
    for (y = 10; y < 30; y++) {
        for (x = 5; x < 20; x++) {
            lv_canvas_set_px(canvas, x, y, c0);
        }
    }
}
  • 調用transparent_canvas_demo函數,編譯運行

 

發佈了78 篇原創文章 · 獲贊 24 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章