Problemas com a conversão de Bitmap para byte[]

Estou convertendo Bitmap para byte[] desta forma

[code]ByteArrayOutputStream bos = new ByteArrayOutputStream();

                bitmap.compress(CompressFormat.PNG, 100 , bos); 
                byte[] imgByte = bos.toByteArray();[/code]

Estou armazenando no banco o byte[], mas quando pego a imagem do banco e faço ela ser exibida no aparelho, ela é mostrada no canto em um tamanho bem menor do que quando foi tirada.

Fiz testes armazenando no banco uma imagem do computador e funcionou, é exibida normal no aparelho, mas as tiradas com o dispositivo e convertidas para byte[] ficam pequenas.

Voce tem certeza que as imagens tiradas são grandes?

Verifiquei e as imagens estão grandes.

Resolvi testar sem enviar para o banco.
Fiz a conversão para byte[] e depois converti para Bitmap novamente e setei em um ImageView, mas continua aparecendo pequena

Intent intent; intent = getIntent(); byte[] bt = intent.getByteArrayExtra("byteImg"); Bitmap imagBitmap = BitmapFactory.decodeByteArray(bt,0,bt.length); ImgeView imgV = (ImageView) findViewById(R.id.exibeImg); imgV.setImageBitmap(imgBitmap);

mudei o ImageView para “fill_parent”, esta mostrando na tela toda, mas com em uma qualidade menor do que quando foi tirada.

Como voce tira essa foto?

Chamo a camera

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, TIRAR_FOTO);

Depois de capturar a foto ja converto para byte[]

[code]if (requestCode == TIRAR_FOTO) {
if (resultCode == RESULT_OK) {
Bitmap bitmap = (Bitmap) data.getExtras().get(“data”);

                ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
                bitmap.compress(CompressFormat.PNG, 100 , bos); 
                byte[] imgByte = bos.toByteArray();[/code]

A imagem esta sendo salva na galeria do celular com a qualidade boa.

Voce tem certeza que bitmap.getWidth() e bitmap.getHeight() retornam um valor maior do que antes de grava-lo?

Segundo, se voce quer só pegar o byte[] da imagem voce pode fazer o seguinte:

        Bitmap bmp = //sua imagem
        ByteBuffer buffer = ByteBuffer.allocate(bmp.getWidth() * bmp.getHeight() * 4);//4 para ARGB e 3 para RGB
        bmp.copyPixelsToBuffer(buffer);

Então Marky.Vasconcelos,
coloquei esta linha para ver a resolução logo após capturar a imagem com a camera.

Bitmap bitmap = (Bitmap) data.getExtras().get("data"); Toast.makeText(getApplicationContext(),bitmap.getHeight()+" , "+bitmap.getWidth(),Toast.LENGTH_LONG).show();

Realmente esta pegando a imagem em resolução baixa. Esta com 160 x 120 e a camera esta configurada para tirar em 2560x1920.
Não entendo o motivo, pois a camera esta configurada com a maior resolução e a imagem esta sendo salva na galeria com a resolução alta.

Cara já tive esse problema também, sempre que o programa da camera é chamado de dentro da minha aplicação não sei porq ele assume outra resolução, e por ali não conseguimos acessar as configurações da cam, tenho um milestone 2 não sei se tem algo haver.

O que pode ser feito é passar um parametro onde gere uma cópia da imagem para vc, e após isso vc lê para seu byte[] e depois apaga a imagem temporaria.

uriImageCapture = Uri.fromFile(fileImageTmp);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uriImageCapture);
startActivityForResult(intent, CAPTURE_IMAGE);

Espero que ajude :wink:

abs,

Evandro