studio libreria library android zxing

libreria - Android ZXing Obtener imagen de código de barras



android qr reader library (3)

No se devuelve en el Intent este momento. No hay manera de conseguirlo. Podría sugerir un parche para que sea devuelto, es probable que se trate de un par de días de trabajo. O pruebe el enfoque de Girish, que es solo para incrustar la codificación directamente.

Estoy usando la biblioteca Zxing para generar un código de barras en mi aplicación de 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);

¿Hay alguna forma de guardar la imagen generada en mi aplicación que está llamando a Zxing? Veo que en mi onActivityResult obtengo intención nula.

Gracias de antemano por tu ayuda


Para almacenar la imagen escaneada en ZXing, debe anular un método drawResultPoints en 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(); }

Esto guardará la imagen escaneada en el directorio raíz de la tarjeta SD, puede personalizarla para guardarla en cualquier carpeta particular que necesite. La imagen que almacenará es la imagen escaneada que aparece como una imagen fantasma mientras escanea.


Toma el caché de vistas y guárdalo en un mapa de bits como este

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

O dibuja tu propio código de barras o código 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); } }

Una vez que obtenga la imagen de mapa de bits, simplemente guárdela

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

También puede consultar una pequeña biblioteca de github que yo había creado para crear códigos de barras o códigos QR

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