`
butter
  • 浏览: 127643 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android Zxing 扫描条码实现竖屏模式(portrait mode) 摄像头camera 旋转90度

 
阅读更多

最近在搞一个关于条形码扫描的软件,需求需要扫描时是竖屏。
最后在zxing官方wiki上面找到解决办法。基本思路如下。
There are 4 relative files:
1, manifest.xml, you need to make CaptureActivity portrait.

2, DecodeHandler.java, rotate data before buildLuminanceSource, it works becuase in YCbCr_420_SP and YCbCr_422_SP, the Y channel is planar and appears first

1 byte[] rotatedData = new byte[data.length];
2 for (int y = 0; y < height; y++) {
3     for (int x = 0; x < width; x++)
4         rotatedData[x * height + height - y - 1] = data[x + y * width];
5 }

3, CameraManager.java, getFramingRectInPreview() need to be modified.

1 rect.left = rect.left * cameraResolution.y / screenResolution.x;
2 rect.right = rect.right * cameraResolution.y / screenResolution.x;
3 rect.top = rect.top * cameraResolution.x / screenResolution.y;
4 rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;

4, CameraConfigurationManager.java, set camera orientation to portrait in setDesiredCameraParameters() use

1 parameters.set("orientation""portrait");

注:版本兼容请看下面。
and in getCameraResolution(), you need to swap x and y, because camera preview size is something like 480*320, other than 320*480.

1 int tmp = cameraResolution.x;
2 cameraResolution.x = cameraResolution.y;
3 cameraResolution.y = tmp;
4 return cameraResolution;

说明:
关于摄像头旋转90度的时候,不同的sdk版本方法不同。
兼容方法如下

01 if (Integer.parseInt(Build.VERSION.SDK) >= <img src="http://www.andcoder.com/wp-includes/images/smilies/icon_cool.gif" alt="8)" class="wp-smiley">
02    setDisplayOrientation(camera, 90);
03   else {
04    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
05     parameters.set("orientation""portrait");
06     parameters.set("rotation"90);
07    }
08    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
09     parameters.set("orientation""landscape");
10     parameters.set("rotation"90);
11    }
12 }
13  
14 protected void setDisplayOrientation(Camera camera, int angle) {
15   Method downPolymorphic;
16   try {
17    downPolymorphic = camera.getClass().getMethod(
18      "setDisplayOrientation"new Class[] { int.class });
19    if (downPolymorphic != null)
20     downPolymorphic.invoke(camera, new Object[] { angle });
21   catch (Exception e1) {
22   }
23  }
<!--EndFragment-->
分享到:
评论
1 楼 yanyanquan 2012-04-18  
我尝试过你的办法了。
但扫描的时候 扫描不到条码呢。为什么呢、。
能回复我一下?
我比较急。博主尽量抽点时间回答下我把。因为程序员都比较忙。我了解,谢谢啊

相关推荐

    Android Zxing 扫描条码实现竖屏模式

    最后,`Android Zxing 扫描条码实现竖屏模式(portrait mode) 摄像头camera 旋转90度.txt`文档很可能是详细的实现步骤或代码示例。它可能包含了如何在ZXing库基础上进行修改,以适应竖屏扫描和旋转相机的详细说明。 ...

    Android Zxing 转换竖屏扫描且提高识别率的方法

    在Android应用开发中,二维码和条形码扫描是常见的需求,而Zxing是一个广泛使用的开源库,用于处理这些任务。本文将详细介绍如何将Zxing调整为竖屏模式,并提高其扫描识别率。 首先,让我们来看如何将Zxing的扫描...

    Android studio 之Zxing 实现二维码生成和扫描

    在Android开发中,Zxing(ZXing,发音“zebra crossing”,斑马线)是一个流行的开源项目,提供了多种格式的一维和二维条码的读取和生成能力。本教程将聚焦于如何在Android Studio环境中利用Zxing库实现二维码的生成...

    Android webview调用摄像头扫描二维码

    本文将详细讲解如何在Android Webview中调用摄像头进行二维码扫描,并结合ZXing(Zebra Crossing)解析包进行二维码的解析。 首先,让我们了解Android Webview的基本用法。Webview是Android SDK提供的一种视图组件...

Global site tag (gtag.js) - Google Analytics