Skalowany współczynnik zachowania bitmapy

Chciałbym skalowaćBitmap do zależnej od czasu pracy szerokości i wysokości, gdzie współczynnik proporcji jest zachowany iBitmap wypełnia całą szerokość i wyśrodkowuje obraz w pionie, przycinając nadmiar lub wypełniając lukę za pomocą 0 pikseli alfa.

Obecnie sam przerysowuję mapę bitową, tworzącBitmap wszystkich 0 pikseli alfa i rysunek obrazuBitmap co więcej, skalowanie do dokładnej określonej szerokości i zachowanie proporcji powoduje jednak utratę / wkręcenie danych pikseli.

Oto jak to robię:

Bitmap background = Bitmap.createBitmap((int)width, (int)height, Config.ARGB_8888);
float originalWidth = originalImage.getWidth(), originalHeight = originalImage.getHeight();
Canvas canvas = new Canvas(background);
float scale = width/originalWidth;
float xTranslation = 0.0f, yTranslation = (height - originalHeight * scale)/2.0f;
Matrix transformation = new Matrix();
transformation.postTranslate(xTranslation, yTranslation);
transformation.preScale(scale, scale);
canvas.drawBitmap(originalImage, transformation, null);
return background;

Czy istnieje biblioteka lub lepszy kod, który może to zrobić lepiej? Chciałbym, aby obraz wyglądał tak ostro, jak to możliwe, ale wiedziałem, że moja funkcja nie zapewni wspaniałego wyniku.

Wiem, że mogę mieć obraz w porządku, używając skalowania całkowitoliczbowego, zamiast skalowania zmiennoprzecinkowego, ale potrzebuję, aby szerokość była w 100% wypełniona.

Wiem też oImageViewjestGravity.CENTER_CROP możliwość ta jednak wykorzystuje również skalowanie całkowite, więc odcina szerokość obrazu, gdy nie powinna.

questionAnswers(11)

yourAnswerToTheQuestion