class RGBDisplay – RGB 디스플레이 드라이버¶
RGBDisplay 클래스는 STM32 LTDC(LCD-TFT) 컨트롤러를 통해 24비트 병렬 RGB LCD를 구동합니다. LTDC는 선택한 픽셀 클록으로 SDRAM 기반 프레임버퍼에서 픽셀을 직접 스트리밍하므로, CPU 개입 없이 높은 새로 고침 빈도(최대 120Hz)를 구현할 수 있습니다.
OpenMV Cam Pure Thermal에서는 동일한 24비트 병렬 버스가 온보드 TFP410 HDMI 인코더에도 공급되므로, HDMI 출력 역시 이 클래스를 통해 구동됩니다. 인코더로 픽셀을 계속 보내면서 온보드 LCD를 끄려면 display_on=False 를 사용하세요.
패널 해상도는 display 모듈에 정의된 상수(QVGA, VGA, WVGA, HD, FHD, …)를 사용하여 framesize 로 선택합니다. 패널별 초기화 시퀀스는 controller 키워드 인수를 통해 연결합니다(예: ST7701 기반 패널의 경우 ST7701). 백라이트 밝기는 기본적으로 단순한 GPIO로 구동되거나, backlight 로 전달된 경우 DACBacklight / PWMBacklight 에 의해 구동됩니다.
프레임은 image.Image 와 함께 write() 를 호출하여 표시됩니다. 드라이버는 RGB 변환, 스케일링, ROI, 팔레트 및 방향 변환을 내부적으로 처리합니다.
예시 – 카메라를 480x272 패널에 60Hz로 미러링합니다:
import csi
import display
import image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
lcd = display.RGBDisplay(framesize=display.FHVGA, refresh=60)
while True:
lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)
생성자¶
- class display.RGBDisplay(framesize: int = display.FWVGA, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, controller: object | None = None, backlight: object | None = None)¶
framesize표준 지원 해상도 중 하나입니다(display모듈 상수 참조).refresh화면 새로 고침 빈도를 헤르츠 단위(30-120)로 설정합니다. 이는 RGB LCD 픽셀 클록을 제어합니다.display_on로컬 LCD 출력을 활성화합니다. OpenMV Cam Pure Thermal에서는False를 전달하세요. 이 보드의 24비트 병렬 버스는 온보드 LCD와 TFP410 HDMI 인코더를 모두 구동하므로, 이렇게 하면 HDMI 인코더에는 계속 공급하면서 온보드 LCD를 끈 상태로 유지합니다. 다른 OpenMV Cam에는 공유 출력 대상이 없으므로 기본값으로 두어도 됩니다.triple_bufferTrue이면 RAM에서 디스플레이 크기의 3배를 소비하는 대신 화면 업데이트를 논블로킹으로 만듭니다.portrait프레임 크기의 너비와 높이를 서로 바꿉니다.controller컨트롤러 칩 클래스 인스턴스를 전달하여 디스플레이와 함께 초기화합니다.backlight사용할 백라이트 컨트롤러 모듈 인스턴스를 전달합니다. 기본적으로 백라이트는 GPIO 핀을 통해 제어됩니다.- clear(display_off: bool = False) None¶
LCD 화면을 검은색으로 지웁니다.
display_offTrue이면 프레임버퍼를 검은색으로 지우는 대신 디스플레이 로직을 끕니다. 많은 디스플레이가 백라이트만 켜져 있을 때 흰색으로 나타나므로, 화면이 확실히 검은색이 되도록 그 후 백라이트도 꺼야 합니다.
- backlight(value: int | None = None) int¶
LCD 백라이트 밝기 조절 값을 0(꺼짐)에서 100(켜짐)까지 설정합니다. 인수 없이 호출하면 현재 백라이트 값을 가져옵니다.
DACBacklight또는PWMBacklight컨트롤러가 생성자에 전달되지 않은 경우, 백라이트는 GPIO 핀으로 제어되며 0(꺼짐)에서 0이 아닌 값(켜짐)까지만 이동합니다.
- write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None¶
왼쪽 위 모서리가 위치
x,y에서 시작하는image를 표시합니다. 이미지 객체 대신 경로 문자열을 전달하여 디스크에서 이미지를 자동으로 불러올 수도 있습니다.x_scale표시되는 이미지가 x 방향으로 얼마나 스케일되는지를 제어합니다. 이 값이 음수이면 이미지가 가로로 뒤집힙니다.y_scale이 지정되지 않으면 종횡비를 유지하기 위해x_scale과 일치하게 됩니다.y_scale표시되는 이미지가 y 방향으로 얼마나 스케일되는지를 제어합니다. 이 값이 음수이면 이미지가 세로로 뒤집힙니다(트리플 버퍼링 필요).x_scale이 지정되지 않으면 종횡비를 유지하기 위해y_scale과 일치하게 됩니다.roi는 표시할 이미지의 관심 영역(ROI) 사각형 튜플(x, y, w, h)입니다.rgb_channel은 RGB565 이미지에서 추출하여 그레이스케일로 렌더링할 RGB 채널(0=R, 1=G, 2=B)입니다.-1은 채널 추출을 비활성화합니다.alpha이미지의 불투명도를 제어합니다. 0(완전히 투명 / 검은색)에서 255(불투명)까지입니다.color_palette입력 이미지의 그레이스케일 값에 대한 색상 조회 테이블로 사용되는 총 256픽셀의 RGB565 이미지입니다.rgb_channel추출 후에 적용됩니다. 팔레트 열거형(예:image.PALETTE_RAINBOW)일 수도 있습니다.alpha_palette입력 이미지의 그레이스케일 값에 대한 픽셀별 알파 조회 테이블로 사용되는 총 256픽셀의 GRAYSCALE 이미지입니다.rgb_channel추출 후에 적용됩니다.hint는 다음 플래그들의 논리 OR입니다:image.AREA: 다운스케일 시 최근접 이웃 대신 영역 스케일링을 사용합니다.image.BILINEAR: 최근접 이웃 대신 양선형 스케일링을 사용합니다.image.BICUBIC: 최근접 이웃 대신 바이큐빅 스케일링을 사용합니다.image.CENTER: 디스플레이에서 이미지를 가운데에 맞춥니다(스케일링 후 적용).image.HMIRROR: 이미지를 가로로 미러링합니다.image.VFLIP: 이미지를 세로로 뒤집습니다.image.TRANSPOSE: 이미지를 전치합니다(x/y 교환).image.EXTRACT_RGB_CHANNEL_FIRST: 스케일링 전에rgb_channel추출을 수행합니다.image.APPLY_COLOR_PALETTE_FIRST: 스케일링 전에color_palette를 적용합니다.image.SCALE_ASPECT_KEEP: 디스플레이 안에 맞도록 이미지를 스케일합니다.image.SCALE_ASPECT_EXPAND: 디스플레이를 채우도록 이미지를 스케일합니다(잘림).image.SCALE_ASPECT_IGNORE: 디스플레이를 채우도록 이미지를 스케일합니다(늘림).image.ROTATE_90: 90도 회전합니다(VFLIP | TRANSPOSE).image.ROTATE_180: 180도 회전합니다(HMIRROR | VFLIP).image.ROTATE_270: 270도 회전합니다(HMIRROR | TRANSPOSE).