Как центрировать обрезку изображения программно, сохраняя пропорции? - PullRequest
1 голос
/ 30 апреля 2020

Я хочу, чтобы мое изображение было обрезано по центру, и по щелчку этого полного изображения отображается.

Я искал в Google и нашел какой-то код, который делает то, что я хотел, но я не мог понять какую-то его часть.

public Bitmap scaleCenterCrop(Bitmap source, int newHeight, int newWidth) {

float xScale = (float) newWidth / sourceWidth;
float yScale = (float) newHeight / sourceHeight;
float scale = Math.max(xScale, yScale);
float scaledWidth = scale * sourceWidth;
float scaledHeight = scale * sourceHeight;

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

float left = (newWidth - scaledWidth) / 2;   
float top = (newHeight - scaledHeight) / 2;

// The target rectangle for the new, scaled version of the source bitmap will now
// be
RectF targetRect = new RectF(left, top, left + scaledWidth, top + scaledHeight);

Вышеуказанный прямоугольник - это то, что я не понимаю Для одного из моих изображений значение аргумента "top" отрицательно. Как можно android выбрать верхнюю часть изображения, если оно отрицательное.

Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, source.getConfig());
Canvas canvas = new Canvas(dest);
canvas.drawBitmap(source, null, targetRect, null);

return dest;

}

1) Насколько я знаю, вышеуказанный прямоугольник будет соответствовать исходное изображение в соответствии с границами, и если я оставлю значение 20 в качестве левого значения, изображение будет отображать поле с разницей в 20 слева, а если я задаю 0, то оно займет всю ширину, то как оно принимает отрицательные значения.

2) Как код получил точное положение центра изображения?

Было бы очень полезно, если бы кто-то ответил на вышеуказанные вопросы. Заранее спасибо.

...