Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Couleur d'un pixel d'une image

    8 juin 2012 à 15:24:17

    Bonjour à tous,

    Je débute en développement sur android et je souhaiterais pour un projet récupérer la couleur du pixel d'une image sur lequel l'utilisateur pointe. J'ai essayé d'utiliser la fonction getpixel(). Je me suis inspiré de ce que j'ai pu trouver sur le net. Dans le simulateur, dès que je clique sur mon image et glisse dessus, l'application se ferme avec un message d'erreur "The application Trackballtest (process com.test.ette) has stopped unexpectedly".

    Voici le code que j'utilise :
    package com.test.ette;
    
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.ImageView;
    import android.graphics.Bitmap;
    import android.graphics.Color;
    import android.graphics.drawable.BitmapDrawable;
    
    public class TrackballtestActivity extends Activity {
        /** Called when the activity is first created. */
    	
    	ImageView myImageView;
    	
    	@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main); 
    	}
    	
    	@Override
    	public void onStart() {
            super.onStart();
            test();
        }
    
        @Override
        public synchronized void onResume() {
            super.onResume();
           
        }
    	    
    	private void test(){
    		
            myImageView = (ImageView)findViewById(R.id.imageView1);
            
             myImageView.setOnTouchListener(new ImageView.OnTouchListener(){
            
            
    			public boolean onTouch(View myView, MotionEvent event) {
    				// TODO Auto-generated method stub
    				
    				if (event.getAction()==MotionEvent.ACTION_MOVE)
    				{		
    					int X = (int)event.getX();
    					int Y = (int)event.getY();
    					
    					Bitmap bitmap =((BitmapDrawable)myImageView.getDrawable()).getBitmap();
    					int pixel = bitmap.getPixel(X,Y);
    					
    					int red = Color.red(pixel);
    					int green = Color.green(pixel);
    					int blue = Color.blue(pixel);
    
    					}
    				return true;
    			}
            	
            });
        }
    }
    


    Je n'ai pas encore interprété les données récupérées car ce morceau de code me pose des problèmes.
    Merci à tous, ceci étant mon premier message j'espère que l'utilisation des balises aura été correcte par rapport aux règles du forum.
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2012 à 21:34:43

      Bonjour,

      Peux-tu nous indiquer ce qu'il y a dans ton LogCat ?
      • Partager sur Facebook
      • Partager sur Twitter
      Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
        11 juin 2012 à 10:27:37

        Bonjour,

        Voici ce qui apparaît dans mon LogCat:

        06-11 08:20:48.405: D/AndroidRuntime(231): Shutting down VM
        06-11 08:20:48.415: W/dalvikvm(231): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
        06-11 08:20:48.415: E/AndroidRuntime(231): Uncaught handler: thread main exiting due to uncaught exception
        06-11 08:20:48.435: E/AndroidRuntime(231): java.lang.IllegalArgumentException: x must be < bitmap.width()
        06-11 08:20:48.435: E/AndroidRuntime(231):         at android.graphics.Bitmap.checkPixelAccess(Bitmap.java:785)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at android.graphics.Bitmap.getPixel(Bitmap.java:740)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at com.test.ette.TrackballtestActivity$1.onTouch(TrackballtestActivity.java:52)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at android.view.View.dispatchTouchEvent(View.java:3705)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at android.os.Handler.dispatchMessage(Handler.java:99)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at android.os.Looper.loop(Looper.java:123)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at android.app.ActivityThread.main(ActivityThread.java:4363)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at java.lang.reflect.Method.invokeNative(Native Method)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at java.lang.reflect.Method.invoke(Method.java:521)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
        06-11 08:20:48.435: E/AndroidRuntime(231):         at dalvik.system.NativeStart.main(Native Method)
        06-11 08:20:48.476: I/dalvikvm(231): threadid=7: reacting to signal 3
        06-11 08:20:48.476: E/dalvikvm(231): Unable to open stack trace file '/data/anr/traces.txt': Permission denied


        Je ne connaissais pas cette fenêtre, il est vrai qu'en la lisant je peux visualiser certaines erreurs que j'ai commises. En attendant une réponse je vais essayer de me corriger moi même.

        Encore merci.
        • Partager sur Facebook
        • Partager sur Twitter
          11 juin 2012 à 11:30:33

          Bonjour,

          Lire le LogCat, c'est bien. L'utiliser pour résoudre ses problèmes, c'est mieux. :)

          Si on regarde bien ce que tu as posté:
          06-11 08:20:48.435: E/AndroidRuntime(231): java.lang.IllegalArgumentException: x must be < bitmap.width()
          06-11 08:20:48.435: E/AndroidRuntime(231):         at android.graphics.Bitmap.checkPixelAccess(Bitmap.java:785)
          06-11 08:20:48.435: E/AndroidRuntime(231):         at android.graphics.Bitmap.getPixel(Bitmap.java:740)
          06-11 08:20:48.435: E/AndroidRuntime(231):         at com.test.ette.TrackballtestActivity$1.onTouch(TrackballtestActivity.java:52)


          Ton erreur arrive donc à l'endroit suivant: com.test.ette.TrackballtestActivity$1.onTouch(TrackballtestActivity.java:52) et l'erreur est java.lang.IllegalArgumentException: x must be < bitmap.width()

          Cela veut dire que tu essayes de faire un traitement sur un pixel hors de l'image puisque X est plus grand que la largeur de ton image.

          Vérifie donc les coordonnées que tu récupères.
          • Partager sur Facebook
          • Partager sur Twitter
            11 juin 2012 à 12:34:41

            Merci pour vos réponses,

            En effet mes coordonnées n'étaient pas bonnes. Maintenant que je connais la source du problème je vais pouvoir avancer.

            Encore merci à vous pour votre aide, et maintenant que je connais le LogCat j'espère pouvoir progresser et corriger mes erreurs.

            Bonne journée
            • Partager sur Facebook
            • Partager sur Twitter
              11 juin 2012 à 13:48:23

              De rien. N'oublie pas de passer le sujet en Résolu.

              Bon développement !
              • Partager sur Facebook
              • Partager sur Twitter

              [Android] Couleur d'un pixel d'une image

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown