Растровое изображение, нарисованное в прямоугольнике, теперь поверните на 90 и масштабируйте его до того же прямоугольника.

У меня есть растровое изображение, нарисованное в прямоугольнике. Я хочу повернуть растровое изображение на 90 градусов и нарисовать ориентированное растровое изображение в том же прямоугольнике, для которого мне может потребоваться его масштабирование. Нормальное изображение выглядит так

Ориентированное изображение выглядит так

Выше ориентированное изображение не масштабируется, чтобы соответствовать прямоугольнику, ограниченному исходным прямоугольником (см. первое изображение, обычное), а также удаляет нижнюю часть изображения. Ниже приведен фрагмент кода. Любое предложение ?

sourceImageRect.left = 0;
sourceImageRect.top = 0;
sourceImageRect.right = bmp.getWidth();
sourceImageRect.bottom = bmp.getHeight();

destImageRect.top = destTop;
destImageRect.left = destLeft;
destImageRect.right = destLeft + destWidth;
destImageRect.bottom = destTop + destHeight;

canvas.save(Canvas.MATRIX_SAVE_FLAG);

canvas.rotate(90, (destLeft + (destWidth / 2)),
    (destTop + (destHeight / 2)));

canvas.drawBitmap(bmp, sourceImageRect, destImageRect, null);

canvas.restore();

Это выходное изображение, которое мне нужно

Последнее изображение точно соответствует требуемому результату, который мне нужен.


person dask    schedule 20.08.2017    source источник
comment
см. pastebin.com/raw/fK2CzTCz   -  person pskink    schedule 20.08.2017
comment
Код pastebin выглядит как полноэкранная ориентация, в моем случае его можно использовать с некоторыми усилиями. +1 за указание указателя.   -  person dask    schedule 20.08.2017
comment
какая полноэкранная ориентация? что ты имеешь в виду? ты запускал код?   -  person pskink    schedule 20.08.2017


Ответы (2)


Я написал класс Java-инструмента с именем ImageScaleUtil.java несколько дней назад. Помогая, вы можете получить некоторую полезную информацию о нем.

Вы можете использовать его, например:

```java

Bitmap targetBitmap = ImageScaleUtil.getScaleBitmap(Bitmap sourceBitmap, int reqWidth, int reqHeight);

```

person jiar wang    schedule 20.08.2017

Что касается ссылки на pastebin @pskink, я решил, как я решил, и это рабочий код,

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


sourceImageRect.left = 0;
sourceImageRect.top = 0;
sourceImageRect.right = bmpRotated.getWidth();
sourceImageRect.bottom = bmpRotated.getHeight();

destImageRect.top = destTop;
destImageRect.left = destLeft;
destImageRect.right = destLeft + destWidth;
destImageRect.bottom = destTop + destHeight;

canvas.drawBitmap(bmpRotated, sourceImageRect, destImageRect, null);

Однако мне удалось создать растровое изображение вне OnDraw()

person dask    schedule 24.08.2017
comment
вам не нужны дополнительные Bitmap bmpRotated - см. мой код - person pskink; 24.08.2017