В моем приложении я показываю все ошибки, снимая снимок экрана, снимая его граффити и добавляя текст ошибки на нем. Вот как я делаю скриншот:Способ сделать снимок экрана быстрее
private Bitmap getBitmapFromView(View v) {
Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
v.draw(canvas);
return bitmap;
}
final ViewGroup root = (ViewGroup) getWindow().getDecorView();
Bitmap bitmap = getBitmapFromView(root);
А затем преобразовать растровое изображение в оттенки серого, добавить текст и показать. Моя проблема в том, что getBitmapFromView
на некоторых устройствах (Galaxy S5
неожиданных битвах) занимает 500-700 мс для завершения. Мой вопрос в том, есть ли какой-нибудь более быстрый способ сделать снимок экрана или весь экран? Я пробовал View.getDrawingCache()
, и он такой же медленный. Если я прав, то он работает так же, как мой метод getBitmapFromView
.
EDIT:
Хорошо, я понял, что послужило причиной столь низкой производительности с помощью Android Monitor и метод профилирования в моем случае. Это было GradientDrawable
, набрав 80% времени, чтобы нарисовать. Я оптимизировал его, и теперь он занимает около 150 мс. сделать снимок экрана. Но вопрос остается прежним: есть ли более быстрый способ сделать это? Может быть, используя NDK?
Вы пробовали использовать Bitmap.Config.RGB_565 вместо Bitmap.Con fig.ARGB_8888 или вам нужно использовать альфа-канал? – Neil
@ Нет, я пробовал все: «RGB_565',' ARGB_8888', 'ARGB_4444'. Все работают так же медленно. Единственный, который работает быстрее, это «ALPHA_8», но для меня это не имеет смысла. –