Я пытаюсь решить проблему, когда получаю растровое изображение (с плохим качеством дочерних изображений) и сохраняю его в формате 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();
Когда детское видение маленькое, качество детского видения ужасное.
Но чем больше, тем лучше.
Как видно, чем меньше изображение, тем ниже качество. Я также попробовал устаревшие методы:
wallFrame.setDrawingCacheEnabled(true);
Bitmap b = wallFrame.getDrawingCache();
wallFrame - это ZoomLayout , который расширяет RelativeLayout. Дочерние представления в wallFrame имеют вид SubScalingImageView , который расширяет представление. Я думаю, что это не вызвано SubScalingImageView Я пробовал стандартный ImageView и результат был тот же. Когда я делаю скриншот приложения, результат получается лучше.
Изображения загружаются из пользовательского хранилища с использованием Uri (поэтому не из рисования). SubscalingImageView имеет собственные декодеры. В приложении качество картинок отличное.
Мне кажется, проблема где-то в view.draw (canvas). Но я понятия не имею, как отредактировать это, чтобы заставить это работать. Я ценю каждую идею. Спасибо!