Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate barcode image in Android application

I need to generate 1D barcode image and set it to ImageView according to given 13-character code. Can anyone help me with this please?

like image 856
Leonidas Avatar asked Apr 27 '12 15:04

Leonidas


1 Answers

You can use zxing library to generate barcode easily.

first, locate core.jar under libs folder.

libs/core.jar 

You can download ZXing-2.1.zip from here.

http://repo1.maven.org/maven2/com/google/zxing/ (source)

After unzipping the file, find the jar file.

\ZXing-2.1\zxing-2.1\core\core.jar 

And then write your own code like below.

import java.util.EnumMap; import java.util.Map;  import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.view.Gravity; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView;  import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix;  public class BarcodeExampleActivity extends Activity {      @Override     protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);      LinearLayout l = new LinearLayout(this);     l.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));     l.setOrientation(LinearLayout.VERTICAL);      setContentView(l);      // barcode data     String barcode_data = "123456";      // barcode image     Bitmap bitmap = null;     ImageView iv = new ImageView(this);      try {          bitmap = encodeAsBitmap(barcode_data, BarcodeFormat.CODE_128, 600, 300);         iv.setImageBitmap(bitmap);      } catch (WriterException e) {         e.printStackTrace();     }      l.addView(iv);      //barcode text     TextView tv = new TextView(this);     tv.setGravity(Gravity.CENTER_HORIZONTAL);     tv.setText(barcode_data);      l.addView(tv);      }      /**************************************************************      * getting from com.google.zxing.client.android.encode.QRCodeEncoder      *       * See the sites below      * http://code.google.com/p/zxing/      * http://code.google.com/p/zxing/source/browse/trunk/android/src/com/google/zxing/client/android/encode/EncodeActivity.java      * http://code.google.com/p/zxing/source/browse/trunk/android/src/com/google/zxing/client/android/encode/QRCodeEncoder.java      */      private static final int WHITE = 0xFFFFFFFF;     private static final int BLACK = 0xFF000000;      Bitmap encodeAsBitmap(String contents, BarcodeFormat format, int img_width, int img_height) throws WriterException {     String contentsToEncode = contents;     if (contentsToEncode == null) {         return null;     }     Map<EncodeHintType, Object> hints = null;     String encoding = guessAppropriateEncoding(contentsToEncode);     if (encoding != null) {         hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class);         hints.put(EncodeHintType.CHARACTER_SET, encoding);     }     MultiFormatWriter writer = new MultiFormatWriter();     BitMatrix result;     try {         result = writer.encode(contentsToEncode, format, img_width, img_height, hints);     } catch (IllegalArgumentException iae) {         // Unsupported format         return null;     }     int width = result.getWidth();     int height = result.getHeight();     int[] pixels = new int[width * height];     for (int y = 0; y < height; y++) {         int offset = y * width;         for (int x = 0; x < width; x++) {         pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;         }     }      Bitmap bitmap = Bitmap.createBitmap(width, height,         Bitmap.Config.ARGB_8888);     bitmap.setPixels(pixels, 0, width, 0, 0, width, height);     return bitmap;     }      private static String guessAppropriateEncoding(CharSequence contents) {     // Very crude at the moment     for (int i = 0; i < contents.length(); i++) {         if (contents.charAt(i) > 0xFF) {         return "UTF-8";         }     }     return null;     }  } 
like image 176
pretty angela Avatar answered Sep 21 '22 10:09

pretty angela