У меня есть изображение размером 960x800, и я пытаюсь заставить его заполнить экран.
В настоящее время я делаю это путем загрузки полного растрового изображения 960x800 и использования исходных и целевых объектов Rect
. Например, мой прямоугольник назначения - 480x320 (размеры моего экрана), а исходный прямоугольник будет 960x800.
background = BitmapFactory.decodeResource(getResources(), R.drawable.background, null);
destRect = new Rect(0,0, screenWidth, screenHeight);
sourceRect = new Rect(0,0, background.getWidth(), background.getHeight());
...
c.drawBitmap(background, sourceRect, destRect, backgroundPaint);
Если я затем использую объект Paint
и задаю дизеринг при установке фона на холст, изображение выглядит абсолютно идеально.
Paint backgroundPaint = new Paint();
backgroundPaint .setDither(true);
Я пришел к выводу, что это может быть не очень эффективно, вызывая ненужную работу при каждом вызове. Чтобы бороться с этим, я хочу попробовать сделать следующее:
background = BitmapFactory.decodeResource(getResources(), R.drawable.background, null);
background = Bitmap.createScaledBitmap(background, display.getWidth(), display.getHeight(), true);
Тем самым создается растровое изображение уже измеренного размера, что устраняет необходимость в любых Rect
объектах Тем не менее, при этом я не могу сохранить то же качество изображения, которое я могу с помощью вышеуказанного метода. Фактически изображение выглядит аналогично тому, которое можно увидеть, если я не использую объект Paint
с вышеупомянутым методом. Использование объекта рисования на масштабированном растровом изображении, по-видимому, не имеет никакого эффекта.
Чтобы привести пример того, как выглядит мое изображение, оно похоже на это изображение (хотя и не столь серьезное)
Что я могу сделать, чтобы получить такое же качество изображения?