Я добавил библиотеку Fotoapparat в свое приложение. Чтобы управлять всем приложением одной рукой, я пытаюсь сделать CameraView в портретном режиме родителями ConstraintLayout. Как вы можете видеть на следующем снимке экрана, само CameraView является альбомным, но родительский ConstraintLayout всего фрагмента - портретный режим, так что пользователь может управлять приложением одной рукой:
Удержание одной рукой для захвата ландшафта
Как вы можете видеть, CameraView смоделирован в Lanscape, конечно, это будет означать потерю качества.
Затем я снимаю изображение и показываю захваченное изображение в следующем фрагменте. Как вы можете видеть, захваченное изображение теперь в портретном режиме:
Захваченные изображения показаны в портрете
Как видите, я снял пластиковую крышку смартфона также в альбомной ориентации. Левый и правый углы подходят очень хорошо. Но верхняя и нижняя части изображений имеют определенно больше пикселей, чем показано в предварительном просмотре в предыдущем фрагменте.
Я создаю объект Fotoapparart, например:
fotoapparat = Fotoapparat
.with(activity)
.into(cameraView)
.focusView(focusView)
.sensorSensitivity(highestSensorSensitivity())
.focusMode(firstAvailable(
FocusModeSelectorsKt.continuousFocusPicture(),
FocusModeSelectorsKt.autoFocus()))
.lensPosition(back())
.build();
мой макет похож на:
<io.fotoapparat.view.CameraView
android:id="@+id/myapp_camera_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="@dimen/myapp_border_margin"
android:layout_marginEnd="@dimen/myapp_border_margin"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintDimensionRatio="1.778"
app:layout_constraintBottom_toTopOf="@+id/myapp_border"
app:layout_constraintTop_toBottomOf="@id/myapp_holder"
app:layout_constraintVertical_bias="0.5">
<io.fotoapparat.view.FocusView
android:id="@+id/myapp_focus_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</io.fotoapparat.view.CameraView>
и вот у меня есть функция takePhoto:
void takePicture(final boolean fotoapparatIsStopped) {
if (!fotoapparatIsStopped) {
PhotoResult photoResult = fotoapparat.takePicture();
photoResult.toBitmap()
.whenDone(new WhenDoneListener<BitmapPhoto>() {
@Override
public void whenDone(@Nullable BitmapPhoto photo) {
this.bitmapPhoto = photo;
}
});
}
}
Версии: Фотоаппарат 2.4.0
Java SDK 8
Android Studio 3.2
Что я не так делаю?
или другими словами:
Как я могу запечатлеть пейзаж, удерживая камеру / портрет смартфона?