2013-05-19 4 views
0

Je convertis une chaîne de caractères en une image dans mon application android. En suivant différents messages sur SO, j'ai écrit ce code. Mais il n'affiche pas l'image. Y at-il un problème avec le code?conversion de la chaîne de caractères en image

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    et = (EditText) findViewById(R.id.editText1); 
    iv = (ImageView) findViewById(R.id.imageView1); 
    btn = (Button) findViewById(R.id.button1); 



    btn.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      String text = et.getText().toString(); 

      byte[] data = null; 
      try { 
       data = text.getBytes("UTF-8"); 
      } catch (UnsupportedEncodingException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      final String base64 = Base64.encodeToString(data, Base64.DEFAULT); 
      Bitmap bit = StringToBitMap(base64); 
      iv.setImageBitmap(bit); 

     } 

    }); 

} 

public Bitmap StringToBitMap(String encodedString){ 
    try{ 
     byte [] encodeByte=Base64.decode(encodedString,Base64.DEFAULT); 
     Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length); 
     return bitmap; 
    }catch(Exception e){ 
     e.getMessage(); 
     return null; 
    } 
     } 
+0

Ceci ne le convertit pas réellement en une image. Cela convertit les octets qui composent une chaîne en base64, puis essaie de les afficher comme s'il s'agissait d'une image, ce qui, comme vous l'avez constaté, ne fonctionnera pas. Si vous voulez en extraire une image, je pense que vous devez utiliser canvas/Paint pour dessiner la chaîne. – FoamyGuy

+0

@FoamyGuy merci .. Pourriez-vous s'il vous plaît expliquer avec du code? Je suis un débutant en android – newbee

Répondre

0

Essayez ceci pour convertir l'octet [] à une image:

Bitmap bit = BitmapFactory.decodeByteArray(data, 0, data.length); 

Il n'y a aucune raison pour laquelle vous devez encoder votre tableau d'octets en base64 pour décoder immédiatement en arrière.

Bien que la vraie question est: qu'est-ce qui est réellement dans votre EditText? Est-ce une image convertie en chaîne, ou est-ce simplement du texte que vous essayez d'afficher?

S'il s'agit réellement d'une image, alors ce qui précède fonctionnera.

Sinon, cela est une mauvaise approche et ce qu'il semble que vous devez faire, comme FoamyGuy dit dans les commentaires, est dessiner le texte sur la toile du ImageView: https://stackoverflow.com/a/10923478/1426565

Bien que, si vous avez la texte, pourquoi ne pas simplement l'afficher dans un TextView et personnaliser le TextView pour afficher tout ce que vous voulez (c'est-à-dire la taille de la police, la couleur, l'arrière plan, etc.)? Ce serait probablement la meilleure approche. Si vous ne savez pas comment utiliser le TextView, consultez: http://developer.android.com/reference/android/widget/TextView.html

+0

@ Cruceo- EditText est en fait un texte brut. J'ai en fait besoin de ceci pour convertir des SMS contenant des textes Unicode (en particulier des scripts indiens) qui sont affichés en tant que boîtes. – newbee

+0

Essayez de définir le texte dans le TextView en HTML en utilisant la méthode Html.fromHtml(): mTextView.setText (Html.fromHtml ("votre chaîne unicode ici")); Cela devrait vous permettre d'afficher des caractères sans les cases – Guardanis

Questions connexes