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.

Заранее спасибо за вашу помощь

Solutions Collecting From Web of "Android ZXing Получить штрих-код"

Возьмите кеш просмотров и сохраните в растровом виде что-то вроде этого

 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") 

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

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