Android不会打印#c01c2112

时间:2019-03-10 05:18:28

标签: android colors

Android是否不支持以ARGB格式打印像#c01c2112这样的颜色?由于颜色无效,显示错误。

我的代码的这一部分是将10存储到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);

然后,我将#ff0000输入自己,并在将数据转换为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 个答案:

答案 0 :(得分:1)

您的从二进制到十进制再到十六进制的代码工作正常,除了一小部分。

问题与代码的这一部分有关:

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。十六进制字符串。