Converter String em imagem

Quando você tem várias imagens na sua app e irá usa-las constantemente, porém não usando o id delas(id number (int)) você terá que passar o endereço delas.
Se você estiver pegando-as da web, é só passar a String pra um URL e conectar como abaixo:

try {
			for (int i = 0; i < enderecoImagem.length; i++) {
				URL ulrn = new URL(enderecoImagem[i]);
		 		HttpURLConnection	con = (HttpURLConnection)ulrn.openConnection();
		 			InputStream is = con.getInputStream();
		 				mIcon1[i] = BitmapFactory.decodeStream(is);
				}
		}catch (Exception e) {
			e.printStackTrace();
		}

Porém se as imagens já estão na sua App, como você faria isso?
Nesse caso, eu tenho o nome da imagem no meu objeto criado e que está no meu ArraList.

for (int i = 0; i < arrayList.size(); i++) {
	 				mIcon1[i] = BitmapFactory.decodeResource(contexto.getResources(), contexto.getResources().getIdentifier("drawable/icone"+arrayList.get(i).getIcon().trim(),null	,contexto.getPackageName()));
			}

Aqui eu pego as imagens uma a uma. Eu tenho o caminho delas, e o getResources e getIdentifier pega esse caminho e “acha” a nossa imagem que está na nossa aplicação.
Por que fazer isso?
Para evitar fazer muito download na sua App. Assim vocÊ economiza na hora de baixar e “decodificar” dados e transforma-los em imagem, etc.

 

Se post foi util pra voce, da um Google+1 !!!

😀

Anúncios

Sobre renatopuccini
Android Developer. Passion for what I do!

21 Responses to Converter String em imagem

  1. Pingback: Criar Adapters para sua ListView e GridView I « Você Sabia…?

  2. Robson Curvello says:

    Olá!
    É o seguinte…
    Eu tenho uma string (ImgName) q tem um valor q recupero do SQLITE referente ao nome de uma imagem q se encontra no res/drawable-hdpi e eu tenho uma ImageView com uma imagem padrão que gostaria de substituir pela que está na string ImgName… a pergunta é… como fazer isso?

    Seu exemplo acima serviria para esse fim? e como implanta-lo?

    Vlw desde já!

    • Olá,

      respondendo sua segunda pergunta:
      Esse exemplo serve no caso de você baixar uma imagem da internet via web service. Nesse caso você baixa um array de bytes e não uma imagem. Daí a necessidade de converter o array de bytes em Bitmap.

      respondendo sua primeira pergunta:
      O que você quer é pegar as imagens dos resources pelo nome delas, correto?
      Então usa esse método:
      Bitmap imagemRes = BitmapFactory.decodeResource(contexto.getResources(), contexto.getResources().getIdentifier(“drawable-hdpi/nomeDaImagem[noseu caso aqui vem ImgName]”,null ,contexto.getPackageName()));
      Onde contexto é um objeto da classe Context, o qual se tem acesso aos resources do projeto. E através do mesmo, você tem o nome do pacote. Você pode setar isso na mão, é uma String.
      Já que esse método retorna um bitmap, você pode setar seu objeto ImageView através do método setImageBitmap(imagemRes);

      Abraços

      • Robson Curvello says:

        Valeu… mas está dando erro:
        No package identifier when getting value for resource number 0x00000000

        Context contexto = getApplicationContext();
        Bitmap imagemRes = BitmapFactory.decodeResource(contexto.getResources(), contexto.getResources().getIdentifier(“drawable-hdpi/”+ImgName”,null,contexto.getPackageName()));
        imgMancha.setImageBitmap(imagemRes);

      • Se ele retorna isso, é porque el enão achou a imagem.
        Tenta ver se o getPackageName ta retornando o nome certo do seu pacote..(tenta printa a string e ver)
        Qual erro da no logcat?

      • Cah says:

        Renato, o seu contexto você criou onde O meu está dando nulo, como faço?

  3. Robson Curvello says:

    ele não estava achando o caminho drawable-hdpi mudei para drawable ai funcionou! valeu mesmo!

  4. Giovani Arduini says:

    Meu codigo:

    // Hashmap for ListView
    ArrayList<HashMap> itemstList = new ArrayList<HashMap>();

    // Creating JSON Parser instance
    JSONParser jParser = new JSONParser();

    // getting JSON string from URL
    JSONObject json = jParser.getJSONFromUrl(url);

    try {
    // Getting Array of Contacts
    retono = json.getJSONArray(TAG_RETORNO);

    // looping through All Contacts
    for(int i = 0; i < retono.length(); i++){
    JSONObject c = retono.getJSONObject(i);

    // Storing each json item in variable

    String title = c.getString(TAG_TITLE);
    String subtitle = c.getString(TAG_SUBTITLE);
    String publisher = c.getString(TAG_PUBLISHER);
    String publishedDate = c.getString(TAG_PUBLISHERDATE);
    String description = c.getString(TAG_DESCRIPTION);
    String smallThumbnail = c.getString(TAG_SMALLTHUMNAIL);

    // Phone number is agin JSON Object
    //JSONObject volumeInfo = c.getJSONObject(TAG_VOLUMEINFO);
    //String title = volumeInfo.getString(TAG_TITLE);

    // creating new HashMap
    HashMap map = new HashMap();

    // adding each child node to HashMap key => value
    map.put(TAG_TITLE, title);
    map.put(TAG_SUBTITLE, subtitle);
    map.put(TAG_PUBLISHER, publisher);
    map.put(TAG_PUBLISHERDATE, publishedDate);
    map.put(TAG_DESCRIPTION, description);
    map.put(TAG_SMALLTHUMNAIL, smallThumbnail);

    // adding HashList to ArrayList
    itemstList.add(map);
    }
    } catch (JSONException e) {
    e.printStackTrace();
    }

    /**
    * Updating parsed JSON data into ListView
    **/
    ListAdapter adapter = new SimpleAdapter(this, itemstList,
    R.layout.list_item,
    new String[] { TAG_TITLE, TAG_SUBTITLE, TAG_PUBLISHER, TAG_PUBLISHERDATE, TAG_DESCRIPTION}, new int[] {
    R.id.title, R.id.subtitle, R.id.publish, R.id.date, R.id.description});
    //

    setListAdapter(adapter);

    Sou muito iniciante e não estou sabendo exibir as imagens

    desde ja agradeço !!!

    • Cara,
      no seu caso você tem que criar o seu próprio adapter. E nele fazer o bind da sa imagem setando um ImageView com esse bitmap recebido. Se vc receber um string array. Se o seu ojevto guarda o caminho da imagem (thumbnail) então é só usar o código do post pra conseguir pegar a imagem.
      Agora pra settar voce tem que usar o seu Próprio adapter.
      Da uma olhada nesse link aqui sobre adapters -> http://www.androidbrasilprojetos.org/android/adapter-personalizado-custom-adapter/

      • Giovani Arduini says:

        Vou fazer uma pergunta besta, mas como disse eu não manja nada de java então peço desculpa pela ignorância.
        Pelo que você disse eu tenho que criar um adapter personalizado, como ja tenho um que estou usando seria somente altera-lo ou tenho que criar outro.
        Eis o meu código de adapter:

        public class JSONParser {

        static InputStream is = null;
        static JSONObject jObj = null;
        static String json = “”;

        // constructor
        public JSONParser() {

        }

        public JSONObject getJSONFromUrl(String url) {

        // Making HTTP request
        try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

        } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        } catch (ClientProtocolException e) {
        e.printStackTrace();
        } catch (IOException e) {
        e.printStackTrace();
        }

        try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, “iso-8859-1”), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
        sb.append(line + “\n”);
        }
        is.close();
        json = sb.toString();
        } catch (Exception e) {
        Log.e(“Buffer Error”, “Error converting result ” + e.toString());
        }

        // try parse the string to a JSON object
        try {
        jObj = new JSONObject(json);
        } catch (JSONException e) {
        Log.e(“JSON Parser”, “Error parsing data ” + e.toString());
        }

        // return JSON String
        return jObj;

        }
        }

      • Esse nao eh o adapter e sim o objeto JSON que recebe os dados do web service que voce esta querendo.
        Adapter -> http://www.androidbrasilprojetos.org/android/adapter-personalizado-custom-adapter/
        Esse tutorial ensina certinho o que eh um adapter e quando usar. De uma lida primeiro.

        By the way o que voce esta tentando fazer??

  5. Giovani Arduini says:

    Olha me desculpe pela ignorância, pois ainda não entendo os termos, mas a minha intenção é a seguinte, tenho esses 2 códigos acima que está funcionando direito porem retorna uma URL que é o caminho das imagens dos resultados, os textos estão sendo exibidos corretamente, pelo adapter:

    ListAdapter adapter = new SimpleAdapter(this, itemstList,
    R.layout.list_item,
    new String[] { TAG_TITLE, TAG_SUBTITLE, TAG_PUBLISHER, TAG_PUBLISHERDATE, TAG_DESCRIPTION}, new int[] {
    R.id.title, R.id.subtitle, R.id.publish, R.id.date, R.id.description});
    //

    setListAdapter(adapter);

    E pelo que vi no link que você me passou, eu nãp precisaria de muita coisa, seria algo parecido com este trecho acima, porém tratando como imagem da net.

    • Pra voce colocar imagens em uma lista, voce precisa construir um adapter proprio, customizado, ao inves de usar um adapter ja da API.
      Exatamente como voce disse, algo parecido com esse simpleAdapter, so que tratando a imagem.
      Ou seja, voce tem que fazer seu adapter na mao, entao sua list usa esse seu adapter, sacou?
      e pra pegar a imagem da url voce usa o exemplo do meu post (primeira parte de codigo pega todas urls as transformam em um array de Bitmap, ou seja, array de imagens. E na segunda vc set a bitmap no seu objeto ImageView que vai receber a imagem)

      • Giovani Arduini says:

        O problema é que nem conheço JAVA e ja estou indo direto para o Android, e não consegui fazer este array de Bitmap e to tentando faz hora.

      • Bitmap[] variavelArray = Bitmap[10];
        Array que contem 10 bitmaps. De 0 ate 9.
        Dae pra cada posicao do array vc atribui um thumbnail
        Exemplo
        Variavelarray[i] = meu codigo q coverte url em bitmap usando a url dos seus objetos JSon.

  6. Giovani Arduini says:

    Valeu pela atenção vou tentar e se der certo, vou postar como fiz !!

  7. Giovani Arduini says:

    Ta dificil a coisa ainda !!!

    ListAdapter adapter = new SimpleAdapter(this, itemstList,
    R.layout.list_item,
    new String[] { TAG_TITLE, TAG_SUBTITLE, TAG_PUBLISHER, TAG_PUBLISHERDATE, TAG_DESCRIPTION}, new int[] {
    R.id.title, R.id.subtitle, R.id.publish, R.id.date, R.id.description});

    com esse trecho eu mando ImageView receber o caminho da imagem e depois eu pego novamente e armazeno em um array e converto em bitmap ?

  8. Cara, ao inves de usar esse simpleAdapter, vc tem usar seu adapter
    Entao vc tem que criar um apdater herdando a classe, que nem nesse turorial- >http://www.androidbrasilprojetos.org/android/adapter-personalizado-custom-adapter/

    No adapter, vc vai praticamente mapear seu layout dizendo pra onde os dados vao.
    Por exemplo, vc passa seu objeto JSON ou seu array de objetos JSON, e ele popula o layout com a sua vontade.
    Dae ao inves de usar simpleadapter, vc vai usar SeuAdapter adapterPersonalizado = new SeuAdapter(JSON); por exemplo.

    Leia atentamente o post que mandei. Voce precisa criar seu adapter, e nao usar o simpleAdapter. Sacou?

  9. Giovani Arduini says:

    Valeu pela atenção até o momento, estava muito apegado aquele adapter pela simplicidade dele e estava indo pelo caminho errado, tentando usar ele de qualquer forma, mas agora estou liberto e e estou seguindo o tutorial que você me passou, mas estou tento problema nesta linha:

    holder.title.setText(p.getNome());

    Mostra o seguinte erro: The method title(), is undefined for the type Retorno

  10. Giovani Arduini says:

    Antes de mais nada obrigado !!
    Olha o código:

    package webgiovani.com;

    import java.util.List;

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;

    public class AdapterCustom extends BaseAdapter {
    //Lista de pessoas!
    private List pessoas;
    private LayoutInflater mInflater;
    private ViewHolder holder;

    static class ViewHolder{
    private TextView tvNome;
    private TextView tvDataNascimento;
    private ImageView img;
    }

    public AdapterCustom(Context context, List pessoas) {
    mInflater = LayoutInflater.from(context);
    this.pessoas = pessoas;
    }

    public int getCount() {
    return pessoas.size();
    }

    public Object getItem(int index) {
    return pessoas.get(index);
    }

    public long getItemId(int index) {
    //return pessoas(index).getImgRes();
    return index;
    }

    public View getView(int posicao, View convertView, ViewGroup arg2) {

    if (convertView == null) {
    convertView = mInflater.inflate(R.layout.list_item, null);
    holder = new ViewHolder();

    holder.tvNome = (TextView) convertView.findViewById(R.id.title);
    holder.tvDataNascimento = (TextView) convertView
    .findViewById(R.id.subtitle);
    holder.img = (ImageView) convertView.findViewById(R.id.imageView);

    convertView.setTag(holder);

    } else {
    holder = (ViewHolder) convertView.getTag();
    }

    Pessoa p = pessoas.get(posicao);

    holder.tvNome.setText(p.getNome());
    holder.tvDataNascimento.setText(p.getDataNascimento());
    holder.img.setImageResource(p.getImgRes());

    return convertView;
    }

    }

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: