Ну, я делаю проект с 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-код.
Если вы используете 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
.