class TVDisplay – Controlador do Shield de TV¶
A classe TVDisplay controla o Shield de TV OpenMV, que converte um framebuffer RGB565 num sinal de vídeo composto NTSC (352x240, 60 campos/s entrelaçados) adequado para qualquer televisor ou monitor de vídeo analógico.
São suportadas duas variantes do shield:
O Shield de TV com fio, que expõe o sinal composto numa tomada RCA.
O Shield de TV sem Fios, que envia o mesmo sinal para um transmissor de vídeo analógico a 2,4 GHz. O canal do recetor (1–8) é selecionado em tempo de execução via
ioctl()comdisplay.IOCTL_CHANNEL; enquanto essa chamada não for feita, nenhum canal está selecionado.
A resolução e o enquadramento são fixos – TVDisplay não aceita um argumento framesize. Os fotogramas são apresentados passando um image.Image a write(), que trata internamente do escalonamento, ROI, paleta e transformações de orientação.
Exemplo de utilização:
import csi
import display
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.SIF) # 352x240, matches the TV output
tv = display.TVDisplay()
while True:
tv.write(csi0.snapshot())
Construtores¶
- class display.TVDisplay(triple_buffer: bool = True)¶
triple_bufferSe True, torna as atualizações do ecrã não bloqueantes ao custo de 3 vezes o tamanho do ecrã em RAM. O valor predefinido depende da placa.- deinit() None¶
Liberta os pinos de E/S e a RAM utilizados pela classe. É chamado automaticamente na destruição.
- 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 = 256, color_palette: int | 'image.Image' | None = None, alpha_palette: 'image.Image' | None = None, hint: int = 0) None¶
Apresenta uma
imagecujo canto superior esquerdo começa na localização x, y.x_scalecontrola o fator de escala da imagem apresentada na direção x (float). Se o valor for negativo, a imagem será espelhada horizontalmente.y_scalecontrola o fator de escala da imagem apresentada na direção y (float). Se o valor for negativo, a imagem será espelhada verticalmente.roié a tupla de retângulo de região de interesse (x, y, w, h) da imagem a apresentar.rgb_channelé o canal RGB (0=R, G=1, B=2) a extrair de uma imagem RGB565 e a apresentar no ecrã.alphacontrola a opacidade da imagem. Um valor de 256 apresenta uma imagem opaca; um valor inferior a 256 produz uma imagem preta transparente. 0 resulta numa imagem completamente preta.color_palettese não for-1, pode ser um enum de paleta de cores ou uma imagem RGB565 de 256 pixels no total, utilizada como tabela de consulta de cores sobre o valor em escala de cinzentos da imagem de entrada.alpha_palettese não for-1, pode ser uma imagem GRAYSCALE de 256 pixels no total, utilizada como paleta de alfa que modula o valoralphada imagem de entrada ao nível de pixel.hintOR lógico dos sinalizadores:image.AREA: Usar escalonamento por área ao reduzir.image.BILINEAR: Usar escalonamento bilinear.image.BICUBIC: Usar escalonamento bicúbico.image.CENTER: Centrar a imagem no ecrã (após escalonamento).image.HMIRROR: Espelhar horizontalmente a imagem.image.VFLIP: Inverter verticalmente a imagem.image.TRANSPOSE: Transpor a imagem (trocar x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplicar a extração dergb_channelantes do escalonamento.image.APPLY_COLOR_PALETTE_FIRST: Aplicarcolor_paletteantes do escalonamento.image.SCALE_ASPECT_KEEP: Escalar para ajustar dentro do ecrã.image.SCALE_ASPECT_EXPAND: Escalar para preencher o ecrã (com corte).image.SCALE_ASPECT_IGNORE: Escalar para preencher o ecrã (com esticamento).image.ROTATE_90: Rodar 90 graus (VFLIP | TRANSPOSE).image.ROTATE_180: Rodar 180 graus (HMIRROR | VFLIP).image.ROTATE_270: Rodar 270 graus (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Limpa o ecrã para preto.
display_offé aceite para compatibilidade de API com outras classes de ecrã e é ignorado.
- ioctl(cmd: int, *args) object¶
Ponto de entrada ioctl genérico.
Passe
display.IOCTL_CHANNELcomocmdpara definir ou obter o canal de transmissão do shield de TV sem fios. Com um segundo argumento (1-8), o canal é definido; sem segundo argumento, o canal atual é devolvido. Nenhum canal é selecionado até que a primeira chamada de definição seja feita.