Intereting Posts
Почему «notifyDatasetChanged ()» не уведомляет все видимые элементы? Уведомление Android push – определяет, отображается ли Notification.bigContentView Обнаруживать отсутствие наушника (только для громкой связи) на устройстве Android Использование андроида Google Maps API v2 как средство просмотра офлайн-плит: возможно ли это? Скрыть строку в GridLayout Принести активность перед всем запущенным приложением Воспроизвести видео Mp4 с сервера Android Загрузите Debian с Android Нечетная ошибка Android: **** ERROR неизвестен тип 0x73736572 (glSizeof, 72) Создать listview с алфавитными разделителями android – как? Android: загрузка фотографии в Cloudinary с обратным вызовом прогресса в HttpURLConnection Как ограничить высоту раскрывающегося списка Spinner в Android Есть ли подробное описание оптимизаций в процессе сборки Android? Не удается запустить активность в модуле библиотеки Android Android: Что такое отображение Proguard и ProGuard

Конвертировать представление в растровое изображение на Android

Мне нужно преобразовать представление в растровое изображение для предварительного просмотра моего представления и сохранения его в качестве изображения. Я попытался использовать следующий код, но он создает пустое изображение. Я не могу понять, где я ошибся.

View viewToBeConverted; Bitmap viewBitmap = Bitmap.createBitmap(viewToBeConverted.getWidth(), viewToBeConverted.getHeight(),Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(viewBitmap); viewToBeConverted.draw(canvas); savephoto(“f1”, viewBitmap); //// public void savephoto(String filename,Bitmap bit) { File newFile = new File(Environment.getExternalStorageDirectory() + Picture_Card/"+ filename+ ".PNG"); try { newFile.createNewFile(); try { FileOutputStream pdfFile = new FileOutputStream(newFile); Bitmap bm = bit; ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG,100, baos); byte[] bytes = baos.toByteArray(); pdfFile.write(bytes); pdfFile.close(); } catch (FileNotFoundException e) { // } } catch (IOException e) { // } } 

Вот мое решение:

  public static Bitmap getBitmapFromView(View view) { //Define a bitmap with the same size as the view Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888); //Bind a canvas to it Canvas canvas = new Canvas(returnedBitmap); //Get the view's background Drawable bgDrawable =view.getBackground(); if (bgDrawable!=null) //has background drawable, then draw it on the canvas bgDrawable.draw(canvas); else //does not have background drawable, then draw white background on the canvas canvas.drawColor(Color.WHITE); // draw the view on the canvas view.draw(canvas); //return the bitmap return returnedBitmap; } 

Наслаждаться 🙂

Самое голосованое решение не сработало для меня, потому что мой взгляд на ViewGroup (был завышен от LayoutInflater). Мне нужно было вызвать view.measure, чтобы заставить вычислять размер вида, чтобы получить правильный размер вида с помощью view.getMeasuredWidth (Height).

 public static Bitmap getBitmapFromView(View view) { view.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.draw(canvas); return bitmap; } 

Все ответы, используя рисунок на холсте, не будут работать с GLSurfaceView.

Чтобы захватить содержимое GLSurfaceView в растровое изображение, вы должны рассмотреть возможность реализации пользовательского метода с gl.glReadPixels внутри Renderer :: onDrawFrame () .

Здесь размещен фрагмент решения.