我正在处理涉及扫描条形码的应用程序。到目前为止,我已成功使用相机预览扫描条形码,如下所示。链接https://github.com/ZBar/ZBar
然而,它的工作方式并不能真正满足我的需求。该示例使用了相机预览。但是在我的项目应用程序中,我有一个应用程序,允许用户通过单击按钮(Intent)访问摄像机。
之后,它将捕获的图像转换为字节数组。
无论如何使用启用Zbar来扫描图像(字节数组)?或者无论如何使用Zbar与Android的相机而不是相机预览?
谢谢。
这是我的MainActivity.java,允许用户通过意图访问相机。
public class MainActivity extends Activity {
Button cameraBtn;
final int REQUEST_IMAGE_CAPTURE = 1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cameraBtn = (Button)findViewById(R.id.cameraBtn);
cameraBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
}
}}
答案 0 :(得分:0)
Zbar
libs通过继承所有相机功能,使您的工作更轻松。但是,您仍然可以使用Zbar
api创建自己的Camera / CameraPreview来扫描条形码。
下面的代码段解释了Zbar
如何扫描每个帧的条形码。 onPreviewFrame
回调会为您提供相机拍摄的每个帧。
public void onPreviewFrame(byte[] data, Camera camera) {
Camera.Parameters parameters = camera.getParameters();
Size size = parameters.getPreviewSize();
Image barcode = new Image(size.width, size.height, "Y800");
barcode.setData(data);
int result = scanner.scanImage(barcode);
if (result != 0) {
SymbolSet syms = scanner.getResults();
for (Symbol sym : syms) {
Log.v("", sym.getData());
}
}
}
在这里,您需要创建自己的相机活动,该活动会覆盖onPreviewFrame
callabck。此外,您需要加载iconv
库(Zlib
的一部分),实例化Scanner实例。
static {
System.loadLibrary("iconv");
}
ImageScanner scanner = new ImageScanner();
scanner.setConfig(0, Config.X_DENSITY, 3);
scanner.setConfig(0, Config.Y_DENSITY, 3);