Масштабировать координаты формы из пользовательского вида для адаптации к разным размерам экрана
Я работаю над приложением для обнаружения объектов в режиме реального времени с помощью предварительного просмотра камеры, а затем делаю снимок и отображаю его в другом упражнении, а поверх обнаруженного объекта будет нарисован ограничивающий прямоугольник (в большинстве случаев многоугольник).
Мне удалось это сделать, и все работает отлично. Сейчас я пытаюсь ускорить процесс обнаружения, установив небольшой размер предварительного просмотра камеры и сделав снимок с большим разрешением, изменив параметры камеры. Но координаты, которые я получу, должны быть масштабированы, чтобы соответствовать большому размеру изображения.
В моем случае:
- Размер предварительного просмотра камеры всегда: 640x480 (координаты соответствуют этому размеру)
- Сделанный снимок Размер будет выбран с использованием метода, указанного в принятом ответе здесь.
- В большинстве случаев размер изображения будет таким большим (в моем телефоне это 4260x3120), и я изменяю размер холста, чтобы он соответствовал экрану
Для размера холста я использую это, чтобы получить разрешение экрана:
public static int getScreenWidth() {
return Resources.getSystem().getDisplayMetrics().widthPixels;
}
public static int getScreenHeight() {
return Resources.getSystem().getDisplayMetrics().heightPixels;
}
мой xml файл выглядит так:
<LinearLayout>
....
<android.support.v7.widget.Toolbar
....
</android.support.v7.widget.Toolbar>
....
<FrameLayout
android:id="@android:id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginBottom="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="16dp">
<packagename.CropImageView
android:id="@+id/scannedImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:src="@mipmap/ic_launcher_round" />
</FrameLayout>
</LinearLayout>
и в моем собственном классе представления CropImageView я передаю четыре координаты методу onDraw и рисую пути между ними.
Примечание: я видел пару вопросов примерно об одной и той же теме, но не мог их связать, так как не мог использовать вариант, подобный моему. Любая информация, помощь очень ценится.
1 ответ
Все, что мне нужно было сделать, это найти масштабные коэффициенты для Y
а также X
следуя этому:
scaleFactorY = (float) newWidth / oldWidth;
scaleFactorX = (float) newHeight / oldHeight;
затем умножьте координаты с этими факторами. Также вы должны убедиться, что preview size
, picture size
и container
это будет держать изображение с таким же соотношением сторон, иначе вы получите неуместные координаты.
чтобы получить соотношение сторон, вам нужно просто сделать это: width / height
,