Я выполнил следующий ответ, чтобы сделать это. https://stackoverflow.com/a/16252917/2747591Невозможно преобразовать Zxing в портретный режим в android
Но я не получаю то, что хочу.
Изображение, снятое камерой, повернуто на 90 градусов, пока я пытаюсь выполнить сканирование. Например, если вы нажмете фотографию человека, использующего камеру, то на экране телефона появится предварительный просмотр, повернутый на 90 градусов. Но это не то, что я хочу, поскольку это затрудняет использование сканирования штрих-кода. Я хочу превью, как и должно быть. Любые идеи?
Вот мои изменения в коде
Шаг 1
В DecodeHandler.java я добавил следующий код непосредственно перед buildLuminanceSource
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; // Here we are swapping, that's the difference to #11
width = height;
height = tmp;
data = rotatedData;
PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(data, width, height);
Шаг 2
Измененный getFramingRectInPreview() в Camera Manager.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;
Шаг 3:
Отключить проверку ландшафтного режима в initFromCameraParameters (...) в CameraConfigurationManager.java
Инструкции является Удалить
if (width < height) {
Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect");
int temp = width;
width = height;
height = temp;
}
Но я не нашел этот код в своем файле Cameraconfiguration. так что это не должно иметь значения, в любом случае
Шаг 4
Добавлено следующую строку, чтобы повернуть камеру в setDesiredCameraParameters (...) в CameraConfigurationManager.java только после определения параметров
camera.setDisplayOrientation(90);
Шаг 5
Изменена ориентация CaptureActivity от пейзажа к портрету в файле манифеста приложения, подобном этому
<activity
android:name="com.google.zxing.client.android.CaptureActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="stateAlwaysHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="com.google.zxing.client.android.SCAN"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Вы знаете, что просите клиент стоять на голове, чтобы сделать снимок трудно , так почему бы вам попросить нас сделать то же самое, чтобы помочь вам? Без вашего кода на наших головах на самом деле легче. ;) –
@JeremyMiller Я выполнил ту же процедуру, что и в приведенном выше ответе, который я упомянул наверху. Это единственное изменение кода. Если вы использовали Zxing, вы бы получили его, я думаю. –
У меня есть и работает, поэтому позвольте мне повернуть таблицы: если вы помогли кому-то с их кодированием, прежде чем там, где они утверждают, что это точно то же самое, вы бы получили его, я думаю. –