Поддержание качества изображения при создании масштабированного растрового изображения в Android - PullRequest
3 голосов
/ 04 декабря 2011

У меня есть изображение размером 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 с вышеупомянутым методом. Использование объекта рисования на масштабированном растровом изображении, по-видимому, не имеет никакого эффекта.

Чтобы привести пример того, как выглядит мое изображение, оно похоже на это изображение (хотя и не столь серьезное)

Что я могу сделать, чтобы получить такое же качество изображения?

1 Ответ

0 голосов
/ 09 декабря 2011

это условие, если вы хотите, чтобы ваше изображение имело ширину 140, ваша высота будет изменена автоматически

    Bitmap originalBitmap = BitmapFactory.decodeFile(getResources(), R.drawable.background, null);
    Bitmap bitmap=originalBitmap;
    if (bitmap !=null) {
        int h = bitmap.getHeight();
        int w = bitmap.getWidth();
        h = 140*h/w;
        w = 140;
        bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);
        setIconImage(bitmap);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...