classe RGBDisplay – Driver de Display RGB¶
A classe RGBDisplay controla LCDs RGB paralelos de 24 bits através do controlador LTDC (LCD-TFT) do STM32. O LTDC transmite os pixels diretamente de um framebuffer respaldado por SDRAM na taxa de clock de pixel escolhida, de modo que altas taxas de atualização (até 120 Hz) são possíveis sem envolvimento da CPU.
Na OpenMV Cam Pure Thermal, o mesmo barramento paralelo de 24 bits também alimenta um codificador HDMI TFP410 embutido na placa, de modo que sua saída HDMI também é controlada por essa classe – use display_on=False para apagar o LCD embutido enquanto continua enviando pixels ao codificador.
A resolução do painel é selecionada através de framesize usando as constantes definidas no módulo display (QVGA, VGA, WVGA, HD, FHD, …). As sequências de inicialização específicas de cada painel são conectadas através do argumento de palavra-chave controller (por exemplo, ST7701 para painéis baseados no ST7701). O brilho da luz de fundo é controlado como um simples GPIO por padrão, ou por DACBacklight / PWMBacklight se um deles for passado como backlight.
Os quadros são apresentados chamando write() com uma image.Image. O driver trata internamente a conversão RGB, o escalonamento, a ROI, a paleta e as transformações de orientação.
Exemplo – espelhar a câmera em um painel de 480x272 a 60 Hz:
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)
Construtores¶
- 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)¶
framesizeUma das resoluções padrão suportadas (veja as constantes do módulodisplay).refreshDefine a taxa de atualização da tela em hertz (30-120). Isso controla o clock de pixel do LCD RGB.display_onHabilita a saída do LCD local. PasseFalsena OpenMV Cam Pure Thermal, cujo barramento paralelo de 24 bits controla tanto o LCD embutido quanto o codificador HDMI TFP410 – isso mantém o LCD embutido apagado enquanto continua alimentando o codificador HDMI. Em outras OpenMV Cams não há um destino compartilhado e isso pode ser deixado em seu valor padrão.triple_bufferSeTrue, torna as atualizações da tela não bloqueantes ao custo de 3x o tamanho do display em RAM.portraitTroca a largura e a altura do framesize.controllerPasse uma instância de classe de chip controlador para inicializá-lo junto com o display.backlightPasse uma instância de módulo controlador de luz de fundo a ser usada. Por padrão, a luz de fundo será controlada por meio de um pino GPIO.- deinit() None¶
Libera os pinos de I/O e a RAM usados pela classe. Isso é chamado automaticamente na destruição.
- clear(display_off: bool = False) None¶
Limpa a tela do LCD deixando-a preta.
display_offseTrue, desliga a lógica do display em vez de limpar o framebuffer para preto. Você também deve desligar a luz de fundo depois disso para garantir que a tela fique preta, já que muitos displays ficam brancos quando apenas a luz de fundo está ligada.
- backlight(value: int | None = None) int¶
Define o valor de atenuação da luz de fundo do LCD, de 0 (desligado) a 100 (ligado). Não passe argumentos para obter o valor atual da luz de fundo.
A menos que um controlador
DACBacklightouPWMBacklighttenha sido passado ao construtor, a luz de fundo é controlada como um pino GPIO e só vai de 0 (desligado) a um valor diferente de zero (ligado).
- 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¶
Exibe uma
imagecujo canto superior esquerdo começa na localizaçãox,y. Uma string de caminho também pode ser passada no lugar de um objeto de imagem para carregar automaticamente a imagem do disco.x_scalecontrola o quanto a imagem exibida é escalonada na direção x. Se esse valor for negativo, a imagem será invertida horizontalmente. Sey_scalenão for especificado, ele corresponderá ax_scalepara manter a proporção.y_scalecontrola o quanto a imagem exibida é escalonada na direção y. Se esse valor for negativo, a imagem será invertida verticalmente (requer triple buffering). Sex_scalenão for especificado, ele corresponderá ay_scalepara manter a proporção.roié a tupla de retângulo da região de interesse(x, y, w, h)da imagem a ser exibida.rgb_channelé o canal RGB (0=R, 1=G, 2=B) a ser extraído de uma imagem RGB565 e renderizado em escala de cinza.-1desabilita a extração de canal.alphacontrola o quão opaca é a imagem, de 0 (totalmente transparente / preto) a 255 (opaco).color_paletteuma imagem RGB565 de 256 pixels no total usada como tabela de consulta de cores sobre o valor em escala de cinza da imagem de entrada. Aplicada após a extração dergb_channel. Também pode ser um enum de paleta (por exemplo,image.PALETTE_RAINBOW).alpha_paletteuma imagem GRAYSCALE de 256 pixels no total usada como tabela de consulta de alpha por pixel sobre o valor em escala de cinza da imagem de entrada. Aplicada após a extração dergb_channel.hinté um OR lógico das flags:image.AREA: Usa escalonamento por área ao reduzir, em vez de vizinho mais próximo.image.BILINEAR: Usa escalonamento bilinear em vez de vizinho mais próximo.image.BICUBIC: Usa escalonamento bicúbico em vez de vizinho mais próximo.image.CENTER: Centraliza a imagem no display (aplicado após o escalonamento).image.HMIRROR: Espelha a imagem horizontalmente.image.VFLIP: Inverte a imagem verticalmente.image.TRANSPOSE: Transpõe a imagem (troca x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Faz a extração dergb_channelantes do escalonamento.image.APPLY_COLOR_PALETTE_FIRST: Aplicacolor_paletteantes do escalonamento.image.SCALE_ASPECT_KEEP: Escala a imagem para caber dentro do display.image.SCALE_ASPECT_EXPAND: Escala a imagem para preencher o display (com corte).image.SCALE_ASPECT_IGNORE: Escala a imagem para preencher o display (esticando).image.ROTATE_90: Rotaciona em 90 graus (VFLIP | TRANSPOSE).image.ROTATE_180: Rotaciona em 180 graus (HMIRROR | VFLIP).image.ROTATE_270: Rotaciona em 270 graus (HMIRROR | TRANSPOSE).