2011-01-18 4 views
2

J'utilise Java open source google ZXing créateur: http://code.google.com/p/zxing/codes QR de couleurs à l'aide ZXing

pour créer des codes QR. J'ai tout en place et de travail (je charge les fichiers java en utilisant coldfusion et l'écriture de l'image dans le navigateur.)

Ce que je veux maintenant est de changer la couleur QR noir à autre chose. Y a-t-il un moyen facile de faire ça? Dois-je modifier une version décompilée du fichier java de l'encodeur? Ou y a-t-il un moyen d'ajouter un argument de couleur à la routine d'encodage?

Merci Shaun

+0

avez-vous trouvé une solution? J'ai besoin d'exactement la même chose. – savepopulation

Répondre

3

Dans MatrixToImageWriter.java (que je suppose que vous utilisez), sous la javase/ changement BLACK constante. C'est un int au format ARGB et a actuellement la valeur 0xFF000000. Laissez la valeur alpha à 0xFF. Changez le reste pour décrire votre couleur au format hexadécimal. Vous pouvez faire la même chose avec WHITE si vous le souhaitez.

+0

Oui, j'utilise le fichier java 'com.google.zxing.client.j2se.MatrixToImageWriter'. J'ai téléchargé une version pré-compilée, mais je suppose que je peux obtenir un fichier source d'ici: (http://code.google.com/p/zxing/source/checkout) et l'éditer pour recompiler le fichier avec un custom Couleur. Est-ce ce que vous feriez? –

1

Try this ::

BitMatrix matrix = new QRCodeWriter().encode(data, BarcodeFormat.QR_CODE, this.width, this.height, getEncodeHints()); 
/* 
Here the config object represents the QR Code colors. 
i.e. Brown and White respectively 
*/ 
MatrixToImageConfig conf = new MatrixToImageConfig(-10223615,-1); 
BufferedImage qrcode = MatrixToImageWriter.toBufferedImage(matrix, conf); 
+0

Pourriez-vous également ajouter une explication? – Robert

0

Je suppose que vous générez code qr comme ci-dessous:

QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(code,null, 
               Contents.Type.TEXT, 
               BarcodeFormat.QR_CODE.toString(),    
               yourDimension); 

la dimension de votre sortie sera fonction de votre code. Définissez votre dimension aussi bas que possible. Ainsi, vous pouvez trouver les positions exactes du code QR où vous voulez changer de couleur.

que d'obtenir vos pixels de bitmap avec:

int[] allpixels = new int[bitmap.getHeight() * bitmap.getWidth()]; 
bitmap.getPixels(allpixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight()); 

Et pixels couleur que vous voulez:

for (int i = 6; i < 9; i++) { 
    allpixels[i] = Color.Red; // your rgb color 
     } 

Convertir dp à Px pour tous les appareils:

qrCodeDimension = dpToPx((int) getResources().getDimension(R.dimen.qr_dimen)); 

public static int dpToPx(int dp) { 
     return (int) (dp * Resources.getSystem().getDisplayMetrics().density); 
    } 

Finaly définir votre pixels colorés en bitmap:

bitmap.setPixels(allpixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight()); 

return Bitmap.createScaledBitmap(bitmap, qrCodeDimension, qrCodeDimension, false); 

Voici comment j'ai résolu le problème. J'espère que ça va t'aider.

Questions connexes