我的目标:生成 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 集成,不满足我的具体问题。将我重定向到适当的解决方案,以防它没有引起我的注意。
另外我想知道一种处理这个问题的优雅方法。