Размытая пиксельная краска на масштабированном холсте drawBitmap на устройствах Samsung - PullRequest
1 голос
/ 15 февраля 2020

Некоторые пользователи сталкивались с проблемой размытых пикселей на устройствах Samsung. У меня нет устройства Samsung для проверки, но у меня нет проблем с телефонами.

Я не могу понять, что отличается от Samsung и почему нет проблем с другими устройствами! Было бы очень хорошо, если бы кто-то мог помочь мне понять!

Спасибо!

Как это выглядит на samsung

Мой код:

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.save();
    canvas.translate(imagePosition.getX(), imagePosition.getY());
    canvas.scale(mScaleFactor, mScaleFactor);

    boolean hasBackground = backgroundImage != null;

    if (hasBackground) {

        canvas.drawBitmap(backgroundImage, 0, 0, backgroundPaint);

        if (currentMode != ColoringModeEnum.NONE && activity.getAppSettings().highlightActiveSquares) {
            canvas.drawBitmap(hintBitmap, 0, 0, paint);
        }
    }

    canvas.drawBitmap(coloringBitmap, 0, 0, paint);
    canvas.restore();
}


private final Paint paint = new Paint();

1 Ответ

0 голосов
/ 16 февраля 2020

Ваше изображение выглядит отфильтрованным. Чтобы это исправить, вы можете позвонить:

backgroundPaint.setFilterBitmap(false)

Тогда возникает вопрос, почему это происходит только на устройствах Samsung? Очевидно, что программисты приложений должны быть в состоянии предсказать, в каком состоянии находятся их Paint объекты, иначе их приложения сломаются (как у вас).

Итак, я пробежал мимо нескольких устройств в своей тестовой лаборатории. Похоже, что значение по умолчанию isFilterBitmap() (FILTER_BITMAP_FLAG) изменилось в API 29, хотя я не могу найти его в исходном коде (если кто-то может его найти или у него есть дополнительные сведения, пожалуйста, добавьте комментарий или предложите редактировать!)

Device                API level     isFilterBitmap() default
---------------------------------------------------------------------
Pixel 3 XL            29            true
Pixel 2 XL emulator   29            true
Pixel 2 XL emulator   28            false
Pixel 2 emulator      26            false
Samsung S6            25            false
Samsung S4            21            false
Droid RAZR            16            false
...