Android не печатает цвет ARGB как # c01c2112 - PullRequest
0 голосов
/ 10 марта 2019

Не поддерживает ли Android печать цвета #c01c2112 в формате ARGB?Это ошибка отображения из-за неправильного цвета.

Эта часть моего кода представляет собой Store 1 и 0 в arraylist.

 ArrayList<String>arrayList = new ArrayList<>();
 for(int a = 0; a < bitmap1.getWidth(); a++){
     for(int b = 0; b < bitmap1.getHeight(); b++){
         String a1 = String.valueOf(arrayInput1[a][b]);
         String a2 = String.valueOf(arrayInput2[a][b]);
         String a3 = String.valueOf(arrayInput3[a][b]);
         String a4 = String.valueOf(arrayInput4[a][b]);
         String a5 = String.valueOf(arrayInput5[a][b]);
         String a6 = String.valueOf(arrayInput6[a][b]);
         String a7 = String.valueOf(arrayInput7[a][b]);
         String a8 = String.valueOf(arrayInput8[a][b]);
        arrayList.add(a1+a2+a3+a4+a5+a6+a7+a8); 
        // Store 1110001 into ArrayList
        }
    }//End of nested For

Затем здесь часть для передачи данных в array.

 String [] hexArrayRed = new String[arrayList.size()];
 arrayList.toArray(hexArrayRed);

Затем я ввожу себе #ff и 0000 и объединяюсь с данными, когда преобразовываю данные в тип значения hexadecimal.Здесь все работает нормально.

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

Тогда возникает проблема.

 QRCodeWriter qwRed = new QRCodeWriter();
 try {
      HashMap<EncodeHintType, Object> hints = new HashMap<>();
      hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
      hints.put(EncodeHintType.MARGIN, 2);

      BitMatrix matrix = qwRed.encode(finalText,
           BarcodeFormat.QR_CODE,
           bitmap1.getWidth(),
           bitmap1.getHeight(),
           hints);

      //START OF RED
      final Bitmap newBitmapRed = Bitmap.createBitmap(
                bitmap1.getWidth(),
                bitmap1.getHeight(),
                Bitmap.Config.ARGB_8888
      );

     int counter1 = 0;
     for (int a = 0; a < bitmap1.getWidth(); a++) {
         for (int b = 0; b < bitmap1.getHeight(); b++) {
              //int c = 0;
              int[] color = new int[hexArrayRed.length];
              color[counter1] = Color.parseColor(hexArrayRed[counter1]); //Error is right here
              int d = matrix.get(a,b)? color[counter1]: Color.WHITE;
              newBitmapRed.setPixel(a,b,d);
              counter1++;
           }
    }
    //END OF RED

Затем я получаю ошибку печати неизвестного цвета.

 Process: kopilim.scs.prototyping, PID: 9890
java.lang.IllegalArgumentException: Unknown color

Это Android не поддерживает цвет как #f212cc12 какой-то вроде этого цвета ARGB?

1 Ответ

1 голос
/ 10 марта 2019

Ваш код преобразования из двоичного в десятичное в шестнадцатеричное работает нормально, за исключением одной крошечной части.

Проблема связана с этой частью вашего кода:

String hexString = Integer.toString(dec, 16);

Проблема с использованием Integer.toString() состоит в том, что он даст вам целое число в виде строки без лишних 0обивка.

Что я имею в виду, например, если ваша двоичная строка была 00000111.Использование Integer.parseInt("00000111", 2); даст вам десятичное целое число 7.

Наконец, использование String hexString = Integer.toString(7, 16); даст вам строку "7".

Поэтому, когда вы вставляете это значение в hexArrayRed[a], а не как #AARRGGBB, вы подключаете его как #AARGGBB, что является неправильным форматом.

Так что, чтобы это исправить, вам просто нужно проверить длину hexString, чтобы увидеть, имеет ли он только размер 1. Если это так, добавьте дополнительный 0 в начало, когда вы создаетеполная шестнадцатеричная строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...