Создание цветных QR-кодов с использованием ZXING - PullRequest
2 голосов
/ 18 января 2011

Я использую java zxing creator для Google с открытым исходным кодом: http://code.google.com/p/zxing/

для создания QR-кодов.У меня все на месте и работает (я загружаю файлы java с помощью coldfusion и записываю изображение в браузер.)

Теперь я хочу изменить черный QR-цвет на что-то другое.Есть ли простой способ сделать это?

Нужно ли мне редактировать декомпилированную версию Java-файла кодировщика?Или я мог бы добавить цветовой аргумент в процедуру кодирования?

Спасибо, Шон

Ответы [ 3 ]

3 голосов
/ 18 января 2011

В MatrixToImageWriter.java (который, как я полагаю, вы используете), в javase/ измените константу BLACK.Это int в формате ARGB и в настоящее время имеет значение 0xFF000000.Оставьте альфа-значение на 0xFF.Измените остальные, чтобы описать свой цвет в шестнадцатеричном формате.Вы можете сделать то же самое с WHITE, если хотите.

2 голосов
/ 27 мая 2015

Попробуйте это ::

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 голосов
/ 16 сентября 2015

Я предполагаю, что вы генерируете код qr, как показано ниже:

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

Размер вашего вывода будет основан на вашем коде.Установите размер как можно ниже.Таким образом, вы можете найти точные позиции кодового места qr, которые вы хотите изменить цвет.

Чем получить ваши пиксели из растрового изображения с помощью:

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

И цветных пикселей вы хотите:

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

Конвертируйте dp в px для каждого устройства:

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

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

Окончательно установите ваши цветные пиксели в растровое изображение:

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

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

Вот так я решил проблему.Я надеюсь, что это поможет вам.

...