1

我的目标:生成 PDF417 格式的二维条码并将其显示在我的应用程序的 ImageView 中。

我正在使用 ZXing2.1 库的 core.jar 和 j2se.jar。

以下代码尝试创建条形码并将其显示在 imageView 中。

ImageView imageView = (ImageView) findViewById(R.id.imageView);
    try {

        Writer writer;
        BitMatrix bitMatrix = null;
        writer = new PDF417Writer();
        bitMatrix = writer.encode("123456789", BarcodeFormat.PDF_417, 580, 150);

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        MatrixToImageWriter.writeToStream(bitMatrix, "png", byteArrayOutputStream);
        InputStream decodedInput=new ByteArrayInputStream(((ByteArrayOutputStream) byteArrayOutputStream).toByteArray());
        Drawable d = BitmapDrawable.createFromStream(decodedInput, "src");
        imageView.setImageDrawable(d);
        System.out.println("PDF417 Code Generated.");
    } catch (Exception e) {

    }

当我执行代码时,我得到这个错误:

07-01 08:42:13.148: ERROR/dalvikvm(1508): Could not find class 'java.awt.image.BufferedImage', referenced from method com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage
07-01 08:42:13.178: ERROR/AndroidRuntime(1508): FATAL EXCEPTION: main
    java.lang.NoClassDefFoundError: java.awt.image.BufferedImage
    at com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage(MatrixToImageWriter.java:54)
    at com.google.zxing.client.j2se.MatrixToImageWriter.writeToStream(MatrixToImageWriter.java:99)
    at com.google.zxing.client.j2se.MatrixToImageWriter.writeToStream(MatrixToImageWriter.java:91)
    at com.example.untitled.MyActivity.onCreate(MyActivity.java:35)
    at android.app.Activity.performCreate(Activity.java:5104)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
    at android.app.ActivityThread.access$600(ActivityThread.java:141)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5039)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)

原因似乎很明显。但现在我不知道如何将图像数据从 bitMatrix 写入流。

请提出解决方案。如果有的话,我将不胜感激。

注意:我经历了很多堆栈溢出解决方案和网络上的解决方案。他们中的大多数都围绕 ZXing 集成,不满足我的具体问题。将我重定向到适当的解决方案,以防它没有引起我的注意。

另外我想知道一种处理这个问题的优雅方法。

4

1 回答 1

3

整个 java.awt.* 框架不是 Android SDK 的一部分,包括 BufferedImage,因此不受模拟器或物理设备的支持。Android 有自己的加载和渲染图形的实现。

参考这里

至于问题的解决方案请参考这里..它使用位图类来帮助创建条形码..

希望这可以帮助...

于 2013-07-01T09:18:38.973 回答