2010-06-30 11 views
0

Voici un snip qui lit avec succès au large, à Eclipse LogCat, la hauteur et la largeur de la .PNG sur la carte SD:Je ne peux pas enregistrer cette valeur. Pourquoi?

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Environment; 

//... 

     Bitmap bmp = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/sample.png"); 
     int width = bmp.getWidth(); 
     int height = bmp.getHeight(); 
     int[] pix = new int[width * height]; 
     bmp.getPixels(pix, 0, width, 0, 0, width, height); 

     int R, G, B; 

     for (int y = 0; y < height; y++){ 
      for (int x = 0; x < width; x++) 
      {    
       int index = y * width + x; 

       R = (pix[index] >> 16) & 0xff;  //bitwise shifting 
       G = (pix[index] >> 8) & 0xff; 
       B = pix[index] & 0xff; 

    // [This is where I'd put it. But I can't get a red line off the editor when I do anything.] 
      } 
     } 

     Log.v(TAG, width + " " + height); 

Mon problème: je ne peux pas pour la vie de me utiliser Log.v() pour signaler la valeur de R ou G ou B. Tout ce que je fais dessine une ligne rouge sous v ou quelque chose quand j'essaye. J'ai essayé toString() et tout. Aidez-moi, s'il vous plaît. Merci.

Répondre

1

Vous devez enregistrer dans la boucle afin d'enregistrer chaque pixel. Était-ce là où vous essayiez de le connecter?

Si vous essayiez de l'enregistrer au même endroit que la hauteur et la largeur, quelle valeur de pixel attendiez-vous de vous connecter? Et si l'image était vide? Si c'est ce que vous essayiez de faire, l'erreur serait due à l'utilisation de variables non initialisées ... mais cette erreur mène juste à une question plus profonde de ce que vous essayez de faire.

EDIT: Bon, il s'avère que c'était légèrement différent - c'est un bon exemple de pourquoi il est important de donner le code qui échoue aussi bien que le code qui ne l'est pas, et dire quel est le message d'erreur .

Alors vous avez essayé d'appeler une méthode avec cette signature:

void v(String, String) 

Mais vous avez essayé de l'appeler comme ceci:

Log.v(TAG, R); 

qui tente de passer un int comme String . Vous devez convertir la valeur int en chaîne. OMI, la meilleure façon de le faire est avec String.valueOf:

Log.v(TAG, String.valueOf(R)); 

Cela dit, si vous faites une concaténation de chaîne, le compilateur ajoutera la conversion pour vous. Ainsi, vous pouvez faire l'une de ces:

Log.v(TAG, R + " " + G + " " + B); 
Log.v(TAG, "Red: " + R); 

Comme une note de côté, je suggère fortement que si cela vous donne un moment difficile, il serait utile de lire un bon d'introduction livre Java - celui qui n » t concentrez-vous sur Android et essayez d'écrire de petites applications de console Java pendant un moment. Il est déjà assez difficile d'apprendre à développer sur une nouvelle plate-forme client, sans essayer d'apprendre une langue en même temps. En mettant un peu plus de temps sur la langue à l'avance, vous êtes susceptible de faire des économies à long terme.

+0

J'ai depuis ajouté où je mettrais le Log.v, si cela a fonctionné. La question ici est: rien de ce que je fais là ne fait que R ou G ou B le font sortir de l'éditeur Eclipse sans une ligne rouge sous quelque chose sur la déclaration. Je ne sais pas quoi écrire. Essayez ceci si vous pouvez sur un HelloAndroid avec ce snip ajouté (et les importations approriate), parce que je ne peux pas obtenir une déclaration pour rapporter les valeurs de TGB dehors la porte. Merci pour toute aide. – user225626

+0

@ user225626: Ça devrait aller. Veuillez indiquer la ligne exacte que vous avez essayé d'utiliser * et * le message d'erreur que vous a montré Eclipse. –

+0

'RGB', pas 'TGB'. Maintenant, l'éditeur de commentaires est sur mon chemin. (Je ne vais pas me permettre de modifier après quelques minutes.) – user225626

0

Oh. résolu: java.lang.String a une méthode valueOf. (Je suis nouveau à Java aussi.) Merci Jon.

Questions connexes