2010-11-20 7 views
2

En bref, je suis incapable d'accéder à tous les pixels d'une image bitmap.Comment accéder aux pixels d'une image Bitmap sur Android?

J'ai utilisé l'intention de déclencher l'application Camera native et renvoyé une image Bitmap à mon activité d'application. Les données sont définitivement un objet bitmap et je peux afficher, obtenir la hauteur/largeur etc et accéder à quelques pixels en utilisant getPixel(). Cependant, lorsque j'utilise les valeurs de getHeight() et getWidth(), j'obtiens un tableau hors limites. Par traînée et erreur j'ai trouvé que je peux seulement accéder à un nombre réduit de pixels de l'image, par exemple avec une image qui a retourné une valeur de taille et de largeur de 420.380, je pourrais également accéder à 200.100. Je fais ensuite un traitement d'image et utilise setPixel() sur l'image originale. Quand j'affiche l'image elle montre le, disons 200,100, le traitement des pixels et le reste normal, donc les pixels sont évidemment là et accessibles par android mais pas par moi. Je dois parler à d'autres personnes qui ont aussi eu ce problème avec les images.

Est-ce que quelqu'un en sait plus à ce sujet, des raisons? ou un travail autour?

Merci beaucoup à l'avance.

Il semble qu'il n'y a aucun moyen de contourner cela, est-ce que quelqu'un pense qu'il serait préférable/possible d'accéder à l'image directement dans la mémoire peut-être en utilisant le NDK?

Répondre

1

Vous avez une réponse de Albert Pucciani sur les forums Android. Je crée maintenant un int buffer et copiez les pixels, puis utilisez get() et put() pour extraire les pixels. Il est également beaucoup plus rapide d'utiliser get() et put() au lieu du get/setPixel() de la classe Bitmap. Besoin de tester maintenant si cela retourne tous les pixels dans le tampon pour toutes les images. Après plusieurs tests, j'ai découvert qu'il s'agit simplement d'un problème de mémoire car la quantité allouée pour chaque processus comprend toutes les images bitmap.

1

Vous ne serez pas en mesure d'accéder au pixel de (getWidth(), getHeight()) dans une image, car comme tout le reste, ils sont indexés 0. La plage valide de pixels est (0 à getWidth() - 1, 0 à getHeight() - 1), et donc le pixel le plus bas est obtenu par b.getPixel (b.getWidth() - 1, b.getHeight() - 1).

+0

Merci pour la réponse, Ouais je suis au courant de 0-indexé, le problème est que je ne peux pas accéder à plus de la moitié des pixels. Fondamentalement, j'ai quelques boucles imbriquées (int y = 0; y

Questions connexes