Снимок экрана SurfaceView в андроиде

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

public void takeScreenShot(View surface_view){ // create bitmap screen capture Bitmap bitmap; View v1 = surface_view; v1.setDrawingCacheEnabled(true); bitmap = Bitmap.createBitmap(v1.getDrawingCache()); v1.setDrawingCacheEnabled(false); ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG, 0, bos); byte[] imageData = bos.toByteArray(); } 

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

Solutions Collecting From Web of "Снимок экрана SurfaceView в андроиде"

Поверхностный вид – это вид, но элемент на виде поверхности, такой как растровый или другой объект, не представляет собой никакого представления. Поэтому, когда вы захватываете поверхностный вид, он захватывает все на поверхности. Вы должны использовать другое представление, такое как вид изображения или другое над поверхностным видом, а затем захватить это представление.

Сначала получите представление, чья фотография хочет сделать, тогда сделайте это

  Bitmap bitmap; View rv = **your view** rv.setDrawingCacheEnabled(true); bitmap = Bitmap.createBitmap(rv.getDrawingCache()); rv.setDrawingCacheEnabled(false); // Write File to internal Storage String FILENAME = "captured.png"; FileOutputStream fos = null; try { fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); } catch (FileNotFoundException e1) { e1.printStackTrace(); Log.v("","FileNotFoundException: "+e1.getMessage()); } try { bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos); fos.flush(); fos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

Попробуйте использовать этот

 Bitmap b = Bitmap.createBitmap(width , height, Bitmap.Config.ARGB_8888); v.setDrawingCacheEnabled(false); v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height); v.draw(c); 

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

  private Bitmap copyBitmap(Bitmap src){ //Copy the whole bitmap //Bitmap newBitmap = Bitmap.createBitmap(src); //Copy the center part only int w = src.getWidth(); int h = src.getHeight(); Bitmap newBitmap = Bitmap.createBitmap(src, w/4, h/4, w/2, h/2); return newBitmap; }