Android OpenGL ES 应用程序的屏幕截图

2024-02-04

我有一个在已添加的 GLSurfaceView 上运行的基本 openGL ES 20 应用程序:

    GLSurfaceView view = new GLSurfaceView(this);
    view.setRenderer(new OpenGLRenderer());
    setContentView(view);

基本上我尝试使用以下方法获取屏幕截图:

private static Bitmap getScreenshot(View v)
    {
        Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
                Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(b);
        v.draw(c);
        return b;
    }

但看起来位图是透明的。我传递的视图是:

View content = m_rootActivity.getWindow().getDecorView().getRootView();

任何人都有一个关于如何在 openGL ES 上获取屏幕截图的解决方案,而无需使用我在其他解决方案中看到的 DrawFrame 方法。

也许传递渲染器的引用?任何帮助,将不胜感激。

更新: 我正在探索从 onDrawFrame 渲染位图(GLSurfaceView 截图时显示黑屏 https://stackoverflow.com/questions/21753519/display-black-screen-while-capture-screenshot-of-glsurfaceview)

但是,我想知道是否有更好的解决方案,因为我无法访问渲染器或表面视图。我可以传递他们的参考,但想要一个解决方案,我们可以像前面提到的那样捕获整个视图。


看到这个问题 https://stackoverflow.com/questions/22574817/how-to-display-blurred-bitmap-of-screenshot-using-opengl-es-2-0-on-android.

您可以通过以下方式获取屏幕截图:

@Override
public void onDrawFrame(GL10 gl) {

    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    // draw ...

    if (takeScreenshot) {

        int screenshotSize = width * height;
        ByteBuffer bb = ByteBuffer.allocateDirect(screenshotSize * 4);
        bb.order(ByteOrder.nativeOrder());
        GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, bb);
        int pixelsBuffer[] = new int[screenshotSize];
        bb.asIntBuffer().get(pixelsBuffer);
        bb = null;

        for (int i = 0; i < screenshotSize; ++i) {
            // The alpha and green channels' positions are preserved while the      red and blue are swapped
            pixelsBuffer[i] = ((pixelsBuffer[i] & 0xff00ff00)) |    ((pixelsBuffer[i] & 0x000000ff) << 16) | ((pixelsBuffer[i] & 0x00ff0000) >> 16);
        }

        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixelsBuffer, screenshotSize-width, -width, 0, 0, width, height);
        // save bitmap...
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android OpenGL ES 应用程序的屏幕截图 的相关文章

  • 带身份验证的 MediaPlayer RTSP 视频流

    我能够在未经授权的情况下从网络摄像机流式传输视频 但现在我需要在授权的情况下执行此操作 我发现很少有信息表明 Android 不支持 RTSP 身份验证 但我发现另一条信息表明 通过使用该方法添加标头 可以在 API 级别 14 中实现身份
  • Android - 手机锁定时执行操作

    我想知道如何在手机锁定时执行某些操作 或继续侦听传感器或电池更换事件 当手机锁定时 它会停止监听传感器的变化 我尝试过使用唤醒锁 但它不起作用 也许我使用错误 任何帮助 将不胜感激 我建议为此使用服务 即使手机被锁定 它们也会在后台运行 这
  • 强制关闭导致HTTP实体可能不为空

    这里是发送数据 Http 的完整代码 asynctask private class MyAsyncTaskPupuk extends AsyncTask
  • 读取 Android 4.2 中的 APN?

    我有个问题阅读 APN在安卓v4 2中 是读 不是写APNS 它抛出一个安全异常 没有写入 APN 设置的权限 用户 10068 和当前用户都没有权限 进程有 android permission WRITE APN SETTINGS 相同
  • Android 应用程序主活动出现 ClassNotFoundException

    大多数设备都可以运行我的应用程序 但我收到此错误报告 java lang RuntimeException Unable to instantiate activity ComponentInfo com company app com c
  • 意图过滤器到底是什么?

    我读过很多关于意图过滤器的文章 但我真的无法理解它们到底是做什么的 那么 如果有人可以用一个清晰 的例子向我解释意图过滤器的作用到底是什么 thanks 我认为这是有据可查的here http developer android com g
  • Android:让用户从图库中选择图像或视频

    是否可以以这样的方式启动图库 以便同时显示图片和视频 Thanks 从图库中选择音频文件 Use MediaStore Audio Media EXTERNAL CONTENT URI Intent intent new Intent In
  • Android TabLayout:均匀分布

    我正在查看 Google IO 中使用的 Google 类 称为 SlidingTabLayout 在该类中 有一个名为 setDistributeEvenly 的方法 它允许所有这些选项卡在屏幕上均匀分布 每个选项卡具有相同的大小 中心对
  • Android/三星 Galaxy S 模拟器

    有没有办法在三星银河模拟器或类似的东西上尝试我的项目 我的项目在 HTC Legend 上运行 但在该设备上崩溃了 我如何在 android eclipse 上设置三星 Galaxy s 我设置了 W800 854 2 2 AVD 但它可以
  • 错误:类 kotlin.reflect.jvm.internal.FunctionCaller$FieldSetter

    我已尝试一切方法来消除此错误 但它不断出现 Class kotlin reflect jvm internal FunctionCaller FieldSetter can not access a member of class com
  • android device.getUuids 返回 null

    我正在尝试使用低功耗蓝牙 BLE 通过 Android 应用程序连接到 Arduino Uno 我正在 Android Studio 上进行开发 使用 Samsung Galaxy S4 和 Android 版本 5 0 1 进行测试我点击
  • 为什么 Android 上的免安装应用有两种设置?

    我使用的是运行 Android 11 的 Pixel 3 我发现有 2 种不同的设置可以控制免安装应用的某些方面 设置 应用程序和通知 默认应用程序 打开链接 即时应用程序 即使未安装 也打开应用程序中的链接 切换默认为开 Google P
  • 无法在 Android Studio 中运行项目

    当我尝试在 Android Studio 中运行我的项目时 我收到以下错误消息 Execution failed for task CricHQ dexDebug gt com android ide common internal Log
  • 拥有可重用对话框的最佳方法是什么?

    在 Android 中创建可重用对话框的最佳方法是什么 阅读通过对话框开发指南 http developer android com guide topics ui dialogs html 我知道我可以使用AlertDialog Buil
  • 如何根据受保护的 String doInBackground 方法中 AsyncTask 的结果调用 Toast.makeText() ?

    我从 AsyncTask 中的数据库中获取数据 如果它为空 我想吐司一个警告文本 我在 AsyncTask 中尝试过 但我了解到它不是在工作线程中调用的 这是我的 doInBackground 方法 protected String doI
  • 不幸的是 Project_Name 已停止

    我有一个简单的应用程序 您可以在文本视图中输入文本并按提交 它会在另一个活动中显示文本 然而 当我按下提交时 给我消息 不幸的是 发送已停止 我查看了SO上的其他线程 但是不幸的是 myfirstproject 在 java 中停止工作错误
  • 如何为部分 Android 活动创建通用代码?

    我的申请中有 14 项活动 这 9 个活动中包含自定义标题栏和选项卡窗格 所以在这里我需要在一个地方编写这个通用代码 而不是在每个包含自定义标题栏和选项卡窗格代码的活动中编写冗余代码 即布局及其活动特定代码 有哪些可能的方法可以做到这一点
  • 活动构建变体没有测试工件

    我基于 调试 构建变体创建了一个名为 bitrise 的新构建类型 使用 debug 构建变体时 经过检测的 androidTests 构建并运行良好 但是当我切换到新的 bitrise 构建变体时 出现以下错误 Process finis
  • Android:在surfaceview上实现admob

    我有一个使用 SurfaceView 的小游戏形式的活动 下面是代码片段 我很困惑如何在 SurfaceView 上实现 admob 请建议 public class DroidzActivity extends Activity priv
  • Android 中用于过渡的自定义动画对象?

    我想用一些更奇特的东西来覆盖 Android 中的默认活动转换 我想做的事情不能用通常使用的 XML 集来完成 所以我不能使用overridePendingTransition因为它只接受对基于 XML 的动画资源的整数引用 我想做的是创建

随机推荐

  • 修改跳过空列表并继续执行功能

    背景 以下代码稍作修改跳过空列表并继续执行函数 https stackoverflow com questions 57236878 skipping empty list and continuing with function impo
  • 如何使用 ASP.NET Core v2 在 Visual Studio 2017 中安装 font-awesome

    我正在使用 ASP NET Core v2 构建一个网页 并且想使用 font awesome 首先我要说的是我已经尝试了几件事 比如从 NPM 安装 Bower 从 NPM 安装 font awesome 从 VS 中的 Bower 包安
  • 如何将数据集写入Kafka主题?

    我正在使用 Spark 2 1 0 和 Kafka 0 9 0 我正在尝试将批处理 Spark 作业的输出推送到 kafka 该作业应该每小时运行一次 但不是流式运行 在网上寻找答案时 我只能找到 kafka 与 Spark 流的集成 而没
  • 如何抑制“SpriteKit 纹理图集生成器警告”?

    Xcode 报告以下警告 SpriteKit 纹理图集生成器警告由于输入纹理尺寸而将 images atlas 拆分为 2 个纹理图集 虽然我将来会修改我的图像以避免 SpriteKit 生成此警告 但我想使用一些 pragma 指令暂时抑
  • 点击事件中的全日历错误时间

    我正在使用角度和全日历 我有 令人惊讶的 时区问题 而且我似乎无法解决问题 如果在周视图中我点击 08 00 我打开一个模式并显示时间 我会看到 09 00 timezone Europe Brussels ignoreTimezone f
  • 枕头调整像素图像大小 - Django/Pillow

    我正在 Django 中开发一个图像上传器 图像上传并保存到磁盘后 我正在尝试调整保存的图像的大小 同时保持其纵横比 我正在使用 Pillow 进行图像处理 调整大小 当我尝试调整图像大小时出现问题 即使调整大小的图像的长宽比与原始图像的长
  • 使用 PHP 和 jQuery 生成并下载 .csv 文件

    我想生成一个 csv 文件 然后使用 AJAX 下载它 在现场 csv php 我有这个代码
  • 错误错误:未捕获(承诺):QuotaExceededError Ionic 3

    我正在使用 ionic 3 创建一个应用程序 我正在 ionic 存储中保存一个字符串 我工作得很好 但突然出现这个错误 Home ts 这是我设置字符串的地方 this storage set 123 JSON stringify dat
  • 如何跳过 x 轴上的标签?

    我已经尝试了很长一段时间来弄清楚如何跳过该图表 x 轴上的标签 例如 显示每第三个或第四个标签 我尝试将 autoSkip 和 stepSize 添加到刻度配置中 但没有任何变化 有没有一种简单的方法可以做到这一点 Edit visitor
  • 如何使用 JavaScript 检测我的浏览器版本和操作系统?

    我尝试使用下面的代码 但它只在 Chrome 和 Mozilla 中显示结果 在 IE6 中不起作用 div div
  • matplotlib 轴标签出现奇怪错误

    我对 Python 和一般编程都很陌生 所以如果我遗漏了一些明显的东西 请提前道歉 我正在尝试绘制图表并标记轴 但每次尝试标记 y 轴时都会引发异常 我在新脚本中编写了下面的代码 以确保问题不是来自模块中的其他地方 我正在使用Python
  • 未知目录的重写规则

    所以我试图获取 mod rewrite 规则来将请求重定向到带有 htaccess 文件的 php 脚本 问题是 我希望它能够工作 无论我将项目放在网络服务器上的哪个位置 htaccess 文件和 php 脚本始终位于同一文件夹中 重写本身
  • 读取 XMLStreamReader 时出错。获取故障响应

    我开发了一个应用程序 用户应该填写申请表并在最后付款 要付款 用户应在下面给出的链接中填写详细信息 Payment https k2 karnataka gov in wps portal Khajane II Scope Remittan
  • 在 Ubuntu 上安装 Python3 的 mod_wsgi

    谁能给我一套在 Ubuntu for Python 3 上安装 mod wsgi 的清晰说明 我确实使用 Python3 成功获得了 Flask 和 mod wsgi 并且短暂地感到高兴 直到我查看 Apache 的日志并意识到我遇到了这个
  • UnicodeDecodeError:无效的起始字节

    我有一个关于 UnicodeDecodeError invalid start byte 的快速问题 我认为我的文本中的某个地方有非 UTF 8 字符 但错误消息的位置是读取文件的起点 所以我不知道如何修复它 如果您有任何建议 请告诉我 以
  • Mysql 如何获取给定年份和月份的第一个星期一

    如何获取给定年份月份的第一个星期一 SET YearMonth 201304 Result 2013 04 01 For April 2013 11 04 For November 提前致谢 Try this SET firstday 20
  • 使用 CSVHelper 动态映射嵌套对象

    我正在使用 CSVHelper 感谢 Josh Close 来读取 CSV 文件 效果非常好 我现在尝试使用它将该文件映射到一些内部类 但是 我映射的 CSV 因客户而异 但都需要映射到我的内部类 我需要允许客户定义 CSV 如何映射到我的
  • 安装失败,并显示消息“INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME”

    因此 我在项目中对包名称进行了一些重构 现在我无法再安装我的应用程序 大约在同一时间 我更新到了 android studio 的最新版本 我相信这可能是问题所在 因为我认为我在升级之前进行了重构 我只是不记得 100 这是我的清单
  • 金字塔图案中圆的绘制方法

    我想在 HTML 画布上以金字塔图案绘制圆形球 像这样 小提琴 你可以向我展示算法 https jsfiddle net ofxmr17c 3 https jsfiddle net ofxmr17c 3 var canvas documen
  • Android OpenGL ES 应用程序的屏幕截图

    我有一个在已添加的 GLSurfaceView 上运行的基本 openGL ES 20 应用程序 GLSurfaceView view new GLSurfaceView this view setRenderer new OpenGLRe