Dispositivo DROID - não girará a imagem capturada da câmera? (Câmera.parameters)

StackOverflow https://stackoverflow.com/questions/1934378

  •  20-09-2019
  •  | 
  •  

Pergunta

Estou usando este código da câmera para pedir à câmera para girar os dados da imagem capturados:

Camera.Parameters params = camera.getParameters();
params.set("rotation", 90);
camera.setParameters(params);

Isso parece funcionar em todos os telefones, exceto o dróide. alguém mais viu isso? Os dados da imagem são sempre cenários, no entanto, o aplicativo de câmera nativo no dróide produz imagens de retratos OK.

Eu me pergunto se o dróide só respeitará o novo Camera.Parameters.setRotation() Método, mas isso parece estar disponível apenas no nível 5 da API?

Foi útil?

Solução

A rotação pode ser armazenada apenas no cabeçalho JPEG EXIF, conforme explicado no documento do setrotation. No dróide, esse é realmente o caso. Você pode usar ferramentas de leitura do cabeçalho JPEG como o JHEAD para verificar isso. Você também pode usar o API Exifinterface Para ler a tag de orientação em seu programa.

Outras dicas

setRotation Também não parecia funcionar para mim no Nexus One, mas obtive a rotação da imagem para funcionar seguindo o exemplo do próprio aplicativo de câmera Android.
O código -fonte está disponível aqui:https://android.googlesource.com/platform/packages/apps/camera

Comece com a câmera.java, mas você também estará olhando para imagemanager.java, util.java e outros arquivos.

A idéia básica é que você ouve mudanças de orientação e captura qual é a orientação no momento em que você tirou a imagem. Então, quando você obtém os bytes da imagem no retorno de chamada, você manipula o bitmap, fazendo uma rotação no bitmap. Em seguida, converta o bitmap rotacionado de volta ao JPEG. Quando terminar, você terá que copiar uma quantidade chocante de código do aplicativo da câmera apenas para esta rotação.

O Droid executa o Android 2.0 (bem, agora 2.0.1), que são os níveis de API 5 e 6, respectivamente.

Portanto, é bem possível que o dróide respeite apenas a API (mais sensata) 2.0+ para rotação.

No entanto, acho que sua preocupação é a compatibilidade em uma variedade de tipos de dispositivos e versões do sistema operacional, então imagino que você teria que invocar a API 2.0+ via reflexão após detectar a versão do sistema operacional (usando android.os.Build.VERSION_CODES).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top