Android Zxing将方向改为肖像

我在阅读关于这个问题的几个问题和post后,试图旋转Zxing显示器。 按照说明进行操作后,显示屏没有旋转,但是扫描仪的长方形没有按原样放置(如附图所示)。

这是我所做的:

  1. 在CameraConfigurationManager中:

    camera.setDisplayOrientation(90); 
  2. 在DecodeHandler.java中

     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; width = height; height = tmp; 
  3. 在CameraManager.java中:

     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; 

在这里输入图像说明

经过很多的苦苦挣扎之后,我发现了这个问题,希望将来能帮到别人。

initFromCameraParameters方法中,假设扫描ALWAYS in landscape mode ,因此在width < height时修复。 如果您按照问题中的步骤并删除此检查,它工作正常。

谢谢您的回答!! 它真的帮了我一件事,我注意到,至less在zxing 2.1上,你需要传递“rotateData”来构buildLuminanceSource而不是“数据”,结果是这样的:

 PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height); 

希望这可以帮助别人!

那么我在ProjectLibrary(xzing项目)做了一个小改动,并且能够将方向景观改为肖像

在添加了setDesiredCameraParameters method of class CameraConfigurationManager

camera.setDisplayOrientation(90);

..在我原来的项目的AndroidManifest.xml文件。 我设置screenOrientation = portrait并在我的ICS 4.0.3工作正常

  <activity android:name="com.google.zxing.client.android.CaptureActivity" android:configChanges="orientation|keyboardHidden" android:exported="false" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden" > <intent-filter> <action android:name="com.phonegap.plugins.barcodescanner.SCAN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 
  1. CameraConfigurationManager

     camera.setDisplayOrientation(90); 
  2. DecodeHandler.java

     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; width = height; height = tmp; 
  3. CameraManager.java

     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; 
  4. CameraConfigurationManager

     if (width > height) { Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect"); int temp = width; width = height; height = temp; } 
  5. 在清单中更改CaptureActivity android:screenOrientation="portrait"

我是条形码扫描仪的开发者。 是的,在纵向模式下扫描需要比这更多。 您必须“旋转”图像数据,并考虑设备的方向,其默认方向以及传感器的方向。

条形码扫描器+以纵向模式扫描,您可以通过与条码扫描器集成完全相同的方式通过Intent与其集成 。 (但是这是一个付费应用程序。)

作为zxing库:2.2.0支持方向转换是固有的

在清单中添加/编辑以下内容:

 <activity android:name="com.journeyapps.barcodescanner.CaptureActivity" android:screenOrientation="fullSensor" tools:replace="screenOrientation" /> 

拨打扫描仪设置其他属性:

 IntentIntegrator integrator = new IntentIntegrator(this); //allows portrait/landscape mode integrator.setOrientationLocked(false);//"additional property" integrator.initiateScan(); 

参考链接: https : //github.com/journeyapps/zxing-android-embedded#changing-the-orientation

我已经尝试了各种补丁,在其他答案build议,但条码识别仍然不可靠。

我强烈build议在纵向模式下使用下面的存储库。 试试吧,它快速而稳定。 我用它在我的混合应用程序。

https://github.com/Dbuggerx/BarcodeScanner