joao escreveu:Ola Marcelo,
E se por acaso eu quiser implementar um botão de ZOOM?
Teria que pegar o frame e dai aplicar algum método de manipulação de imagem?
Obrigado,
Joao
pois eh, recai na decisao de usar Xvideo ou video4linux.
o Xvideo em principio direciona o stream direto para uma janela jah fazendo adaptacao de profundidade de cor e tamanho. se vc desenha duas janelas, uma dentro da outra, vc pode ter um tamanho externo da janela e um interno. aumentando o tamanho interno vc faz zoom para qualquer tamanho e o Xvideo rescala o stream de video para vc.
porem, quando vc quiser pegar um frame para gravar em jpeg, provavelmente vai ter encontrar uma falha de implementacao no Xvideo usado no linux, que bloqueia a captura do frame. uma ideia de contornar isso seria capturar direto da janela, mas eu notei que em algumas placas de video tudo que vc obtem eh um quadrado azul, pois o mecanismo de overlay nessas placas eh implementado por um chromakey.
assim, fica a solucao mais complexa via video4linux: nesse caso vc a digitalizadora descarrega em buffers de tamanho sempre fixo e profundidade de bits fixa. vc entao copia deste buffer para o X adaptando a profundidade de bits de cor e o tamanho.
a adaptacao de profundidade de bits vai depender do que vc pretende suportar: existem placas graficas que rodam o X com 1 a 24 bits de cor e vc precisaria criar algoritmos para cada um deles, o que eh bastante trabalhoso! e para cada rotina, vc pode incluir tambem o zoom com suporte a interpolacao linear, o que dah uma complicada extra hehehe
bom, existe uma extensao para manipulacao de imagens no X chamada XIE, mas tal como o Xvideo, ela nao eh mais mantida e o know how de como trabalhar com ela praticamente se perdeu no limbo!
na falta de opcoes, eu criei algumas rotinas que convertem buffers de 24 bits para buffers de imagem do X com suporte a algumas combinacoes:
http://xstep.sourceforge.net/xstep-4.1/lib/image.c
a funcao XSImage2Pixmap() converte imagens de 32, 24 e 8 bits em organizacao RGB, BGR e monocromatico para bitmaps do X com formatos de nao compactados de 8, 16 e 32 bits, baseado na paleta de cor corrente, o que significa que deve suportar algo entre 1 e 24 bits de cor, mas sem suporte a tecnica de difusao por erro. essa funcao tambem jah faz o rescalonamento da imagem tanto na vertical quanto horizontal, mas os pixels gerados nao usam valores interpolados.
a funcao XSImage2PixmapAA() eh uma versao de testes que gera pixels extras no zoom atraves de interpolacao em duas direcoes. como eh uma versao de testes, eu implementei apenas para o formato de 16 bits (que inclui displays de 9 a 16 bits).
meio complicadinho neh ?
talvez no gtk ou qt tenha algum recurso melhor em relacao ao X padrao para manipular essas imagens. o fato eh que os recursos supostamente criados para isso (Xvideo e XIE) nao sao mantidos mais pelos desenvolvedores.