Подтвердить что ты не робот

Радиотображение Android на 90 градусов приводит к раздавленному изображению. Нужна настоящая ротация между портретом и пейзажем

Я пытаюсь повернуть растровое изображение на 90 градусов, чтобы изменить его в альбомном формате на портретный. Пример:

[a, b, c, d]
[e, f, g, h]
[i, j, k, l]

повернута на 90 градусов по часовой стрелке, становится

[я, е, а]
[J, F, Ь]
[К, г, с]
[Л, ч, д]

Используя приведенный ниже код (из онлайн-примера), изображение поворачивается на 90 градусов, но сохраняет соотношение сторон ландшафта, поэтому вы получаете вертикально сжатое изображение. Я делаю что-то неправильно? Есть ли другой метод, который мне нужно использовать? Я также хочу повернуть файл jpeg, который я использую, чтобы создать растровое изображение, если это проще.

 // create a matrix for the manipulation
 Matrix matrix = new Matrix();
 // resize the bit map
 matrix.postScale(scaleWidth, scaleHeight);
 // rotate the Bitmap
 matrix.postRotate(90);

 // recreate the new Bitmap
 Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOriginal, 0, 0, widthOriginal, heightOriginal, matrix, true); 
4b9b3361

Ответ 1

Это все, что нужно для поворота изображения:

Matrix matrix = new Matrix();
matrix.postRotate(90);
rotated = Bitmap.createBitmap(original, 0, 0, 
                              original.getWidth(), original.getHeight(), 
                              matrix, true);

В вашем примере кода вы включили вызов postScale. Может быть, это причина, по которой ваш образ растягивается? Возможно, возьмите это и выполните еще несколько тестов.

Ответ 2

Вот как бы вы правильно вращали его (это обеспечивает правильный поворот изображения)

public static Bitmap rotate(Bitmap b, int degrees) {
    if (degrees != 0 && b != null) {
        Matrix m = new Matrix();

        m.setRotate(degrees, (float) b.getWidth() / 2, (float) b.getHeight() / 2);
        try {
            Bitmap b2 = Bitmap.createBitmap(
                    b, 0, 0, b.getWidth(), b.getHeight(), m, true);
            if (b != b2) {
                b.recycle();
                b = b2;
            }
        } catch (OutOfMemoryError ex) {
           throw ex;
        }
    }
    return b;
}

Ответ 3

Этот код отлично работал у меня:

                Matrix matrix = new Matrix();

            matrix.setRotate(90, 0, 0);
            matrix.postTranslate(original.getHeight(), 0);

            rotatedBitmap = Bitmap.createBitmap(newWidth, newHeight, original.getConfig());
            Canvas tmpCanvas = new Canvas(rotatedBitmap);
            tmpCanvas.drawBitmap(original, matrix, null);
            tmpCanvas.setBitmap(null);

Ответ 4

проверьте размер холста, на котором вы рисуете растровое изображение, возможно, ваше полотно по-прежнему остается ландшафтом, поэтому можно увидеть только квадратную часть повернутого растрового изображения.