相关疑难解决方法(0)

使用Jacobi Google Tango API中的onFrameAvailable()

问: 有没有人知道如何使用Tango Java(Jacobi)API onFrameAvailable()回调获取Tango的彩色相机图像缓冲区?

背景:

我有一个增强现实应用程序,在Tango的背景中显示视频.我在此示例后使用Java API(Jacobi)成功创建了视频叠加示例.我的应用程序工作正常,视频在后台正确呈现.

作为应用程序的一部分,我想在用户按下按钮时存储视频后备缓冲区的副本.因此,我需要访问相机的RGB数据.

根据Jacobi发行说明,任何希望访问相机RGB数据的类都应该实现新的onFrameAvailable()方法OnTangoUpdateListener.我做了这个,但我没有看到任何实际获取像素的句柄或参数:

Java API

@Override
public void onFrameAvailable(int cameraId) {
    //Log.w(TAG, "Frame available!");
    if (cameraId == TangoCameraIntrinsics.TANGO_CAMERA_COLOR) {
        tangoCameraPreview.onFrameAvailable();
    }
}
Run Code Online (Sandbox Code Playgroud)

如图所示,onFrameAvailable只有一个参数,整数表示生成视图的摄像机的id.将其与C库回调进行对比,后者提供对图像缓冲区的访问:

C API

TangoErrorType TangoService_connectOnFrameAvailable(
    TangoCameraId id, void* context,
    void (*onFrameAvailable)(void* context, TangoCameraId id,
                             const TangoImageBuffer* buffer));
Run Code Online (Sandbox Code Playgroud)

我期待Java方法在C API调用中有类似于缓冲区对象的东西.

我试过的

我尝试扩展TangoCameraPreview课程并将图像保存在那里,但我只获得黑色背景.

public class CameraSurfaceView extends TangoCameraPreview {


    private boolean takeSnapShot = false;

    public void takeSnapShot() {
        takeSnapShot …
Run Code Online (Sandbox Code Playgroud)

google-project-tango

9
推荐指数
1
解决办法
2060
查看次数

Android在root设备上截屏

更新有很多其他帖子询问如何在Android中获取屏幕截图但似乎没有一个完整的答案如何这样做.最初我把这个问题发布为一个问题,因为我在试图打开一个流到帧缓冲区时遇到了一个特定的问题.现在我已经交换了将Frame Buffer转储到一个文件中,所以我更新了我的帖子以显示我是如何到达那里的.为了参考(和确认),我找到了从这篇文章发送FrameBuffer到一个文件的命令(不幸的是他没有提供他如何达到这一点).我只是想知道如何将从Frame Buffer中提取的原始数据转换为实际的图像文件.

我的目的是在Android设备上完全转储实际屏幕.我没有使用adb桥就能找到这样做的唯一方法就是直接访问系统的Frame Buffer.显然,这种方法需要设备上的root权限以及运行它的应用程序!幸运的是,出于我的目的,我可以控制设备的设置方式,并使设备具有root权限,并且提供给我的应用程序是可行的.我的测试目前正在运行2.2.3的旧Droid上进行.

我从/sf/answers/487923691/找到了我的第一个如何处理它的提示.经过一番研究后,我发现另一篇文章描述了如何以root身份正确运行shell命令.他们用它来执行重启,我用它将当前帧缓冲区发送到实际文件.我目前的测试只是通过ADB和基本Activity(每个都提供root)来实现.我将从后台运行的服务进行进一步测试,更新来!这是我的整个测试活动,可以将当前屏幕导出到文件:

public class ScreenshotterActivity extends Activity {
    public static final String TAG = "ScreenShotter";

    private Button _SSButton;
    private PullScreenAsyncTask _Puller;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        _SSButton = (Button)findViewById(R.id.main_screenshotButton);
        _SSButton.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                if (_Puller != null)
                    return;
                //TODO: Verify that external storage is available! Could always use internal instead...

                _Puller = new PullScreenAsyncTask();
                _Puller.execute((Void[])null);
            }
        });
    } …
Run Code Online (Sandbox Code Playgroud)

android screenshot root

8
推荐指数
3
解决办法
8903
查看次数

Android读取fb0总是给我黑屏

我的设备是运行Jelly Bean 4.2的Nexus 4.我正在尝试录制屏幕并将其发送出去.互联网上的大多数代码通过读取/ dev/graphics/fb0来执行上限.它在某些设备和旧系统中运行良好.但是当我在我的设备上试用它时,它会失败.它只给我黑屏和原始数据中的所有"0".我运行"adb root"获取root权限,尝试"chmod 777 fb0","cat fb0>/sdcard/fb0".我也试过像"mmap"和"memcpy"这样的代码来获取数据.但都失败了.我在互联网上搜索,似乎没有解决方案.有些线程说内核可能会禁止你读取fb0.有人对此有所了解吗?

android screenshot gpu framebuffer android-ndk

5
推荐指数
1
解决办法
4990
查看次数