Метод масштабирования изображения «centercrop» как код

Я пытаюсь выяснить, что делает андроид, когда он масштабирует изображение, в частности тип «centercrop». Поэтому, чтобы найти ответ, я искал исходный код ImageView и нашел его здесь .

Так что я пробовал этот код:

public Bitmap buildBluredBoxBackground () { int [] screenSize = Utilities.getScreenSize(mainActivityContext); //screensize[0] = x and [1] is y Matrix mDrawMatrix = new Matrix(); Bitmap bitmap = ((BitmapDrawable)fullscreenViewHolder.imageViewArt.getDrawable()).getBitmap(); float scale; float dx = 0, dy = 0; if (bitmap.getWidth() * screenSize[1] > screenSize[0] * bitmap.getHeight()) { scale = (float) screenSize[1] / (float) bitmap.getHeight(); dx = (screenSize[0] - bitmap.getWidth() * scale) * 0.5f; } else { scale = (float) screenSize[0] / (float) bitmap.getWidth(); dy = (screenSize[1] - bitmap.getHeight() * scale) * 0.5f; } mDrawMatrix.setScale(scale, scale); mDrawMatrix.postTranslate(Math.round(dx), Math.round(dy)); result = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),mDrawMatrix,true); ... //Some processing work return result; } 

Но это не дает мне того же результата. Что я делаю не так ?

Вот пример:

Оригинальное изображение

Введите описание изображения здесь

Orginal ImageView Centercrop

Введите описание изображения здесь

Пробный код

Введите описание изображения здесь

Изменить: XML образа ImageView

 <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/imageViewFullscreenArt"/> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/imageViewFullscreenArtBluredBox"/> </FrameLayout> 

Поэтому мой ImageView полностью экранирован. Вот почему Im использует screenSize для его обработки.

Код, как я его применяю

 Bitmap bluredBoxBackground = buildBluredBoxBackground(); imageViewBluredBox.setImageDrawable(new BitmapDrawable(getResources(),bluredBoxBackground)); 

Подробное описание: Im просто пытается получить тот же эффект, что и ImageView.setScaleType(ScaleType.CENTER_CROP) . Поэтому мой код должен делать то же, что и оригинальный метод setScaleType . Зачем мне это нужно в качестве кода? Потому что в моей ситуации я не могу получить рисунок чертежа моего ImageView, но мне нужно как-то обработать и отредактировать его.

Solutions Collecting From Web of "Метод масштабирования изображения «centercrop» как код"

Я адаптировался из источника. Он будет работать с вами, чтобы изменить возврат к Matrix, как вы применяете.

 public Matrix buildBluredBoxBackground () { int dwidth = imageView.getDrawable().getIntrinsicWidth(); int dheight = imageView.getDrawable().getIntrinsicHeight(); int vwidth = imageView.getWidth() - imageView.getPaddingLeft() - imageView.getPaddingRight(); int vheight = imageView.getHeight() - imageView.getPaddingTop() - imageView.getPaddingBottom(); Matrix mDrawMatrix = imageView.getImageMatrix(); Bitmap bMap = imageView.getDrawingCache(); float scale; float dx = 0, dy = 0; if (dwidth * vheight > vwidth * dheight) { scale = (float) vheight / (float) dheight; dx = (vwidth - dwidth * scale) * 0.5f; } else { scale = (float) vwidth / (float) dwidth; dy = (vheight - dheight * scale) * 0.5f; } mDrawMatrix.setScale(scale, scale); mDrawMatrix.postTranslate(Math.round(dx), Math.round(dy)); return mDrawMatrix; } 

И затем используйте:

 Matrix bluredBoxBackground = buildBluredBoxBackground(); imageViewBluredBox.setImageMatrix(bluredBoxBackground)); imageViewBluredBox.invalidate();