Canvas don't work on M5Stack Core 2



  • I'm try run simple code:

    import lvgl as lv
    
    def LV_IMG_BUF_SIZE_ALPHA_1BIT(w, h):
        return int(((w / 8) + 1) * h)
    
    def LV_IMG_BUF_SIZE_INDEXED_1BIT(w, h):
        return LV_IMG_BUF_SIZE_ALPHA_1BIT(w, h) + 4 * 2
    
    def LV_CANVAS_BUF_SIZE_INDEXED_1BIT(w, h):
        return LV_IMG_BUF_SIZE_INDEXED_1BIT(w, h)
    
    CANVAS_WIDTH  = 50
    CANVAS_HEIGHT = 50
    
    # Create a buffer for the canvas
    cbuf= bytearray(LV_CANVAS_BUF_SIZE_INDEXED_1BIT(CANVAS_WIDTH, CANVAS_HEIGHT))
    
    # Create a canvas and initialize its the palette
    canvas = lv.canvas(lv.scr_act(), None)
    canvas.set_buffer(cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, lv.img.CF.INDEXED_1BIT)
    canvas.set_palette(0, lv.color_hex(0x00ff00))
    canvas.set_palette(1, lv.color_hex(0xff0000))
    
    # 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, lv.OPA.TRANSP)
    
    # Create hole on the canvas
    for y in range(10,30):
        for x in range(5,20):
            canvas.set_px(x, y, c0)
    

    An error occurs when running the code.

    Traceback (most recent call last):
      File "<stdin>", line 19, in <module>
    AttributeError: 'NoneType' object has no attribute '__dereference__'
    

    But everything works in the lvgl simulator.



  • @pavelprosto Its very hard to diagnose issue in MP as sometimes the error message does not actually point to the issue!
    The error could be
    canvas.fill_bg(c1, lv.OPA.TRANSP)

    or
    canvas.set_palette(1, lv.color_hex(0xff0000))



  • code:

    import lvgl as lv
    canvas = lv.canvas(lv.scr_act(), None)
    

    error:

    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
    AttributeError: 'NoneType' object has no attribute '__dereference__'