Ver mensagens sem resposta | Ver tópicos ativos Hoje é 20 Nov 2019, 21:15



Responder Tópico  [ 2 Mensagens ] 
 [TUTORIAL] Redimensionando imagens no Android com MATRIX 
Autor Mensagem
Hello World!
Hello World!

Data de registro: 30 Mai 2011, 12:56
Mensagens: 28
Mensagem [TUTORIAL] Redimensionando imagens no Android com MATRIX
Neste artigo, irei abordar como redimensionar uma imagem via código.
A necessidade surgiu do fato de eu precisar fazer download de imagens e redimensiona-las de forma com que fiquem de acordo com o tamanho da tela do dispositivo.
A ideia é fazer com que sua aplicação funcione legal nas mais diferentes resoluções de tela. Acredito que essa seja uma grande dificuldade para a maioria dos desenvolvedores android.
Para ajudar, estou escrevendo este artigo onde podemos redimensionar uma imagem utilizando a biblioteca MATRIX do próprio android.

Neste código, teremos um método para fazer o donwload da imagem e outro método para redimensiona-la.

Metodo “getImage”


private Bitmap getImage(String url) {
        try {
            //definindo a URL
            URL aURL = new URL(url);
            //definindo a conexao
            URLConnection conn = aURL.openConnection();
           
            //conectando
            conn.connect();
           
            //pegando a imagem
            InputStream is = conn.getInputStream();
           
            //criando o buffer    
            BufferedInputStream bis = new BufferedInputStream(is);
           
            //transformando a imagem de stream para um bitmap
            Bitmap bm = BitmapFactory.decodeStream(bis);
           
            //fechando os streans
            bis.close();
            is.close();
           
            return bm;
        } catch(IOException e) {
            throw new RuntimeException(e);
        } catch(Exception e) {
            throw new RuntimeException(e);
        }
}
 


Neste método acima, passamos a url da imagem e ele faz o download da imagem retornando um BitMap. E é este BitMap que utilizaremos para redimensionar a imagem.


Metodo “resizeImage”


public static Bitmap resizeImage(Bitmap bmpOriginal) {
    Bitmap novoBmp = null;
       
    int w = bmpOriginal.getWidth();
        int h = bmpOriginal.getHeight();
                   
        int novoW = 200;
        int novoH = 200;
       
        //Calcula escala em porcentagem do tamanho original para o novo tamanho
        float scalaW = ((float) novoW) / w;
        float scalaH = ((float) novoH) / h;
       
        // Criando uma matrix para manipulação da imagem BitMap
        Matrix matrix = new Matrix();
       
        // Definindo a proporção da escala para o matrix
        matrix.postScale(scalaW, scalaH);
       
        //criando o novo BitMap com o novo tamanho
        novoBmp = Bitmap.createBitmap(bmpOriginal, 0, 0, w, h, matrix, true);
       
    return novoBmp;
}
 



Para utilizer os metodos acima, faremos o seguinte:


//pegando a imagem da url
BitMap imagem = getImage(“Minha URL);
//redimensionando a imagem
BitMap novaImagem = resizeImage(imagem);

//criando o drawable
BitmapDrawable bmd = new BitmapDrawable(imagem);

//setando a nova imagem no ImageView
//Poder ser um ImageButton ou qualquer outro widget que utilize imagem
imageView.setImageDrawable(bmd);
 



Dicas:
Podemos pegar a resolução da tela utilizando o DisplayMetrics e fazer um calculo de proporção para que imagem possa ser redimensionada na proporção da tela atual. No método resizeImage, as variáveis novoW e novoH receberiam o tamanho proporcional a tela.
Duvidas e criticas “contrutivas” são muito bem vindas.

Obrigado a todos
Espero que ajude

Abraço


16 Nov 2011, 12:14
Perfil
Android application
Android application

Data de registro: 27 Fev 2014, 17:21
Mensagens: 83
Mensagem Re: [TUTORIAL] Redimensionando imagens no Android com MATRIX
Valter, gostei bastante do seu código e tenho uma pequena dúvida. Qndo eu o executo, independente do tamanho da imagem q eu faça o download ela já se ajusta ao tamanho da minha tela. Esse segundo método é para diminuir o tamanho da imagem em Kb ou Mb por exemplo ou só para se ajustar na tela?

Obs: para o método de download funcionar eu tive que usar um AsyncTask.

Obg, abraço


03 Jun 2014, 21:15
Perfil
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 2 Mensagens ] 

Quem está online

Usuários vendo este fórum: abruzzi, alex, Alex Marcelo Burnett, Alexandre de Queiroz, alexvbh, amarildolacerdas, Analista, AT-AT, attomweb, Augusto, Bass, Bitor, caciara, Cajux, camilodev, carlos rodrigues, celson, cfranca, Chewbacca, Christiane, chunga, cleberkct, cleiton_maciel, Damiani Oliveira, Darkluna, Dassi, DAVINCE, Delão, drjunior, edsonel, eferrari, erikopa, erosvaldo, Faroli, Felipe, Felipe Ferreira, felipe.buarque, felipe.cintra, flaviojps, gabrielpg, gedoor, Geire Robson Gadelha, Gooooogle, Governador Wilhuff Tarkin, guto.pro, humberto, infonlinebr, ismaelbpaiva, jacksonvpj, jacquesbica, Jalerson, jandersonjc, Jar Jar Binks, jcdeveloper, jijo, Joessi2007, JRSIQUEIRA, juliomar, kristopher, laurj, Lindberg, Lucious, Lúcio Zanette, m4v0, Mace Windu, Machado000, Marcelo Lima, marcos_trb, marcosf63, mtomazzi, neuhaus, nightwatch, niloleite, nocivus, nullPointer, Obi-Wan Kenobi, obitow, oliveiramc, On_7, Patricia, pgsnit, Qui-Gon Jinn, Rafael, regisjj, renanpl, rmendes, rodrigo aguiar, rogerio, rogerio.alcantara, sasuke_sarutobi, SERGIO RODRIGUES, skcratch, thiago@xbrain.com.br, thiagoalgo, ThiMatsu, thosjanas, tonholis, Vania, W3 [Sitesearch], Wendel Carvalho, wil, xa:=zin e 1 visitante


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi