Генерация QR-кода с цветами в каждом пикселе изображения и двоичного значения

1

Ну, я делаю проект с QR-кодом. Идея моего проекта состоит в том, чтобы объединить числа QR-кода (8-значное число QR-кода для моего проекта) и создать одноцветный QR-код, идея которого заключается в увеличении объема хранения данных QR-кода.

Тем не менее, до сих пор я сделал большую часть, но я оставил самую важную часть, которая генерирует цветной QR-код. Цветной QR-код должен быть сгенерирован с шестнадцатеричным цветом и установить цвет для каждого пикселя QR-кода, чтобы он был похож на цветной QR-код. На данный момент, я бы попытался сгенерировать с красным цветом 1-го.

Таким образом, я храню binary значение в ArrayList а данные имеют вид 10101010. Затем я изменяю его на шестнадцатеричный. Вот мой код:

 ArrayList<String>arrayList = new ArrayList<>();
 arrayList.add(a1+a2+a3+a4+a5+a6+a7+a8); // Store 1110001 into ArrayList
 String [] hexArray = new String[arrayList.size()];
                    arrayList.toArray(hexArray);


 for(int a = 0; a < hexArray.length; a++){
     int dec = Integer.parseInt(String.valueOf(arrayList.get(a)),2);
     String hexString = Integer.toString(dec, 16);
     String alpha = "0xff";
     String behind = "0000";
     hexArray[a] = alpha+hexString+behind;
 }

Я написал некоторый код для изменения цвета, но код изменяет весь цвет QR-кода, который также является передним планом и фоном QR-кода.

 private Bitmap encode(String contents, int width, int height, @ColorInt int foreground, @ColorInt int background) {

    MultiFormatWriter writer = new MultiFormatWriter();
    BitMatrix matrix = null;
    Bitmap bitmap = null;

    try {
        matrix = writer.encode(contents, BarcodeFormat.QR_CODE, width, height);
    } catch (WriterException e) {
        e.printStackTrace();
    }

    if(matrix != null) {
        int[] pixels = new int[width * height];
        for (int y = 0; y < height; y++) {
            int offset = y * width;
            for (int x = 0; x < width; x++) {
                pixels[offset + x] = matrix.get(x, y) ? foreground : background;
            }
        }
        bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
    }

    return bitmap;
}

Так как ARGB имеет альфа, красный, зеленый, синий цвета. Так что, если я хочу установить шестнадцатеричное значение только на красный цвет. Затем установите для каждого пикселя QR-кода, который станет красным цветом (будет немного отличаться в виде красного цвета, потому что шестнадцатеричное значение отличается) QR-код.

Теги:
colors
qr-code

1 ответ

1
Лучший ответ

Если вы используете Color.parseColor(hexadecimal) для генерации цвета. hexadecimal должен быть похож на формат #ff00ff RGB или формат #ff00ff00 ARGB.

 for(int a = 0; a < hexArrayRed.length; a++){
   int dec = Integer.parseInt(String.valueOf(arrayList.get(a)),2);
   String hexString = Integer.toString(dec, 16);
   while(hexString.length() < 2){
        hexString = "0"+hexString;
   }
   String head = "#ff";
   String behind = "0000";
   hexArrayRed[a] = head+hexString+behind;
   /*
             Red Hexadecimal Value --> #ff _ _ 0000
   */
 }

Для вашей информации я добавляю оператор while чтобы обеспечить длину hexString. Если двоичный код равен 00000011 и он равен 3 в hexadecimal вместо 03. Поэтому я добавляю "0" в hexString.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню