Android Zxing将方向改为肖像
我在阅读关于这个问题的几个问题和post后,试图旋转Zxing显示器。 按照说明进行操作后,显示屏没有旋转,但是扫描仪的长方形没有按原样放置(如附图所示)。
这是我所做的:
-
在CameraConfigurationManager中:
camera.setDisplayOrientation(90);
-
在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;
-
在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>
-
在
CameraConfigurationManager
:camera.setDisplayOrientation(90);
-
在
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;
-
在
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;
-
在
CameraConfigurationManager
:if (width > height) { Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect"); int temp = width; width = height; height = temp; }
-
在清单中更改
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议在纵向模式下使用下面的存储库。 试试吧,它快速而稳定。 我用它在我的混合应用程序。