Android: Convertir une image Bitmap en image Bitmap Monochrome (1 Bit par Pixel)

Je veux imprimer une image à un mobile Bluetooth de l'Imprimante (Bixolon SPP-R200) - le SDK n'offre pas direkt méthodes pour imprimer une image en mémoire. J'ai donc pensé à la conversion d'une image Bitmap comme ceci:

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

À une image Bitmap Monochrome. Je suis de dessin, texte noir sur les données ci-dessus Bitmap à l'aide d'une Toile, qui fonctionne bien. Cependant, quand je convertir ci-dessus Bitmap à un objet ByteArray, l'imprimante ne semble pas en mesure de gérer ces octets. Je soupçonne que j'ai besoin d'un Tableau avec un Bit par Pixel (Pixel serait soit blanc = 1 ou noir = 0).

Comme il ne semble pas pratique, hors de la zone de chemin à faire, une idée que j'avais était d'utiliser:

bitmap.getPixels(pixels, offset, stride, x, y, width, height)

pour Obtenir les pixels. Je suppose, j'aurais à utiliser comme suit:

int width = bitmap.getWidth();
int height = bitmap.getHeight();

int [] pixels = new int [width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);

Cependant - je ne suis pas sûr de savoir quelques petites choses:

  • Dans getPixels - t-il un sens à tout simplement passer à la largeur de la "Foulée" argument?
  • Je suppose que j'aurais à évaluer l'information de couleur de chaque pixel et soit de le passer en noir ou en blanc (Et j'écrirais cette valeur dans une nouvelle cible tableau d'octets qui je voudrais finalement passer à l'imprimante)?
  • La meilleure façon d'évaluer chaque couleur de pixel de l'information afin de décider qu'il doit être noir ou blanc? (Le rendu image est en noir de la douleur sur un fond blanc)

Cette approche du sens à tout? Est-il un moyen plus facile? Il ne suffit pas de faire de l'image bitmap en noir & blanc, la question principale est de réduire l'information de couleur pour chaque pixel dans un peu.

Mise à JOUR

Comme suggéré par Ruben je vais d'abord convertir l'image dans une image Bitmap monochrome. et puis je vais le répéter sur chaque pixel:

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();

    int[] pixels = new int[width * height];
    bitmap.getPixels(pixels, 0, width, 0, 0, width, height);

    //Iterate over height
    for (int y = 0; y < height; y++) {
        int offset = y * height;
        //Iterate over width
        for (int x = 0; x < width; x++) {
            int pixel = bitmap.getPixel(x, y);
        }
    }

Maintenant Reuben a suggéré de "lire le plus faible de l'octet de chaque 32-bit pixel" - qui se rapporte à ma question sur la façon d'évaluer la couleur des pixels. Ma dernière question à ce sujet: Dois-je obtenir la plus faible de l'octet simplement en faisant ceci:

//Using the pixel from bitmap.getPixel(x,y)
int lowestByte = pixel & 0xff;
  • J'ai ce QA étoilé parce que je travaillais sur un concept similaire en ce qui concerne par programmation de manipuler des tableaux de devenir des bitmaps monochromes. J'ai une question & son éventuelle réponse ici: stackoverflow.com/questions/17918978/... Si cela aide les gens, merci de m'envoyer un email et je vais venir avec une réponse appropriée à cette question.
  • Pourquoi êtes-vous à l'aide de GetPixels pour charger tous les pixels dans un seul tableau... Alors imbriqués en boucle par le biais de l'image bitmap de NOUVEAU appel individuel GetPixel appels (la moins efficace que possible)? Juste une boucle dans votre tableau d'origine, puis utilisez SetPixels de pousser l'ensemble de la matrice de retour dans le bitmap.
  • bon le code est vraiment vieux xD - je ne pense pas que nous l'utilisons dans le présent formulaire plus, mais comme vous l'avez souligné correctement, il est très inefficace la façon dont c'est écrit là. N'hésitez pas à modifier en fonction de vos suggestion.
InformationsquelleAutor AgentKnopf | 2012-02-21