Android
是否不支持以ARGB格式打印像#c01c2112
这样的颜色?由于颜色无效,显示错误。
我的代码的这一部分是将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颜色?
答案 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。十六进制字符串。