Android масштабирование изображений до плотности экрана - PullRequest
14 голосов
/ 08 ноября 2011

У меня есть приложение со встроенным растягиваемым 48x48 пикселей при 71,12 пикселей / дюйм. Я загружаю одно и то же изображение через поток на веб-сервер, затем загружаю этот поток

return new BitmapDrawable(getActivity().getResources(), new ByteArrayInputStream(imageThumbnail));

. Отображаемый результат:

screenshot

Как получить растровое изображение BitmapDrawable таким же образом, как и остальные элементы рисования?

Ответы [ 3 ]

16 голосов
/ 27 июня 2013

Вы можете активировать растровое изображение Android для автоматического масштабирования растрового изображения, коды для этого:

BitmapFactory.Options options = new BitmapFactory.Options();
DisplayMetrics metrics = context.getApplicationContext().getResources().getDisplayMetrics();
options.inScreenDensity = metrics.densityDpi;
options.inTargetDensity =  metrics.densityDpi;
options.inDensity = DisplayMetrics.DENSITY_DEFAULT;

Bitmap bm = BitmapFactory.decodeStream(in, null, options);
in.close();
BitmapDrawable bitmapDrawable = new BitmapDrawable(context.getResources(), bm);
11 голосов
/ 08 ноября 2011

Сделайте что-то вроде этого:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Bitmap bitmapOrg = new BitmapDrawable(getResources(), new  ByteArrayInputStream(imageThumbnail)).getBitmap();

int width = bitmapOrg.getWidth();
int height = bitmapOrg.getHeight();

float scaleWidth = metrics.scaledDensity;
float scaleHeight = metrics.scaledDensity;

// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);

// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, width, height, matrix, true);

Или

Возможно, попробуйте другой подход ... попробуйте установить высоту и ширину изображений в макете XML в углах, я думаю,в данный момент у вас есть ImageView с высотой и шириной wrap_content, попробуйте установить высоту и ширину в 48dip

0 голосов
/ 08 ноября 2011

Получить текущую плотность экрана и установить рисование на эту плотность

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int density  =  metrics.densityDpi
myDrawable.setDensity(densityDpi);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...