View.draw (canvas) низкого качества дочерних просмотров - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь решить проблему, когда получаю растровое изображение (с плохим качеством дочерних изображений) и сохраняю его в формате PNG. Есть несколько снимков, сделанных с использованием этого кода:

Bitmap b = Bitmap.createBitmap(
                        Math.round(General.getDisplayWidthPx()), Math.round(General.getDisplayHeightPx()), Bitmap.Config.ARGB_8888);

                final Canvas canvas = new Canvas( b );

                wallFrame.invalidate();
                wallFrame.draw( canvas );

                FileOutputStream out = new FileOutputStream(file);

                b.compress(Bitmap.CompressFormat.PNG, 100, out);

                out.flush();
                out.close();

Когда детское видение маленькое, качество детского видения ужасное. Smaller childview - worse quality

Но чем больше, тем лучше. Larger childview - better quality

Как видно, чем меньше изображение, тем ниже качество. Я также попробовал устаревшие методы:

wallFrame.setDrawingCacheEnabled(true);
Bitmap b = wallFrame.getDrawingCache();

wallFrame - это ZoomLayout , который расширяет RelativeLayout. Дочерние представления в wallFrame имеют вид SubScalingImageView , который расширяет представление. Я думаю, что это не вызвано SubScalingImageView Я пробовал стандартный ImageView и результат был тот же. Когда я делаю скриншот приложения, результат получается лучше.

Изображения загружаются из пользовательского хранилища с использованием Uri (поэтому не из рисования). SubscalingImageView имеет собственные декодеры. В приложении качество картинок отличное.

Мне кажется, проблема где-то в view.draw (canvas). Но я понятия не имею, как отредактировать это, чтобы заставить это работать. Я ценю каждую идею. Спасибо!

...