在Android项目中使用zxing将字符串编码为图像

在Android项目中使用zxing将字符串编码为图像,android,zxing,eclipse-adt,Android,Zxing,Eclipse Adt,我正在尝试创建,它将显示一个QR编码的图像-通过使用 因此,我在我的Mac OS Yosemite笔记本上安装了HomeBrew、ant和maven,并将ANDROID_HOME环境变量指向ANDROID SDK的位置 然后,我从GitHub签出了最新的zxing,并使用命令mvn package(并使用javacVersion1.8.045)构建了它(看起来没有任何错误) 在此之后,我在Eclipse中创建了一个新的Android项目,并将3个jar文件复制到其libs目录中: androi

我正在尝试创建,它将显示一个QR编码的图像-通过使用

因此,我在我的Mac OS Yosemite笔记本上安装了
HomeBrew
ant
maven
,并将
ANDROID_HOME
环境变量指向ANDROID SDK的位置

然后,我从GitHub签出了最新的zxing,并使用命令
mvn package
(并使用
javac
Version1.8.045)构建了它(看起来没有任何错误)

在此之后,我在Eclipse中创建了一个新的Android项目,并将3个jar文件复制到其
libs
目录中:

  • android/libs/core-3.2.1-SNAPSHOT.jar
  • android内核/target/android-core-3.2.1-SNAPSHOT.jar
  • android/target/android-4.7.4.jar
不幸的是,我在中的简单代码没有编译:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ImageView imageView = (ImageView) findViewById(R.id.qrCode);
    String qrData = "Data I want to encode in QR code";
    int qrCodeDimention = 500;
    QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData, 
            null,
            Contents.Type.TEXT, 
            BarcodeFormat.QR_CODE.toString(), 
            qrCodeDimention);

    try {
        Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
        imageView.setImageBitmap(bitmap);
    } catch (WriterException e) {
        e.printStackTrace();
    }
}
错误如下(此处):

但同时,通过调用
tar
tool,我可以看到这些类(可能不是Eclipse发现的):

# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i WriterException
-rwxrwxrwx  0 0 0 0 28 Mai 20:35 com/google/zxing/WriterException.class
# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i BarcodeFormat
-rwxrwxrwx  0 0 0 0 28 Mai 20:35 com/google/zxing/BarcodeFormat.class
# tar tvfz libs/android-4.7.4.jar | grep -i QRCodeEncoder
-rwxrwxrwx  0 0 0 0 28 Mai 20:39 com/google/zxing/client/android/encode/QRCodeEncoder.class
请问我做错了什么,为什么Eclipse找不到这些类


我也问了我的问题。

好的,我通过查看以下内容解决了我的问题(从字符串生成QR编码图像):

这是我的:

@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView ImageView=(ImageView)findViewById(R.id.qrCode);
试一试{
位图位图=编码为位图(STR);
设置图像位图(位图);
}捕获(写入异常e){
e、 printStackTrace();
}
}
位图encodeAsBitmap(字符串str)引发WriterException{
位矩阵结果;
试一试{
结果=新的多格式编写器()。编码(str,
条形码格式.QR_码,宽度,宽度,空);
}捕获(IllegalArgumentException iae){
//不支持的格式
返回null;
}
int w=result.getWidth();
int h=result.getHeight();
int[]像素=新的int[w*h];
对于(int y=0;y
此外,我还从(此处)获取了core.jar

最后,Eclipse无法使用我用Maven构建的jar文件的最初问题来自Java版本,将在项目属性或Eclipse设置中修复:

# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i WriterException
-rwxrwxrwx  0 0 0 0 28 Mai 20:35 com/google/zxing/WriterException.class
# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i BarcodeFormat
-rwxrwxrwx  0 0 0 0 28 Mai 20:35 com/google/zxing/BarcodeFormat.class
# tar tvfz libs/android-4.7.4.jar | grep -i QRCodeEncoder
-rwxrwxrwx  0 0 0 0 28 Mai 20:39 com/google/zxing/client/android/encode/QRCodeEncoder.class
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ImageView imageView = (ImageView) findViewById(R.id.qrCode);
    try {
        Bitmap bitmap = encodeAsBitmap(STR);
        imageView.setImageBitmap(bitmap);
    } catch (WriterException e) {
        e.printStackTrace();
    }
}

Bitmap encodeAsBitmap(String str) throws WriterException {
    BitMatrix result;
    try {
        result = new MultiFormatWriter().encode(str, 
            BarcodeFormat.QR_CODE, WIDTH, WIDTH, null);
    } catch (IllegalArgumentException iae) {
        // Unsupported format
        return null;
    }
    int w = result.getWidth();
    int h = result.getHeight();
    int[] pixels = new int[w * h];
    for (int y = 0; y < h; y++) {
        int offset = y * w;
        for (int x = 0; x < w; x++) {
            pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
        }
    }
    Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    bitmap.setPixels(pixels, 0, width, 0, 0, w, h);
    return bitmap;
}