Хорошо, так что вы действительно близко.Я не могу проверить это прямо сейчас, но в основном нужно изменить
1) Вам нужно применить одинаковую шкалу к X и Y, поэтому вам нужно выбрать меньшую (попробуйте большуюодин, если это не сработает).
matrix.postScale(Math.min(scaleWidth, scaleHeight), Math.min(scaleWidth, scaleHeight));
2) Результатом будет растровое изображение, в котором по крайней мере одна сторона будет иметь размер 512 пикселей, а другая будет меньше.Таким образом, вам нужно добавить отступ, чтобы соответствовать этой стороне до 512 пикселей (одинаково слева и справа / сверху и снизу для центрирования).Для этого вам нужно создать новое растровое изображение нужного размера:
Bitmap outputimage = Bitmap.createBitmap(512,512, Bitmap.Config.ARGB_8888);
3) и, наконец, в зависимости от того, какая сторона resizedBitmap
равна 512px, вам нужно нарисовать resizedBitmap
, чтобыправильная позиция в outputImage
Canvas can = new Canvas(outputimage);
can.drawBitmap(resizedBitmap, (512 - resizedBitmap.getWidth()) / 2, (512 - resizedBitmap.getHeight()) / 2, null);
Обратите внимание, что 512 - resizedBitmap.getWidth()
приводит к 0
и, следовательно, нет отступов сбоку с правильным размером.
4) Теперь вернемся outputImage