类型不匹配:无法从 ByteMatrix 转换为 BitMatrix

Type mismatch: cannot convert from ByteMatrix to BitMatrix

我正在 JAVA 使用 ZXING 库创建 QR 码生成器程序。节目是

import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;


public class QR_Gen {
    private static final String QR_CODE_IMAGE_PATH = "./MyCode.png";

    private static void generateQRCodeImage(String text, int width, int 
height, String filePath) throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(text, 
BarcodeFormat.QR_CODE, width, height);
        Path path = FileSystems.getDefault().getPath(filePath);
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);

    }
    public static void main(String[] args) {
        try {
            generateQRCodeImage("This is my first QR Code", 350, 350, QR_CODE_IMAGE_PATH);
            System.out.println("QR Code generated successfully");
        } catch (WriterException e) {

            System.out.println("Could not generate QR Code, WriterException :: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("Could not generate QR Code, IOException :: " + e.getMessage());
        }
    }

}

编译此程序时出现类型不匹配错误,

Type mismatch: cannot convert from ByteMatrix to BitMatrix

在这一行

BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);

请帮忙!!!

我自己从未使用过这个库,但阅读错误消息我会假设你必须要以位存储字节的问题。 问题是一个字节是由多个位组成的,所以你不能只用一个位来表示一个字节。

将您的编码数据存储到 ByteMatrix 中,然后读取此 post:

  • QR Code encoding and decoding using zxing

收尾。

根据 javadoc here and the source code hereQRCodeWriter.encode 方法 return 是 BitMatrix,而不是 ByteMatrix。所以,那个编译错误不应该发生

除非....

...您正在使用与那些 javadoc 不兼容的 com.google.zxing 库的某些版本 1。检查你从哪里得到你的 zxing JAR 文件。

尽管进行了搜索,但我未能找到具有此不兼容性的版本。然而:

  1. 我注意到官方库已经在 GitHub 上分叉了很多次,其中任何一个 都可能是 不兼容的根源.

  2. 我发现 this 显然是一个分支,并且显然已经调整了 encode。但是,这样做的人至少有改包名的良心!


我不知道这是否相关,但似乎在这个 API 的 C# 版本中,QRCodeWriter.encode 方法 确实 return一个ByteMatrix;请参阅 here 以获取证据。也许您无意中发现有人错误地尝试 "fix" Java API 来匹配 C# API.

我遇到了同样的问题,我通过下载兼容的 zxing-javase.jar 和 zxing

来解决它

http://www.java2s.com/Code/Jar/z/Downloadzxingjavasejar.htm http://www.java2s.com/Code/Jar/z/Downloadzxingjar.htm

最新版本兼容并使用 ByteMatrix 而不是 BitMatrix。从原始 www.java2s.com

下载