Android Genera código QR y código de barras usando Zxing

Código para generar código Qr usando zxing es —

Toma los datos de la secuencia y la imageview la imageview Esto trabaja apenas fino

 private void generateQRCode_general(String data, ImageView img)throws WriterException { com.google.zxing.Writer writer = new QRCodeWriter(); String finaldata = Uri.encode(data, "utf-8"); BitMatrix bm = writer.encode(finaldata, BarcodeFormat.QR_CODE,150, 150); Bitmap ImageBitmap = Bitmap.createBitmap(150, 150,Config.ARGB_8888); for (int i = 0; i < 150; i++) {//width for (int j = 0; j < 150; j++) {//height ImageBitmap.setPixel(i, j, bm.get(i, j) ? Color.BLACK: Color.WHITE); } } if (ImageBitmap != null) { qrcode.setImageBitmap(ImageBitmap); } else { Toast.makeText(getApplicationContext(), getResources().getString(R.string.userInputError), Toast.LENGTH_SHORT).show(); } } 

Ahora mi pregunta es, cómo conseguir bar code usando la misma library.i vi algunos archivos relacionados con bar codes pero no estoy seguro de cómo hacerlo. Desde que quiero generar el bar code dentro de la aplicación y no llamar a ningún web service . Ya que ya estoy usando zxing, no hay punto en la inclusión de itext y frascos barbacoa

Está utilizando QRCodeWriter. Si desea escribir otro tipo de código, utilice otro Writer.

Compruebe este MultiFormatWriter – puede escribir cualquier tipo de barra o encontrar escritores específicos aquí en subcarpetas (esto es de la biblioteca de zxing)

Como Gaskoin dijo … MultiFormatWrite funcionó 🙂 aquí está el código.

  com.google.zxing. MultiFormatWriter writer =new MultiFormatWriter(); String finaldata = Uri.encode(data, "utf-8"); BitMatrix bm = writer.encode(finaldata, BarcodeFormat.CODE_128,150, 150); Bitmap ImageBitmap = Bitmap.createBitmap(180, 40,Config.ARGB_8888); for (int i = 0; i < 180; i++) {//width for (int j = 0; j < 40; j++) {//height ImageBitmap.setPixel(i, j, bm.get(i, j) ? Color.BLACK: Color.WHITE); } } if (ImageBitmap != null) { qrcode.setImageBitmap(ImageBitmap); } else { Toast.makeText(getApplicationContext(), getResources().getString(R.string.userInputError), Toast.LENGTH_SHORT).show(); } 

He probado la respuesta aceptada para generar un código de barras, pero la salida es borrosa cuando se utiliza en un gran ImageView. Para obtener una salida de alta calidad, el ancho de la BitMatrix, el Bitmap y el ImageView final debe ser el mismo. Pero hacerlo utilizando la respuesta aceptada hará que la generación de código de barras realmente lento (2-3 segundos). Esto sucede porque

 Bitmap.setPixel() 

Es una operación lenta, y la respuesta aceptada es hacer uso intensivo de esa operación (2 anidados para bucles).

Para superar este problema he modificado un poco el algoritmo de generación de Bitmap (sólo lo uso para la generación de código de barras) para hacer uso de Bitmap.setPixels () que es mucho más rápido:

 private Bitmap createBarcodeBitmap(String data, int width, int height) throws WriterException { MultiFormatWriter writer = new MultiFormatWriter(); String finalData = Uri.encode(data); // Use 1 as the height of the matrix as this is a 1D Barcode. BitMatrix bm = writer.encode(finalData, BarcodeFormat.CODE_128, width, 1); int bmWidth = bm.getWidth(); Bitmap imageBitmap = Bitmap.createBitmap(bmWidth, height, Config.ARGB_8888); for (int i = 0; i < bmWidth; i++) { // Paint columns of width 1 int[] column = new int[height]; Arrays.fill(column, bm.get(i, 0) ? Color.BLACK : Color.WHITE); imageBitmap.setPixels(column, 0, 1, i, 0, 1, height); } return imageBitmap; } 

Este enfoque es muy rápido incluso para salidas realmente grandes y genera un mapa de bits de alta calidad .

Prueba este código

 Context context = getActivity(); Intent intent = new Intent("com.google.zxing.client.android.ENCODE"); intent.putExtra("ENCODE_TYPE", Text); intent.putExtra("ENCODE_DATA", "12345678901"); intent.putExtra("ENCODE_FORMAT", "UPC_A"); startActivity(intent); 

Espero que esto le ayude.

Ahí tienes,

 public static Bitmap createBarCode (String codeData, BarcodeFormat barcodeFormat, int codeHeight, int codeWidth) { try { Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<EncodeHintType, ErrorCorrectionLevel> (); hintMap.put (EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); Writer codeWriter; if (barcodeFormat == BarcodeFormat.QR_CODE) { codeWriter = new QRCodeWriter (); } else if (barcodeFormat == BarcodeFormat.CODE_128) { codeWriter = new Code128Writer (); } else { throw new RuntimeException ("Format Not supported."); } BitMatrix byteMatrix = codeWriter.encode ( codeData, barcodeFormat, codeWidth, codeHeight, hintMap ); int width = byteMatrix.getWidth (); int height = byteMatrix.getHeight (); Bitmap imageBitmap = Bitmap.createBitmap (width, height, Config.ARGB_8888); for (int i = 0; i < width; i ++) { for (int j = 0; j < height; j ++) { imageBitmap.setPixel (i, j, byteMatrix.get (i, j) ? Color.BLACK: Color.WHITE); } } return imageBitmap; } catch (WriterException e) { e.printStackTrace (); return null; } } 

Por supuesto usted puede apoyar tantos BarcodeFormats como usted desea, apenas cambie el constructor aquí:

 Writer codeWriter; if (barcodeFormat == BarcodeFormat.QR_CODE) { codeWriter = new QRCodeWriter (); } else if (barcodeFormat == BarcodeFormat.CODE_128) { codeWriter = new Code128Writer (); } else { throw new RuntimeException ("Format Not supported."); } 
  • Cómo cambiar correctamente el nombre del paquete en AndroidManifest.xml (por ejemplo, en el proyecto zxing / barcodescanner)
  • No se puede escanear QRCode a través del cliente zxing
  • El fragmento del explorador de código de barras de Zxing se bloquea después de unos minutos
  • EXCEPCIÓN INESPERADA DE SUPERIOR NIVEL: com.android.dex.DexException
  • Uso de zxing en Google Glass
  • Recursos para Android de Xamarin NotFoundException ZXingNetMobile
  • DataMatrix-codificación con zxing sólo genera 14px mapa de bits
  • Cómo establecer el tamaño del mapa de bits en ZXing?
  • Actualizar sdk tiene NoClassDefFoundError para zxing
  • Escáner de código de barras zxing en una div fija en phonegap android app
  • Llamar escáner de código de barras en un clic de botón en la aplicación android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.