Android:创建条形码图像并在imageView中显示

时间:2013-07-01 09:03:02

标签: android android-imageview barcode zxing

我的目标:生成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集成的,并不满足我的具体问题。如果它没有引起我的注意,请将我重定向到适当的解决方案。

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

1 个答案:

答案 0 :(得分:2)

  

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

Referance here

至于问题refer here的解决方案..它使用Bitmap类来帮助创建条形码..

希望这会有所帮助......