Im пытается выяснить, что делает андроид, когда он масштабирует изображение, в частности тип «centercrop». Чтобы найти ответ, я искал исходный код ImageView и нашел его here.Метод масштабирования изображения «centercrop» как код
Так что я попробовал этот код:
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
Пробовал Код
Edit: 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 является fullscreened. Вот почему Im использует screenSize для его обработки.
код, как я применяю его
Bitmap bluredBoxBackground = buildBluredBoxBackground();
imageViewBluredBox.setImageDrawable(new BitmapDrawable(getResources(),bluredBoxBackground));
Подробное описание: Im просто пытается получить тот же эффект, как ImageView.setScaleType(ScaleType.CENTER_CROP)
. Поэтому мой код должен делать то же самое, что и оригинальный метод setScaleType
. Зачем мне это нужно в качестве кода? Потому что в моей ситуации я не могу получить чертежный рисунок моего ImageView, но мне нужно обработать &, отредактируйте его как-нибудь.
Post код для полного Drawable? Как вы применяете его в ImageView? –
1) Вы получаете растровое изображение из «ImageView», в котором вытаскиваемый может быть изменен из оригинала; 2) Вы используете размер экрана вместо размера целевого представления; 3) Вы создаете масштабированное растровое изображение, а не просто используя матрицу scaleType =. Мне нужно увидеть больше кода, чтобы понять, что вы пытаетесь выполнить, но это должно быть простое исправление. Отправьте код своей деятельности вместе с XML-макетом, который имеет целевой вид, а также немного более подробное описание точной проблемы, которую вы пытаетесь решить. –
Я отредактировал мое сообщение с некоторым кодом и лучшим описанием моей проблемы. Надеюсь, на этот раз понятно. Спасибо за вашу помощь. –