Радиотображение 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);
Ответы
Ответ 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
проверьте размер холста, на котором вы рисуете растровое изображение, возможно, ваше полотно по-прежнему остается ландшафтом, поэтому можно увидеть только квадратную часть повернутого растрового изображения.