A39模拟器
This commit is contained in:
19
MXC-A39/lvgl/examples/widgets/canvas/index.rst
Normal file
19
MXC-A39/lvgl/examples/widgets/canvas/index.rst
Normal file
@ -0,0 +1,19 @@
|
||||
C
|
||||
^
|
||||
|
||||
Drawing on the Canvas and rotate
|
||||
""""""""""""""""""""""""""""""""""
|
||||
|
||||
.. lv_example:: widgets/canvas/lv_example_canvas_1
|
||||
:language: c
|
||||
|
||||
Transparent Canvas with chroma keying
|
||||
""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
.. lv_example:: widgets/canvas/lv_example_canvas_2
|
||||
:language: c
|
||||
|
||||
MicroPython
|
||||
^^^^^^^^^^^
|
||||
|
||||
No examples yet.
|
53
MXC-A39/lvgl/examples/widgets/canvas/lv_example_canvas_1.c
Normal file
53
MXC-A39/lvgl/examples/widgets/canvas/lv_example_canvas_1.c
Normal file
@ -0,0 +1,53 @@
|
||||
#include "../../lv_examples.h"
|
||||
#if LV_USE_CANVAS && LV_BUILD_EXAMPLES
|
||||
|
||||
|
||||
#define CANVAS_WIDTH 200
|
||||
#define CANVAS_HEIGHT 150
|
||||
|
||||
void lv_example_canvas_1(void)
|
||||
{
|
||||
lv_draw_rect_dsc_t rect_dsc;
|
||||
lv_draw_rect_dsc_init(&rect_dsc);
|
||||
rect_dsc.radius = 10;
|
||||
rect_dsc.bg_opa = LV_OPA_COVER;
|
||||
rect_dsc.bg_grad_dir = LV_GRAD_DIR_HOR;
|
||||
rect_dsc.bg_color = lv_palette_main(LV_PALETTE_RED);
|
||||
rect_dsc.bg_grad_color = lv_palette_main(LV_PALETTE_BLUE);
|
||||
rect_dsc.border_width = 2;
|
||||
rect_dsc.border_opa = LV_OPA_90;
|
||||
rect_dsc.border_color = lv_color_white();
|
||||
rect_dsc.shadow_width = 5;
|
||||
rect_dsc.shadow_ofs_x = 5;
|
||||
rect_dsc.shadow_ofs_y = 5;
|
||||
|
||||
lv_draw_label_dsc_t label_dsc;
|
||||
lv_draw_label_dsc_init(&label_dsc);
|
||||
label_dsc.color = lv_palette_main(LV_PALETTE_YELLOW);
|
||||
|
||||
static lv_color_t cbuf[LV_CANVAS_BUF_SIZE_TRUE_COLOR(CANVAS_WIDTH, CANVAS_HEIGHT)];
|
||||
|
||||
lv_obj_t * canvas = lv_canvas_create(lv_scr_act());
|
||||
lv_canvas_set_buffer(canvas, cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, LV_IMG_CF_TRUE_COLOR);
|
||||
lv_obj_center(canvas);
|
||||
lv_canvas_fill_bg(canvas, lv_palette_lighten(LV_PALETTE_GREY, 3), LV_OPA_COVER);
|
||||
|
||||
lv_canvas_draw_rect(canvas, 70, 60, 100, 70, &rect_dsc);
|
||||
|
||||
lv_canvas_draw_text(canvas, 40, 20, 100, &label_dsc, "Some text on text canvas");
|
||||
|
||||
/*Test the rotation. It requires an other buffer where the orignal image is stored.
|
||||
*So copy the current image to buffer and rotate it to the canvas*/
|
||||
static lv_color_t cbuf_tmp[CANVAS_WIDTH * CANVAS_HEIGHT];
|
||||
memcpy(cbuf_tmp, cbuf, sizeof(cbuf_tmp));
|
||||
lv_img_dsc_t img;
|
||||
img.data = (void *)cbuf_tmp;
|
||||
img.header.cf = LV_IMG_CF_TRUE_COLOR;
|
||||
img.header.w = CANVAS_WIDTH;
|
||||
img.header.h = CANVAS_HEIGHT;
|
||||
|
||||
lv_canvas_fill_bg(canvas, lv_palette_lighten(LV_PALETTE_GREY, 3), LV_OPA_COVER);
|
||||
lv_canvas_transform(canvas, &img, 30, LV_IMG_ZOOM_NONE, 0, 0, CANVAS_WIDTH / 2, CANVAS_HEIGHT / 2, true);
|
||||
}
|
||||
|
||||
#endif
|
38
MXC-A39/lvgl/examples/widgets/canvas/lv_example_canvas_1.py
Normal file
38
MXC-A39/lvgl/examples/widgets/canvas/lv_example_canvas_1.py
Normal file
@ -0,0 +1,38 @@
|
||||
CANVAS_WIDTH = 200
|
||||
CANVAS_HEIGHT = 150
|
||||
|
||||
style = lv.style_t()
|
||||
lv.style_copy(style, lv.style_plain)
|
||||
style.body.main_color = lv.color_make(0xFF,0,0)
|
||||
style.body.grad_color = lv.color_make(0x80,0,0)
|
||||
style.body.radius = 4
|
||||
style.body.border.width = 2
|
||||
style.body.border.color = lv.color_make(0xFF,0xFF,0xFF)
|
||||
style.body.shadow.color = lv.color_make(0xFF,0xFF,0xFF)
|
||||
style.body.shadow.width = 4
|
||||
style.line.width = 2
|
||||
style.line.color = lv.color_make(0,0,0)
|
||||
style.text.color = lv.color_make(0,0,0xFF)
|
||||
|
||||
# CF.TRUE_COLOR requires 4 bytes per pixel
|
||||
cbuf = bytearray(CANVAS_WIDTH * CANVAS_HEIGHT * 4)
|
||||
|
||||
canvas = lv.canvas(lv.scr_act())
|
||||
canvas.set_buffer(cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, lv.img.CF.TRUE_COLOR)
|
||||
canvas.align(None, lv.ALIGN.CENTER, 0, 0)
|
||||
canvas.fill_bg(lv.color_make(0xC0, 0xC0, 0xC0))
|
||||
|
||||
canvas.draw_rect(70, 60, 100, 70, style)
|
||||
|
||||
canvas.draw_text(40, 20, 100, style, "Some text on text canvas", lv.label.ALIGN.LEFT)
|
||||
|
||||
# Test the rotation. It requires an other buffer where the orignal image is stored.
|
||||
# So copy the current image to buffer and rotate it to the canvas
|
||||
img = lv.img_dsc_t()
|
||||
img.data = cbuf[:]
|
||||
img.header.cf = lv.img.CF.TRUE_COLOR
|
||||
img.header.w = CANVAS_WIDTH
|
||||
img.header.h = CANVAS_HEIGHT
|
||||
|
||||
canvas.fill_bg(lv.color_make(0xC0, 0xC0, 0xC0))
|
||||
canvas.rotate(img, 30, 0, 0, CANVAS_WIDTH // 2, CANVAS_HEIGHT // 2)
|
44
MXC-A39/lvgl/examples/widgets/canvas/lv_example_canvas_2.c
Normal file
44
MXC-A39/lvgl/examples/widgets/canvas/lv_example_canvas_2.c
Normal file
@ -0,0 +1,44 @@
|
||||
#include "../../lv_examples.h"
|
||||
#if LV_USE_CANVAS && LV_BUILD_EXAMPLES
|
||||
|
||||
#define CANVAS_WIDTH 50
|
||||
#define CANVAS_HEIGHT 50
|
||||
|
||||
/**
|
||||
* Create a transparent canvas with Chroma keying and indexed color format (palette).
|
||||
*/
|
||||
void lv_example_canvas_2(void)
|
||||
{
|
||||
/*Create a button to better see the transparency*/
|
||||
lv_btn_create(lv_scr_act());
|
||||
|
||||
/*Create a buffer for the canvas*/
|
||||
static lv_color_t cbuf[LV_CANVAS_BUF_SIZE_INDEXED_1BIT(CANVAS_WIDTH, CANVAS_HEIGHT)];
|
||||
|
||||
/*Create a canvas and initialize its the palette*/
|
||||
lv_obj_t * canvas = lv_canvas_create(lv_scr_act());
|
||||
lv_canvas_set_buffer(canvas, cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, LV_IMG_CF_INDEXED_1BIT);
|
||||
lv_canvas_set_palette(canvas, 0, LV_COLOR_CHROMA_KEY);
|
||||
lv_canvas_set_palette(canvas, 1, lv_palette_main(LV_PALETTE_RED));
|
||||
|
||||
/*Create colors with the indices of the palette*/
|
||||
lv_color_t c0;
|
||||
lv_color_t c1;
|
||||
|
||||
c0.full = 0;
|
||||
c1.full = 1;
|
||||
|
||||
/*Red background (There is no dedicated alpha channel in indexed images so LV_OPA_COVER is ignored)*/
|
||||
lv_canvas_fill_bg(canvas, c1, LV_OPA_COVER);
|
||||
|
||||
/*Create hole on the canvas*/
|
||||
uint32_t x;
|
||||
uint32_t y;
|
||||
for( y = 10; y < 30; y++) {
|
||||
for( x = 5; x < 20; x++) {
|
||||
lv_canvas_set_px(canvas, x, y, c0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
41
MXC-A39/lvgl/examples/widgets/canvas/lv_example_canvas_2.py
Normal file
41
MXC-A39/lvgl/examples/widgets/canvas/lv_example_canvas_2.py
Normal file
@ -0,0 +1,41 @@
|
||||
# Create a transparent canvas with Chroma keying and indexed color format (palette).
|
||||
|
||||
CANVAS_WIDTH = 50
|
||||
CANVAS_HEIGHT = 50
|
||||
|
||||
def bufsize(w, h, bits, indexed=False):
|
||||
"""this function determines required buffer size
|
||||
depending on the color depth"""
|
||||
size = (w * bits // 8 + 1) * h
|
||||
if indexed:
|
||||
# + 4 bytes per palette color
|
||||
size += 4 * (2**bits)
|
||||
return size
|
||||
|
||||
# Create a button to better see the transparency
|
||||
lv.btn(lv.scr_act())
|
||||
|
||||
# Create a buffer for the canvas
|
||||
cbuf = bytearray(bufsize(CANVAS_WIDTH, CANVAS_HEIGHT, 1, indexed=True))
|
||||
|
||||
# Create a canvas and initialize its the palette
|
||||
canvas = lv.canvas(lv.scr_act())
|
||||
canvas.set_buffer(cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, lv.img.CF.INDEXED_1BIT)
|
||||
# transparent color can be defined in lv_conf.h and set to pure green by default
|
||||
canvas.set_palette(0, lv.color_make(0x00, 0xFF, 0x00))
|
||||
canvas.set_palette(1, lv.color_make(0xFF, 0x00, 0x00))
|
||||
|
||||
# Create colors with the indices of the palette
|
||||
c0 = lv.color_t()
|
||||
c1 = lv.color_t()
|
||||
|
||||
c0.full = 0
|
||||
c1.full = 1
|
||||
|
||||
# Transparent background
|
||||
canvas.fill_bg(c1)
|
||||
|
||||
# Create hole on the canvas
|
||||
for y in range(10,30):
|
||||
for x in range(5, 20):
|
||||
canvas.set_px(x, y, c0)
|
Reference in New Issue
Block a user