Как получить масштабированные фотографии с фиксированной шириной? - PullRequest
0 голосов
/ 08 февраля 2019

Я использую библиотеку fotoapparat.io , чтобы снимать мои фотографии.Поскольку мне не нужно полное разрешение этих 12 или 15 мегапикселей, я хотел бы уменьшить это изображение до "768 x H", тогда как H - моя высота, зависящая от соотношения сторон камеры;обычно 4: 3, поэтому 576 пикселей.

Мне не помогли ни вызовы:

 photoResult.toBitmap(
                    new Function1<Resolution, Resolution>() {
                        @Override
                        public Resolution invoke(Resolution resolution) {
                            float scale = (float) 768 / resolution.width;
                            return scaled(scale).invoke(resolution);
                        }
                    }
            ) 

, ни масштабирование:

    photoResult.toBitmap(
        new Function1<Resolution, Resolution>() {
            @Override
            public Resolution invoke(Resolution resolution) {
                int height = 768;
                int width = 576;
                Resolution r = new Resolution(width, height);
                return scaled(1.0F).invoke(r);
            }
        }
    )

.Во втором примере при использовании фиксированного 1,0F в качестве коэффициента масштабирования изображение искажается.Или 4/3 в качестве коэффициента масштабирования, у изображения было хорошее соотношение, но затем оно было уменьшено до 576 x 432 пикселей.

Как можно уменьшить изображение до фиксированной ширины, не искажая пропорции различныхкамеры

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

В дополнение к ответу TakeInfo вы должны хранить изображения как можно меньшего размера, но вы можете изменить размер изображения в любое время, изменив параметры ImageView

ImageView.getLayoutParams().width = your_width;
ImageView.getLayoutParams().height = your_height;

Вот пример виджета ImageView, который работает для меня

<ImageView
    android:id="@+id/my_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"
    android:layout_margin="5dp"
    android:layout_gravity="center"
    />
0 голосов
/ 08 февраля 2019

У меня есть Java-код для изменения масштаба растрового изображения.Я использовал это, чтобы уменьшить мое изображение до "600 х H".

private Bitmap rescaleBitmap(Bitmap bitmap) {
        float constant = 600.0f / bitmap.getWidth();
        return Bitmap.createScaledBitmap(bitmap, (int) (bitmap.getWidth() * constant),
                (int) (bitmap.getHeight() * constant), true);
    }
...