android条形码编解码

对条形码的编解码可以用barcode库和zxing库,但对于android ,barcode库中的BufferedImage不能使用,我所看到的用得较多的是zxing库,地址在http://code.google.com/p/zxing/ 里面有库的源码与几种平台的例子。里面的例子只支持横屏模式下,要支持竖屏得对其进行修改。步骤如下:

1.在DecodeHandler.java中,修改decode方法
  PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(data, width, height);

    byte[] rotatedData = new byte[data.length];
    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++)
            rotatedData[x * height + height - y - 1] = data[x + y * width];
    }
    int tmp = width; // Here we are swapping, that's the difference to #11
    width = height;
    height = tmp;
    
    PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(rotatedData, width, height);

2.在CameraManager.java中,注释代码:
            // rect.left = rect.left * cameraResolution.x / screenResolution.x;
            // rect.right = rect.right * cameraResolution.x / screenResolution.x;
            // rect.top = rect.top * cameraResolution.y / screenResolution.y;
            // rect.bottom = rect.bottom * cameraResolution.y / screenResolution.y;
修改为
            rect.left = rect.left * cameraResolution.y / screenResolution.x;
            rect.right = rect.right * cameraResolution.y / screenResolution.x;
            rect.top = rect.top * cameraResolution.x / screenResolution.y;
            rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;

3.在CameraConfigurationManager.java中,在setDesiredCameraParameters方法中添加一句
  camera.setDisplayOrientation(90);

4.在AndroidManifest.xml中,把Activity的属性android:screenOrientation="landscape"
改为
  android:screenOrientation="portrait"

编译运行即可!

 

参考:

http://code.google.com/p/zxing/issues/detail?id=178#c46

 

代码:

https://github.com/pplante/zxing-android

 

 

解码实际是对摄像头获得的数据的yuv数据进行解码

注:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 设置后或者在mainfest配置文件中landscape后,onconfigruationChanged不被调用,所以不能用来判断横竖屏

 

对于解码要支持横竖屏得涉及方向的判断,这儿有几篇文章可以参考:

 

yuv数据的转换

http://chenweihuacwh.iteye.com/blog/571223

通过senser获得屏幕旋转

http://blog.csdn.net/a345017062/article/details/6592527

传感器设计的指南针

http://blog.csdn.net/tinya0913/article/details/6057637

通过orientationeventListener判断手机横竖指向

http://androidbiancheng.blogspot.jp/2011/05/orientationeventlistener.html

 

package com.AndroidOrientation;import android.app.Activity;
import android.content.Context;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.OrientationEventListener;
import android.widget.TextView;
import android.widget.Toast;
public class AndroidOrientation extends Activity{
TextView orientation;
MyOrientationEventListener myOrientationEventListener;   
/** Called when the activity is first created. */   
@Override   
public void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);      
 setContentView(R.layout.main);       
orientation = (TextView)findViewById(R.id.orientation);             myOrientationEventListener =  new MyOrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL);             
if (myOrientationEventListener.canDetectOrientation()){        myOrientationEventListener.enable();       
}else{        
Toast.makeText(AndroidOrientation.this,  "Can't DetectOrientation!",  Toast.LENGTH_LONG).show();       
}   }     
@Override
protected void onDestroy() { 
// TODO Auto-generated method stub 
super.onDestroy();
 myOrientationEventListener.disable();}
class MyOrientationEventListener extends OrientationEventListener{ public MyOrientationEventListener(Context context, int rate) { 
 super(context, rate); 
 // TODO Auto-generated constructor stub } 
@Override public void onOrientationChanged(int arg0) {  
// TODO Auto-generated method stub  
orientation.setText(String.valueOf(arg0)); 
}     
 }}

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值