Zxing (v3.2.0) Camera fixed portrait mode 使用eclipse
Zxing (v3.2.0) Camera fixed portrait mode using eclipse
我按照 Zxing Camera in Portrait mode on Android 上的说明一步一步地在用户使用 zxing 相机时显示肖像。
但这行不通。扫描仪仍然以横向模式出现。
我认为这是因为我使用的是 Zxing 的最新版本 (v3.2.0) 并且该指令已被弃用。
在 v3.2.0 Zxing 中如何做到这一点?
无论如何,这是我尝试过的步骤:
- 修改 buildLuminanceSource(..) 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;
PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height);
- 修改CameraManager.java
中的getFramingRectInPreview()
代码:
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.java
中的 initFromCameraParameters(...)
在Zxing(v3.2.0)中,我没有找到下面的代码
代码:
//remove the following
if (width < height) {
Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect");
int temp = width;
width = height;
height = temp;
}
- 在 CameraConfigurationManager.java
的 setDesiredCameraParameters(...) 中添加以下行以旋转相机
代码:
camera.setDisplayOrientation(90);
- 在我的项目中,修改AndroidManifest.xml
代码:
android:screenOrientation="portrait"
经过几天的反复试验,这是我的工作解决方案:
它需要额外的工作,比方说第 6 步。无论如何始终设置纵向。它奏效了。
第 6 步。
修改CaptureActivity.java
中的onResume
if (prefs.getBoolean(PreferencesActivity.KEY_DISABLE_AUTO_ORIENTATION, true)) {
//setRequestedOrientation(getCurrentOrientation()); // mark this line
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); // mark this line
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
我按照 Zxing Camera in Portrait mode on Android 上的说明一步一步地在用户使用 zxing 相机时显示肖像。
但这行不通。扫描仪仍然以横向模式出现。 我认为这是因为我使用的是 Zxing 的最新版本 (v3.2.0) 并且该指令已被弃用。
在 v3.2.0 Zxing 中如何做到这一点?
无论如何,这是我尝试过的步骤:
- 修改 buildLuminanceSource(..) 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;
PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height);
- 修改CameraManager.java 中的getFramingRectInPreview()
代码:
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.java
中的 initFromCameraParameters(...)在Zxing(v3.2.0)中,我没有找到下面的代码
代码:
//remove the following
if (width < height) {
Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect");
int temp = width;
width = height;
height = temp;
}
- 在 CameraConfigurationManager.java 的 setDesiredCameraParameters(...) 中添加以下行以旋转相机
代码:
camera.setDisplayOrientation(90);
- 在我的项目中,修改AndroidManifest.xml
代码:
android:screenOrientation="portrait"
经过几天的反复试验,这是我的工作解决方案:
它需要额外的工作,比方说第 6 步。无论如何始终设置纵向。它奏效了。
第 6 步。 修改CaptureActivity.java
中的onResumeif (prefs.getBoolean(PreferencesActivity.KEY_DISABLE_AUTO_ORIENTATION, true)) {
//setRequestedOrientation(getCurrentOrientation()); // mark this line
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); // mark this line
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}