安卓生成EAN13
来源:互联网 发布:php面向对象的封装 编辑:程序博客网 时间:2024/06/06 16:27
从github找到了一个开源的项目(才疏学浅,不知道这个项目是什么开源协议): https://github.com/coolbong/android-barcode
这是项目中MainActivity中的关键代码。我不需要Code128,我需要的是EAN13。
private void drawBarcode() { String barcode = "7761010114033430"; Code128 code = new Code128(this); code.setData(barcode); Bitmap bitmap = code.getBitmap(680, 300); ImageView ivBarcode = (ImageView)findViewById(R.id.code128_barcode); ivBarcode.setImageBitmap(bitmap); }修改为:private void drawBarcode() { /*String barcode = "7761010114033430"; Code128 code = new Code128(this);*/ String barcode="7200000018392"; EAN13 code=new EAN13(); code.setData(barcode); Bitmap bitmap = code.getBitmap(680, 300); ImageView ivBarcode = (ImageView)findViewById(R.id.code128_barcode); ivBarcode.setImageBitmap(bitmap); }
按提示导入:
import com.coolbong.barcodegenerator.model.EAN13;
运行效果:
解码试了一下,确实是EAN13,但是还是不是我想要的,我想要的是 开始符、中间符、结束符 长,其余的短,而且在下方显示 文字信息。
修改EAN13类,增加一个 _textHeight,当 _textHeight 大于 0 时 开始符、中间符、结束符 之外的变短 1.5 倍 _textHeight,并在下方输出 EAN13 的文本。
EAN13编码后为95个二进制,第 0、2、46、48、92、94为 开始符、中间符、结束符 对应的二进制。
增加了_textHeight成员、修改了构造函数、SetData、GetBitmap,修改部分注释中中文注出。
BarCodeActivity.java:
private void drawBarcode() {/*String barcode = "7761010114033430";Code128 code = new Code128(this);*/String barcode="7200000018392";EAN13 code=new EAN13(); code.setData(barcode,50/*增加传入的 textHeight 参数*/); Bitmap bitmap = code.getBitmap(680, 300); ImageView ivBarcode = (ImageView)findViewById(R.id.code128_barcode); ivBarcode.setImageBitmap(bitmap);}
EAN13.java:<pre class="java" name="code">package com.coolbong.barcodegenerator.model;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Align;import android.graphics.Rect;public class EAN13 {private static final String TAG = EAN13.class.getSimpleName();private String data;//增加了成员private int _textHeight;public EAN13() {}//修改了构造函数public EAN13(String data,int text_Height){this.data = data;this._textHeight=text_Height;}//修改了public void setData(String data,int text_Height) {this.data = data;this._textHeight=text_Height;}public String getData() {return data;}public void init() {//data = null;}public byte[] initBuffer() {int sum = 0;//add start code 4bytesum = sum + 3;//add middle code 5bytesum = sum + 5;//add end code 4 bytesum = sum + 3;//add encoded data 7byte * 12sum = sum + (7 * 12);// sum = 11 + 11 + 12 + (11*dataLen);return new byte[sum];}public byte[] encode() {if(isVaildBarcodeData() == false) {android.util.Log.e(TAG, "invalid data length!!");return null;}int len = data.length();int pos = 0;init();byte[] buffer = initBuffer();int first_num = Integer.parseInt(data.substring(0, 1));byte[] patterns = EAN13Constant.FIRST_DIGIT[first_num];pos += appendData(EAN13Constant.START_PATTERN, buffer, pos, "START CODE");for(int i=1; i<len; i++) {int num = Integer.parseInt(data.substring(i, i+1));byte code = patterns[(i-1)];if(code == EAN13Constant.L_CODE) {pos += appendData(EAN13Constant.L_CODE_PATTERN[num], buffer, pos, "L code based number");} else if(code ==EAN13Constant.G_CODE) {pos += appendData(EAN13Constant.G_CODE_PATTERN[num], buffer, pos, "G code based number");} else { // R-codepos += appendData(EAN13Constant.R_CODE_PATTERN[num], buffer, pos, "R code based number");}if(i == 6) {pos += appendData(EAN13Constant.MIDDLE_PATTERN, buffer, pos, "MIDDLE CODE");}}pos += appendData(EAN13Constant.END_PATTERN, buffer, pos, "END CODE");return buffer;}public Bitmap getBitmap( int width, int height) {byte[] code = encode();if(code == null) {return null;}int inputWidth = code.length;// Add quiet zone on both sidesint fullWidth = inputWidth + 6; // for empty(quiet) spaceint outputWidth = Math.max(width, fullWidth);int outputHeight = Math.max(1, height);int multiple = outputWidth / fullWidth;int leftPadding = (outputWidth - (inputWidth * multiple)) / 2;//BitMatrix output = new BitMatrix(outputWidth, outputHeight);Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);// new antialised PaintPaint bgPaint = new Paint(Paint.ANTI_ALIAS_FLAG);// text color - #3D3D3DbgPaint.setColor(Color.rgb(255, 255, 255));Rect bounds = new Rect(0, 0, width, height);canvas.drawRect(bounds, bgPaint);Paint barPaint = new Paint(Paint.ANTI_ALIAS_FLAG);barPaint.setColor(Color.rgb(0, 0, 0));barPaint.setStrokeWidth(0);//这里增加了8行代码Paint textPaint=new Paint(Paint.ANTI_ALIAS_FLAG);textPaint.setColor(Color.BLACK);textPaint.setTextAlign(Align.LEFT);textPaint.setTextSize(this._textHeight);canvas.drawText(this.data.substring(0,1),leftPadding-_textHeight*3/4,height, textPaint);textPaint.setTextAlign(Align.CENTER);canvas.drawText(this.data.substring(1,7),leftPadding+inputWidth * multiple/4,height, textPaint);canvas.drawText(this.data.substring(7,13),leftPadding+inputWidth * multiple*3/4,height, textPaint);</span>for (int inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {if (code[inputX] == 1) {//output.setRegion(outputX, 0, multiple, outputHeight);android.util.Log.e(TAG, "outputX: " + outputX + ", ouputY: 0, multiple: " + multiple + ", outputHeight: " + outputHeight);//canvas.drawRect(new Rect(outputX, 0, multiple, outputHeight), barPaint);//canvas.drawText(text, x, y, paint)//float left, float top, float right, float bottom//这里增加一个分支,让其余的缩短if(inputX!=0 && inputX!=2&& inputX!=46&& inputX!=48&& inputX!=92&& inputX!=94)canvas.drawRect(outputX, 0, (outputX+multiple), outputHeight-_textHeight*3/2, barPaint);elsecanvas.drawRect(outputX, 0, (outputX+multiple), outputHeight, barPaint);}}return bitmap;}public int getSum() {return getSum();}public boolean isVaildBarcodeData() {if(data == null) {return false;}if(data.length() != 13) {return false;}if(checkNumber(data) == false) {return false;}return true;}private static boolean checkNumber(String data) {int len = data.length();for(int i=0; i<len; i++ ) {char ch = data.charAt(i);if (ch < '0' || ch > '9') {//if((ch < 48) || (ch > 57)) {return false;}}return true;}private int appendData(byte[] src, byte[] dst, int pos, String debugdata) {System.arraycopy(src, 0, dst, pos, src.length);if(debugdata != null) {printByteArr(debugdata, src);}return src.length;}private void printByteArr(String msg, byte[] buff) {if(buff == null) {return;}StringBuilder sb = new StringBuilder();for(byte by: buff) {sb.append(by);}android.util.Log.e(TAG, "char: " + msg + " barcode weight: " + sb.toString());}}
1 0
- 安卓生成EAN13
- C# 生成EAN13 BarCode
- asp.net(c#)生成EAN13条形码,webform版本
- Html5添加Canvas的EAN13条形码生成插件教程
- 安卓apk生成
- 安卓生成数字证书
- cocos2dx生成安卓项目
- 安卓 二维码生成代码
- 安卓生成Jar包
- 安卓生成验证码
- msf生成安卓渗透
- 安卓Zxing生成二维码
- 安卓Eclipse生成jar
- 生成一个随机字符串 安卓
- 安卓生成签名并签名打包
- 安卓无法生成R.java文件
- 安卓操作栏,菜单栏的生成
- 安卓二维码扫码和生成
- Docker 从零开始制作基础镜像[centos]
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- CXF服务器发布,客户端调用
- RxJava 使用debounce操作符 优化app搜索功能
- 关于开发环境配置的一点小感想
- 安卓生成EAN13
- 字符串处理函数strcpy(), strcat(), strcmp()的输入输出
- IntelliJ IDEA
- CSS3制作简单动画
- C++ string erase //适用于所有C++ 容器
- 字符集过滤
- 该日在本年第几天
- 初学hibernate 查找数据—问题记录
- java 输入一个链表,反转链表后,输出链表的所有元素。