Intereting Posts
Android: Как запустить asynctask из другого файла класса? Как получить единый кадр предварительного просмотра в Camera2 API Android 5.0? Приложение Android для вызова номера при нажатии кнопки Как запустить AVD Manager на Mac Переместите ImageView в другую позицию в анимированном виде на Android Android: Как получить уровень сигнала GSM для всех доступных сетевых операторов Как программно запускать программу запуска приложений по умолчанию? Как отобразить текущее значение предпочтения Android в сводке предпочтений? e.printStackTrace (); В строке Расстояние между элементами в Listview Android Emulator: невозможно запустить веб-камеру для захвата изображения в эмуляторе Почему Android предпочитает статические классы INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES при установке приложения в первый раз Как добавить ярлык на главный экран в android программно Точность акселерометра Android (инерциальная навигация)

Конвертировать представление в растровое изображение на 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) { // } } 

Solutions Collecting From Web of "Конвертировать представление в растровое изображение на Android"

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

  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 () .

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