масштабировать координаты формы из пользовательского вида для адаптации к разным размерам экрана - PullRequest
0 голосов
/ 11 июня 2018

Я работаю над приложением для обнаружения объектов в режиме реального времени с помощью предварительного просмотра камеры, а затем делаю снимок и отображаю его в другом упражнении, а над обнаруженным объектом будет нарисован ограничивающий прямоугольник (в большинстве случаев многоугольник).

Мне удалось это сделать, и все отлично работает.Сейчас я пытаюсь ускорить процесс обнаружения, установив небольшой предварительный размер камеры и сделав снимок с большим разрешением, изменив параметры камеры.Но координаты, которые я получу, должны быть масштабированы, чтобы соответствовать большому размеру изображения.

В моем случае:

  • Размер предварительного просмотра камеры всегда: 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 Ответ

0 голосов
/ 18 июня 2018

Все, что мне нужно было сделать, это найти коэффициенты масштабирования для Y и X, следующие за этим:

    scaleFactorY = (float) newWidth / oldWidth;
    scaleFactorX = (float) newHeight / oldHeight;

, а затем умножить координаты на эти факторы.Также вам нужно убедиться, что preview size, picture size и container, которые будут содержать изображение, имеют одинаковое соотношение сторон, иначе вы получите неуместные координаты.

, чтобы получить соотношение сторон, которое вынужно просто сделать это: width / height.

...