Подтвердить что ты не робот

Android ZXing Получить штрих-код

Я использую библиотеку 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 я получаю намерение null.

Заранее благодарим за помощь

4b9b3361

Ответ 1

Возьмите кеш просмотров и сохраните его в растровом изображении примерно так.

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

ИЛИ нарисуйте свой собственный штрих-код или QR-код

//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();

Вы также можете проверить небольшую библиотеку из github, которую я создал для создания штрих-кода или QR-кода

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

Ответ 2

Он не возвращается в Intent прямо сейчас. Нет способа получить это. Вы могли бы предложить заплату, чтобы она была возвращена - это, вероятно, работа на пару дней. Или попробуйте подход Girish, который должен просто встроить кодировку напрямую.

Ответ 3

Чтобы сохранить отсканированное изображение в ZXing, вы должны переопределить метод drawResultPoints в классе CaptureActivity.

 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-карты, вы можете настроить его, чтобы сохранить его в любой конкретной папке, в которой вы нуждаетесь. Изображение, которое он будет хранить, - это сканированное изображение, которое отображается во время сканирования призрачным изображением.