我想以编程方式拍摄我的Android应用程序的屏幕截图

我想以编程方式拍摄我的Android应用程序的屏幕截图,第1张

概述我想通过使用openSIPS协议以编程方式拍摄我的Android应用程序的屏幕截图,这是一个视频调用应用程序.在视频通话中,我需要拍摄屏幕截图.我已经尝试了一些东西,但除了视频聊天片段之外它还提供了屏幕截图.这是我的尝试:publicstaticBitmaptakeScreenshot(){ViewrootV

我想通过使用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,它的内容不会通过绘图缓存,因此它只会返回黑屏而不是捕获视频布局.任何帮助将不胜感激.

解决方法:

好的,我得到了完美的答案.
这里是.

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;        }

我把这个代码放在我的类Renderer的onDrawFrame(GL10 gl)方法中,看起来很有效.这里的InCallActivity是我使用GlSurfaceVIEw的类.
我从this link得到了这个答案.感谢您的支持.快乐编码:)

总结

以上是内存溢出为你收集整理的我想以编程方式拍摄我的Android应用程序的屏幕截图全部内容,希望文章能够帮你解决我想以编程方式拍摄我的Android应用程序的屏幕截图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1107235.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存