【问题标题】:Android ZXing Get Barcode ImageAndroid ZXing 获取条码图片
【发布时间】:2012-07-27 23:49:50
【问题描述】:

我正在使用 Zxing 库在我的 Android 应用程序中生成条形码

Intent intent = new Intent("com.google.zxing.client.android.ENCODE");

intent.putExtra("ENCODE_FORMAT", "UPC_A");
intent.putExtra("ENCODE_DATA", "55555555555");

startActivityForResult(intent,0);

是否可以将生成的图像保存在调用 Zxing 的应用程序中?我在onActivityResult 中看到了 Intent null。

提前感谢您的帮助

【问题讨论】:

  • 你解决了这个问题吗?我也有这个。
  • 我也有同样的问题。我想提取生成的图像,可能像你说的那样从 onActivityResult 中提取......

标签: android zxing


【解决方案1】:

获取视图缓存并将其保存在像这样的位图中

View myBarCodeView = view.getRootView()
//Else this might return null
myBarCodeView.setDrawingCacheEnabled(true)
//Save it in bitmap
Bitmap mBitmap = myBarCodeView.getDrawingCache()

或 绘制自己的条形码或二维码

//Change the writers as per your need
private void generateQRCode(String data) {
    com.google.zxing.Writer writer = new QRCodeWriter();
    String finaldata =Uri.encode(data, "ISO-8859-1");
    try {
        BitMatrix bm = writer.encode(finaldata,BarcodeFormat.QR_CODE, 350, 350);
        mBitmap = Bitmap.createBitmap(350, 350, Config.ARGB_8888);
        for (int i = 0; i < 350; i++) {
            for (int j = 0; j < 350; j++) {
                mBitmap.setPixel(i, j, bm.get(i, j) ? Color.BLACK: Color.WHITE);
            }
        }
    } catch (WriterException e) {
        e.printStackTrace();
    }
    if (mBitmap != null) {
        mImageView.setImageBitmap(mBitmap);
    }
}
public void generateBarCode(String data){
    com.google.zxing.Writer c9 = new Code128Writer();
    try {
        BitMatrix bm = c9.encode(data,BarcodeFormat.CODE_128,350, 350);
        mBitmap = Bitmap.createBitmap(350, 350, Config.ARGB_8888);

        for (int i = 0; i < 350; i++) {
            for (int j = 0; j < 350; j++) {

                mBitmap.setPixel(i, j, bm.get(i, j) ? Color.BLACK : Color.WHITE);
            }
        }
    } catch (WriterException e) {
        e.printStackTrace();
    }
    if (mBitmap != null) {
        mImageView.setImageBitmap(mBitmap);
    }
}

一旦你得到位图图像就保存它

//create a file to write bitmap data
    File f = new File(FilePath, FileName+".png");
    f.createNewFile();

    //Convert bitmap to byte array
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ImageBitmap.compress(CompressFormat.PNG, 0, bos);
    byte[] bytearray = bos.toByteArray();

    //Write bytes in file
    FileOutputStream fos = new FileOutputStream(f);
    fos.write(bytearray);
    fos.flush();
    fos.close();

您还可以查看我创建的用于创建条形码或二维码的small library from github

GZxingEncoder   Encoder = GZxingEncoder.getInstance();
Encoder.initalize(this);
//To generate bar code use this
Bitmap bitmap = Encoder.generateBarCode_general("some text")

【讨论】:

  • 第一个 sn-p 不起作用。您无法获取另一个 Activity 视图的“屏幕截图”。其余的不是一个坏主意..只需嵌入编码。
  • @Girish Nair 我正在扫描条形码和二维码,那么我将如何检查我必须生成条形码还是二维码
  • @ErumHannan : 条形码和二维码有点像 2 种不同的语言,所以你选择说什么是你的选择。那么警报对话框如何询问用户他/她想要生成条形码或二维码的天气
【解决方案2】:

它现在没有在Intent 中返回。没有办法得到它。你可以建议一个补丁让它被退回——这可能需要几天的工作。或者试试 Girish 的方法,就是直接嵌入编码。

【讨论】:

【解决方案3】:

要将扫描的图像存储在 ZXing 中,您必须重写 Class CaptureActivity 中的方法 drawResultPoints。

 String root = Environment.getExternalStorageDirectory().toString();
 File myDir = new File(root);    
 myDir.mkdirs();
 Random generator = new Random();
 int n = 10000;
 n = generator.nextInt(n);
 String fname = "Image-"+ n +".jpg";
 File file = new File (myDir, fname);
 if (file.exists ()) file.delete (); 
 try {
     FileOutputStream out = new FileOutputStream(file);
     barcode.compress(Bitmap.CompressFormat.JPEG, 90, out);
     out.flush();
     out.close();

 } catch (Exception e) {
   Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
 }

这会将扫描的图像保存在 SD 卡的根目录中,您可以自定义它以将其保存在您需要的任何特定文件夹中。它将存储的图像是扫描图像,在您扫描时显示为重影。

【讨论】:

  • 其实这个真的很有用。是的,您可以窃取绘图缓存。但这是一种更可靠的获取扫描位图的方法。
  • @Rakshi 你能解释一下吗
  • @EranGoldin 是的,这种方法可以很好地保存图像,但我将如何获得图像的名称?在 onActivityResult 里面
  • @ErumHanan 名字?您正在获取位图,它没有名称。
  • 抱歉,这是如何工作的?我正在尝试扩展CaptureActivity 而不是Activity,但我无法扩展CaptureActivity。在工具中使用它也不起作用。我无法覆盖 drawResultPoints 函数。我在哪里可以找到CaptureActivity 课程?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 2011-09-05
  • 2021-04-18
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多