使用opengl v2 android截取屏幕截图

时间:2014-01-09 17:55:10

标签: java android opengl-es screenshot

我正在尝试使用opengl截取我的屏幕截图。我已经通过了很多资源,但我无法理解如何以及在何处添加此给定的支持代码以及如何在我的按钮单击功能中调用它。可以任何人帮助我... ...

if(screenshot){                     
    int screenshotSize = width * height;
    ByteBuffer bb = ByteBuffer.allocateDirect(screenshotSize * 4);
    bb.order(ByteOrder.nativeOrder());
    gl.glReadPixels(0, 0, width, height, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, bb);
    int pixelsBuffer[] = new int[screenshotSize];
    bb.asIntBuffer().get(pixelsBuffer);
    bb = null;
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
    bitmap.setPixels(pixelsBuffer, screenshotSize-width, -width, 0, 0, width, height);
    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);
    lastScreenshot = bitmap;

    screenshot = false;
}

1 个答案:

答案 0 :(得分:0)

你可以使用这样的叠加:

    public static Bitmap overlay(Bitmap bmp1,bmp2 //you can add more you if  want) {
    bmp1 = Bitmapfromopengl;
    bmp2 = Bitmap2;

    bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
    Canvas canvas = new Canvas(bmOverlay);
    canvas.drawBitmap(bmp1, new Matrix(), null);
    canvas.drawBitmap(bmp2, 0, 0, null);
    return bmOverlay;
}