Display Example Explanation#
Overview#
The K230 is equipped with one MIPI-DSI (1x4 lane) interface, which can drive a MIPI screen or convert to drive an HDMI monitor through an interface chip. Additionally, for convenience during debugging, we also support a virtual display. Users can choose the VIRT output device to preview images in CanMV-IDE even without an HDMI monitor or LCD screen.
Examples#
Using HDMI to Output Images#
This example outputs a 1080P image via an HDMI display.
import time
import os
import urandom
import sys
from media.display import *
from media.media import *
DISPLAY_WIDTH = ALIGN_UP(1920, 16)
DISPLAY_HEIGHT = 1080
def display_test():
print("display test")
# Create an image for drawing
img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888)
# Use HDMI as the display output
Display.init(Display.LT9611, to_ide=True)
# Initialize the media manager
MediaManager.init()
try:
while True:
img.clear()
for i in range(10):
x = (urandom.getrandbits(11) % img.width())
y = (urandom.getrandbits(11) % img.height())
r = (urandom.getrandbits(8))
g = (urandom.getrandbits(8))
b = (urandom.getrandbits(8))
size = (urandom.getrandbits(30) % 64) + 32
# Draw text at the coordinates on the image
img.draw_string_advanced(x, y, size, "Hello World! 你好世界 !!!", color=(r, g, b))
# Display the result on the screen
Display.show_image(img)
time.sleep(1)
os.exitpoint()
except KeyboardInterrupt as e:
print("User stopped: ", e)
except BaseException as e:
print(f"Exception: {e}")
# Destroy the display
Display.deinit()
os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
time.sleep_ms(100)
# Release the media buffer
MediaManager.deinit()
if __name__ == "__main__":
os.exitpoint(os.EXITPOINT_ENABLE)
display_test()
Using LCD to Output Images#
This example outputs an 800x480 image via an LCD (ST7701). You can also select other supported panel types (such as NT35516, GC9503, etc.) by replacing Display.ST7701 with the corresponding type and setting the appropriate resolution.
import time
import os
import urandom
import sys
from media.display import *
from media.media import *
# Supported panel types example: Display.ST7701, Display.NT35516, Display.GC9503, Display.AML020T, etc.
DISPLAY_TYPE = Display.ST7701
DISPLAY_WIDTH = ALIGN_UP(800, 16)
DISPLAY_HEIGHT = 480
def display_test():
print("display test")
# Create an image for drawing
img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888)
# Use LCD as the display output
Display.init(DISPLAY_TYPE, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, to_ide=True)
# Initialize the media manager
MediaManager.init()
try:
while True:
img.clear()
for i in range(10):
x = (urandom.getrandbits(11) % img.width())
y = (urandom.getrandbits(11) % img.height())
r = (urandom.getrandbits(8))
g = (urandom.getrandbits(8))
b = (urandom.getrandbits(8))
size = (urandom.getrandbits(30) % 64) + 32
# Draw text at the coordinates on the image
img.draw_string_advanced(x, y, size, "Hello World! 你好世界 !!!", color=(r, g, b))
# Display the drawn image
Display.show_image(img)
time.sleep(1)
os.exitpoint()
except KeyboardInterrupt as e:
print("User stopped: ", e)
except BaseException as e:
print(f"Exception: {e}")
# Destroy the display
Display.deinit()
os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
time.sleep_ms(100)
# Release the media buffer
MediaManager.deinit()
if __name__ == "__main__":
os.exitpoint(os.EXITPOINT_ENABLE)
display_test()
Using VIRT to Debug and Preview Images#
This example uses a virtual display output device, allowing users to customize resolution and frame rate for debugging in CanMV-IDE.
import time
import os
import urandom
import sys
from media.display import *
from media.media import *
DISPLAY_WIDTH = ALIGN_UP(640, 16)
DISPLAY_HEIGHT = 480
def display_test():
print("display test")
# Create an image for drawing
img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888)
# Use IDE as the output display, allowing any resolution to be set
Display.init(Display.VIRT, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, fps=60)
# Initialize the media manager
MediaManager.init()
try:
while True:
img.clear()
for i in range(10):
x = (urandom.getrandbits(11) % img.width())
y = (urandom.getrandbits(11) % img.height())
r = (urandom.getrandbits(8))
g = (urandom.getrandbits(8))
b = (urandom.getrandbits(8))
size = (urandom.getrandbits(30) % 64) + 32
# Draw text at the coordinates on the image
img.draw_string_advanced(x, y, size, "Hello World! 你好世界 !!!", color=(r, g, b))
# Display the drawn image
Display.show_image(img)
time.sleep(1)
os.exitpoint()
except KeyboardInterrupt as e:
print("User stopped: ", e)
except BaseException as e:
print(f"Exception: {e}")
# Destroy the display
Display.deinit()
os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
time.sleep_ms(100)
# Release the media buffer
MediaManager.deinit()
if __name__ == "__main__":
os.exitpoint(os.EXITPOINT_ENABLE)
display_test()
Tip
For detailed interfaces, supported panel types, and parameters of the Display module, please refer to the API documentation.
