classe RGBDisplay – Controlador de Ecrã RGB¶
A classe RGBDisplay controla LCDs RGB paralelos de 24 bits através do controlador STM32 LTDC (LCD-TFT). O LTDC transmite pixels diretamente de um framebuffer suportado por SDRAM ao clock de pixel escolhido, pelo que são possíveis taxas de atualização elevadas (até 120 Hz) sem envolvimento do CPU.
Na OpenMV Cam Pure Thermal, o mesmo barramento paralelo de 24 bits também alimenta um codificador HDMI TFP410 integrado, pelo que a sua saída HDMI é igualmente controlada por esta classe – utilize display_on=False para desativar o LCD integrado enquanto continua a enviar pixels para o codificador.
A resolução do painel é selecionada através de framesize utilizando as constantes definidas no módulo display (QVGA, VGA, WVGA, HD, FHD, …). As sequências de inicialização específicas do painel são fornecidas através do argumento de palavra-chave controller (por exemplo, ST7701 para painéis baseados em ST7701). O brilho da retroiluminação é controlado como um GPIO simples por defeito, ou por DACBacklight / PWMBacklight se um for passado como backlight.
Os fotogramas são apresentados chamando write() com um image.Image. O controlador trata internamente da conversão RGB, escalonamento, ROI, paleta e transformações de orientação.
Exemplo – espelhar a câmara num painel 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 (consulte as constantes do módulodisplay).refreshDefine a taxa de atualização do ecrã em hertz (30-120). Controla o clock de pixel do LCD RGB.display_onAtiva a saída LCD local. PasseFalsena OpenMV Cam Pure Thermal, cujo barramento paralelo de 24 bits controla tanto o LCD integrado como o codificador HDMI TFP410 – isto mantém o LCD integrado desativado enquanto continua a alimentar o codificador HDMI. Noutras OpenMV Cams não existe um sink partilhado e pode ser deixado no seu valor predefinido.triple_bufferSeTrue, torna as atualizações do ecrã não bloqueantes ao custo de 3x o tamanho do ecrã em RAM.portraitTroca a largura e a altura do framesize.controllerPasse uma instância de classe do chip controlador para o inicializar juntamente com o ecrã.backlightPasse uma instância do módulo controlador de retroiluminação a utilizar. Por defeito, a retroiluminação será controlada por um pino GPIO.- deinit() None¶
Liberta os pinos de I/O e a RAM utilizados pela classe. É chamado automaticamente na destruição.
- clear(display_off: bool = False) None¶
Limpa o ecrã LCD para preto.
display_offseTrue, desliga a lógica do ecrã em vez de limpar o framebuffer para preto. Deverá também desligar a retroiluminação após isto para garantir que o ecrã fica preto, pois muitos ecrãs ficam brancos quando apenas a retroiluminação está ligada.
- backlight(value: int | None = None) int¶
Define o valor de escurecimento da retroiluminação do LCD, de 0 (desligado) a 100 (ligado). Passe sem argumentos para obter o valor atual da retroiluminação.
A menos que um controlador
DACBacklightouPWMBacklighttenha sido passado ao construtor, a retroiluminação é controlada como um pino GPIO e apenas alternará entre 0 (desligado) e não-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¶
Apresenta uma
imagecujo canto superior esquerdo começa na localizaçãox,y. Pode também ser passada uma string de caminho em vez de um objeto de imagem para carregar automaticamente a imagem do disco.x_scalecontrola o fator pelo qual a imagem apresentada é escalada na direção x. Se este valor for negativo, a imagem será espelhada horizontalmente. Sey_scalenão for especificado, corresponderá ax_scalepara manter a proporção.y_scalecontrola o fator pelo qual a imagem apresentada é escalada na direção y. Se este valor for negativo, a imagem será invertida verticalmente (requer triple buffering). Sex_scalenão for especificado, corresponderá ay_scalepara manter a proporção.roié o tuplo de retângulo da região de interesse(x, y, w, h)da imagem a apresentar.rgb_channelé o canal RGB (0=R, 1=G, 2=B) a extrair de uma imagem RGB565 e renderizar em escala de cinzentos.-1desativa a extração de canal.alphacontrola a opacidade da imagem, de 0 (totalmente transparente / preto) a 255 (opaco).color_paletteuma imagem RGB565 de 256 pixels no total utilizada como tabela de consulta de cor sobre o valor em escala de cinzentos da imagem de entrada. Aplicada após a extração dergb_channel. Pode também ser um enum de paleta (ex.:image.PALETTE_RAINBOW).alpha_paletteuma imagem GRAYSCALE de 256 pixels no total utilizada como tabela de consulta de alfa por pixel sobre o valor em escala de cinzentos da imagem de entrada. Aplicada após a extração dergb_channel.hinté um OR lógico dos sinalizadores:image.AREA: Utiliza escalonamento por área ao reduzir em vez do vizinho mais próximo.image.BILINEAR: Utiliza escalonamento bilinear em vez do vizinho mais próximo.image.BICUBIC: Utiliza escalonamento bicúbico em vez do vizinho mais próximo.image.CENTER: Centra a imagem no ecrã (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: Realiza 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 ecrã.image.SCALE_ASPECT_EXPAND: Escala a imagem para preencher o ecrã (com corte).image.SCALE_ASPECT_IGNORE: Escala a imagem para preencher o ecrã (com distorção).image.ROTATE_90: Roda 90 graus (VFLIP | TRANSPOSE).image.ROTATE_180: Roda 180 graus (HMIRROR | VFLIP).image.ROTATE_270: Roda 270 graus (HMIRROR | TRANSPOSE).