如何使用HTML颜色用Zxing编写QR码

时间:2019-07-13 20:39:17

标签: java colors zxing rgba

我正在尝试使用Java的Google zxing库编写彩色的qrcode。此示例似乎使用了ARGB颜色,效果很好。

不幸的是,我必须在应用程序中使用HTML / Hex值作为颜色,所以我试图弄清楚如何构建或转换它。

我通常会构建RGB颜色,并使用alpha值作为其前缀。但是,尽管RGB值最多可以为255-3位数字,但MatrixToImageWriter中的参数似乎只能使用8位数字。这意味着每种颜色只有两位数字。

“ MatrixToImageConfig(-10223615,-1)”具有什么样的价值?有人可以给我解释一下这些颜色值,或者给我一个例子来计算HTML值吗?

谢谢!

QRCodeWriter qrCodeWriter = new QRCodeWriter();

BitMatrix bitMatrix = qrCodeWriter.encode(createQRCodeContent, BarcodeFormat.QR_CODE, createQRCodeSize, createQRCodeSize);

// Color
MatrixToImageConfig conf = new MatrixToImageConfig(-10223615,-1);

BufferedImage qrcode = MatrixToImageWriter.toBufferedImage(bitMatrix, conf);

File qrfile = new File (targetPath);

ImageIO.write(qrcode, "png", qrfile);

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:

String hex = "#ffffff00";

//-16711681 in ARGB int, for example used in Google's zxing library for colored qrcodes
System.out.println(toARGB(hex));

public static int toARGB(String nm) {
Long intval = Long.decode(nm);
long i = intval.intValue();

int a = (int) ((i >> 24) & 0xFF);
int r = (int) ((i >> 16) & 0xFF);
int g = (int) ((i >> 8) & 0xFF);
int b = (int) (i & 0xFF);

return ((a & 0xFF) << 24) |
        ((b & 0xFF) << 16) |
        ((g & 0xFF) << 8)  |
        ((r & 0xFF) << 0);
}