Colors 使用zxing创建彩色二维码

Colors 使用zxing创建彩色二维码,colors,qr-code,zxing,Colors,Qr Code,Zxing,我正在使用google开源java zxing creator: 创建二维码。我已经准备好了所有的东西并开始工作(我正在使用coldfusion加载java文件并将图像写入浏览器) 我现在想要的是将黑色QR颜色更改为其他颜色。有没有一个简单的方法可以做到这一点 我是否需要编辑编码器java文件的反编译版本?或者有没有一种方法可以将颜色参数添加到编码例程中 谢谢 Shaun在MatrixToImageWriter.java中(我假设您正在使用),在javase/下更改常量BLACK。它是ARGB格

我正在使用google开源java zxing creator:

创建二维码。我已经准备好了所有的东西并开始工作(我正在使用coldfusion加载java文件并将图像写入浏览器)

我现在想要的是将黑色QR颜色更改为其他颜色。有没有一个简单的方法可以做到这一点

我是否需要编辑编码器java文件的反编译版本?或者有没有一种方法可以将颜色参数添加到编码例程中

谢谢
Shaun

MatrixToImageWriter.java
中(我假设您正在使用),在
javase/
下更改常量
BLACK
。它是ARGB格式的
int
,当前值为
0xFF000000
。将alpha值保留在
0xFF
。更改其余部分以十六进制格式描述颜色。如果您愿意,您也可以使用
WHITE

试试这个:

BitMatrix matrix = new QRCodeWriter().encode(data, BarcodeFormat.QR_CODE, this.width, this.height, getEncodeHints());
/*
Here the config object represents the QR Code colors.
i.e. Brown and White respectively
*/ 
MatrixToImageConfig conf = new MatrixToImageConfig(-10223615,-1);
BufferedImage qrcode = MatrixToImageWriter.toBufferedImage(matrix, conf);

我假设您生成的二维码如下所示:

QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(code,null,
                                                Contents.Type.TEXT,
                                                BarcodeFormat.QR_CODE.toString(),            
                                                yourDimension);
输出的维度将基于代码。将尺寸设置得尽可能低。所以你可以在你想要改变颜色的地方找到二维码的准确位置

然后使用以下工具从位图中获取像素:

int[] allpixels = new int[bitmap.getHeight() * bitmap.getWidth()];
bitmap.getPixels(allpixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
和所需的颜色像素:

for (int i = 6; i < 9; i++) {
     allpixels[i] = Color.Red; // your rgb color
      }
最后将彩色像素设置为位图:

bitmap.setPixels(allpixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());

return Bitmap.createScaledBitmap(bitmap, qrCodeDimension, qrCodeDimension, false);

我就是这样解决这个问题的。我希望这能对您有所帮助。

是的,我正在使用'com.google.zxing.client.j2se.MatrixToImageWriter'java文件。我已经下载了一个预编译版本,但我想我可以从这里获得一个源文件:()并对其进行编辑,以使用自定义颜色重新编译该文件。你会这么做吗?你能补充一个解释吗?你找到解决办法了吗?我也需要同样的。
bitmap.setPixels(allpixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());

return Bitmap.createScaledBitmap(bitmap, qrCodeDimension, qrCodeDimension, false);