66 votes

Convertir un bitmap en GrayScale dans Android

Je suis nouveau sur ce site, et je viens avec une question à propos de Android.

Est-il possible de convertir une image Bitmap en niveaux de gris? Je sais comment dessiner une image bitmap en niveaux de gris (à l'aide de toile des opérations: http://www.mail-archive.com/android-developers@googlegroups.com/msg38890.html) mais j'ai vraiment besoin de La bitmap réelle dans des couleurs grises (ou au moins quelque chose qui pourrait être convertie en une image bitmap plus tard). Dois-je la mettre en œuvre à la main (pixel par pixel opérations)?

J'ai beaucoup cherché, et encore ne pouvait pas trouver. Quelqu'un connaît un moyen facile/moyen efficace de le faire?

Merci beaucoup!

165voto

leparlon Points 971

OH, oui, c'est vrai. Je l'utilisais mal, merci de me l'avoir signalé. (Désolé pour la question inutile) Voici le code de fin (fortement basé sur celui lié) car il peut aider quelqu'un:

 public Bitmap toGrayscale(Bitmap bmpOriginal)
{        
    int width, height;
    height = bmpOriginal.getHeight();
    width = bmpOriginal.getWidth();    

    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
    Canvas c = new Canvas(bmpGrayscale);
    Paint paint = new Paint();
    ColorMatrix cm = new ColorMatrix();
    cm.setSaturation(0);
    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
    paint.setColorFilter(f);
    c.drawBitmap(bmpOriginal, 0, 0, paint);
    return bmpGrayscale;
}
 

Toutes remarques ou commentaires à ce sujet sont les bienvenus.

Merci

15voto

EboMike Points 39257

N'est-ce pas exactement ce que le code que vous créez un lien de fait? Il prend une couleur bitmap ("bmp"), crée un double de l'image bitmap ("bm"), puis tire la couleur bitmap dans "bm" en utilisant le filtre afin de le transformer en niveaux de gris. À partir de ce moment, vous pouvez utiliser "bm" en tant qu'image bitmap en niveaux de gris et de faire ce que vous voulez faire avec elle.

Vous auriez besoin d'ajuster l'échantillon un peu (c'est à l'aide codée en dur tailles, vous pouvez simplement clone de la taille de l'image d'origine), mais d'autres que ce qui semble être prêt à l'utiliser comme il l'obtient, selon ce que vous voulez.

14voto

Code-Monkey Points 89

Je voudrais mentionner qu'avec cette approche, un aspect important doit être pris en compte. Les BitMap sur Android sont stockés dans le NativeHeap. En "créant des bitmaps", vous finirez par obstruer la mémoire, obtenant un OutOfMemoryException (OOM).

Pour cela, le bitmap doit toujours être .recycled() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X