Estou usando uma visualização para exibir o que a câmera vê na tela.
Posso fazer tudo funcionar bem, criar superfície, definir superfície e a superfície é exibida.
No entanto, ele sempre exibe a imagem em um ângulo incorreto de 90 graus no modo retrato.
Como na imagem:
Estou ciente de que o uso do código a seguir definirá a imagem corretamente:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
No entanto, eu tenho a Visualização dentro de uma Atividade que possui outros elementos e não faz sentido que minha Atividade seja exibida no modo paisagem. (Está desativado por padrão)
Então, eu queria saber se existe alguma maneira de apenas mudar a orientação da visualização? E deixar o restante da minha atividade exibido corretamente no modo retrato?
Ou mesmo assim, para girar a visualização para que ela seja exibida corretamente?
Respostas:
Esse problema parece ter começado como um bug em determinado hardware, veja aqui, mas pode ser superado usando a chamada para mCamera.setDisplayOrientation (graus) disponível na API 8. Portanto, é assim que eu o implemento:
Isso acontecia no HTC Desire e eu tive que inserir instruções de registro em cada uma das verificações de rotação para dizer qual era a rotação e depois depurar no dispositivo e observar a saída do logCat enquanto eu rodava o dispositivo. Para o HTC Desire, 0 era o telefone como você esperava (retrato), 90 graus estava girando o telefone 90 graus no sentido anti-horário (eu supus que seria no sentido horário). No código, você verá que eu não precisava fazer rotação do visor quando o telefone estava a 90 ou 180 graus - o dispositivo parecia lidar com isso sozinho. Apenas um ponto não está funcionando corretamente: a rotação de 270 graus ocorre quando você gira o dispositivo 90 graus no sentido horário e a rotação do visor é ok, mas se você girar o dispositivo 270 graus no sentido anti-horário, ele não parece compensá-lo corretamente.
PS Observe a troca de largura e altura nas rotações apropriadas.
fonte
mCamera.setParameters(parameters);
declaração trava meu aplicativo, porque as dimensões da superfície não são um tamanho de visualização válido para o meu telefone (talvez porque eu mantenho a barra de status visível?). No entanto, eu achei que usandomCamera.setDisplayOrientation(90)
entãomCamera.setPreviewDisplay(mSurfaceHolder);
sem definir os parâmetros funcionou também!tente definir a orientação da tela. Isso resolve meu problema.
fonte
onPreviewFrame()
ouonPictureTaken()
tente este código
fonte
Eu estava tendo um problema com a câmera frontal (problema de cabeça para baixo). Então usei o seguinte método documentado no Android Docs -
fonte
Fiz isso seguindo o conselho de mCamera.setDisplayOrientation (90); mas também girou o bitmap porque, por algum motivo, as outras abordagens não funcionam para mim na versão 2.3.3.
Para girar o bitmap, eu fiz isso:
fonte
Comparei meu código com o tutorial e o que finalmente foi corrigido foi colocar o seguinte código no meu AndroidManifext.xml: Na
<activity>
tag:fonte
fonte
Eu acho que o valor SENSOR_ORIENTATION explicará qual valor deve ser usado para a rotação em vez de codificar para 90 graus
fonte