2014-02-24 5 views
3

Я хочу программно сделать снимок экрана моего приложения Android, который является приложением video calling с использованием протокола openSIPS. Во время видеовызова мне нужно снять снимки экрана. Я уже что-то пробовал, но он дает скриншот, кроме фрагмента видеокамеры.Я хочу программно сделать снимок экрана моего приложения для Android.

Вот моя попытка:

public static Bitmap takeScreenshot() { 
     View rootView = mVideoView.getRootView(); 
     rootView.setDrawingCacheEnabled(true); 
     //rootView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.EXACTLY), 
       //MeasureSpec.makeMeasureSpec(0, MeasureSpec.EXACTLY)); 
     // rootView.layout(0, 0, getMeasuredWidth(), getMeasuredHeight()); 
     rootView.buildDrawingCache(true); 
     // rootView.destroyDrawingCache(); 
     return rootView.getDrawingCache(); 
    } 

VideoView расширяет SurfaceView, которая имеет свое содержание не пройти через кэш рисования, таким образом, получить его только returnes черного экрана вместо захвата макета видео , Любая помощь будет оценена.

+1

Используйте следующий URL http://stackoverflow.com/questions/15276346/how-to-take-screenshot-programmatically-and-save-it-on-gallery – Adel

+1

Но это не работает, потому что здесь мне нужно попробовать видеообзор –

+0

есть множество вариантов: http://stackoverflow.com/questions/3582603/programmatic-screencapture-on-mobile-device – Yogendra

ответ

3

Ok сейчас, Я получил отличный ответ для меня. Вот оно.

if (InCallActivity.capture) { 
      int widthx = width; 
      int heightx = height; 
      int screenshotSize = widthx * heightx; 
      ByteBuffer bb = ByteBuffer.allocateDirect(screenshotSize * 4); 
      bb.order(ByteOrder.nativeOrder()); 
      gl.glReadPixels(0, 0, widthx, heightx, GL10.GL_RGBA, 
        GL10.GL_UNSIGNED_BYTE, bb); 
      int pixelsBuffer[] = new int[screenshotSize]; 
      bb.asIntBuffer().get(pixelsBuffer); 
      bb = null; 
      Bitmap bitmap = Bitmap.createBitmap(widthx, heightx, 
        Bitmap.Config.RGB_565); 
      bitmap.setPixels(pixelsBuffer, screenshotSize - widthx, 
        -widthx, 0, 0, widthx, heightx); 
      pixelsBuffer = null; 

      short sBuffer[] = new short[screenshotSize]; 
      ShortBuffer sb = ShortBuffer.wrap(sBuffer); 
      bitmap.copyPixelsToBuffer(sb); 

      // Making created bitmap (from OpenGL points) compatible with 
      // Android bitmap 
      for (int i = 0; i < screenshotSize; ++i) { 
       short v = sBuffer[i]; 
       sBuffer[i] = (short) (((v & 0x1f) << 11) | (v & 0x7e0) | ((v & 0xf800) >> 11)); 
      } 
      sb.rewind(); 
      bitmap.copyPixelsFromBuffer(sb); 
      InCallActivity.captureBmp = bitmap.copy(
        Bitmap.Config.ARGB_8888, false); 
      InCallActivity.capture = false; 
     } 

Я поставил этот код в onDrawFrame(GL10 gl) метод моей class Renderer, и это, кажется, работает. Здесь InCallActivity - это класс, в котором я использую GlSurfaceView. Я получил этот ответ от this link. Спасибо за поддержку. Счастливый кодирования :)

2

Вы можете попробовать что-то вроде этого

Bitmap bitmap; 
    View v1 = findViewById(R.id.rlid);// get ur root view id 
    v1.setDrawingCacheEnabled(true); 
    bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
    v1.setDrawingCacheEnabled(false); 

, а затем для сохранения

ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes); 
    File f = new File(Environment.getExternalStorageDirectory() 
        + File.separator + "test.jpg") 
    f.createNewFile(); 
    FileOutputStream fo = new FileOutputStream(f); 
    fo.write(bytes.toByteArray()); 
    fo.close(); 

Источник: how to take screenshot programmatically and save it on gallery?

или вы также можете проверить эту ссылку How to programmatically take a screenshot in Android?

+1

не работает bro! Его возврат пустой экран, как мой код. –

+0

проверить вторую ссылку, которую я разместил, у нее есть лучший ответ –

+0

Все указывают одно и то же решение, но его не помогает мне просматривать поверхностный вид. –

Смежные вопросы