如何使用带有对象的ARCore摄像头捕获图像?

时间:2018-12-24 12:52:44

标签: android kotlin augmented-reality arcore sceneform

我正在使用ARCore创建一个应用程序以在空白表面上显示一些图像。我想捕获显示对象的那个表面的图像。我在AR相机屏幕上放置了一个捕获按钮。

是否可以使用ARCore相机中的对象捕获该视图?

2 个答案:

答案 0 :(得分:2)

您可以使用以下public method捕获当前的ARFrame:

public Image acquireCameraImage()

此方法允许您从照相机获取与当前帧相对应的图像,并返回包含照相机图像数据的Android image object。返回的图像对象格式为 AIMAGE_FORMAT_YUV_420_888

对于包含Sceneform的3D对象的视图,请使用getScreenShot()方法:

public static Bitmap getScreenShot(View view) {

    View screenView = view.getRootView();
    screenView.setDrawingCacheEnabled(true);
    Bitmap bitmap = Bitmap.createBitmap(screenView.getDrawingCache());
    screenView.setDrawingCacheEnabled(false);
    return bitmap;
}

...或使用其中一个:

fun onCameraClick(buffer: ByteBuffer, width : Int, height: Int): Bitmap {

    buffer.rewind()
    val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
    bitmap.copyPixelsFromBuffer(buffer)
    return bitmap
}

答案 1 :(得分:1)

如果您只需要ARCore视图的屏幕截图,则可以尝试在ARCore片段的视图上使用一些Android功能,例如PixelCopy.request(view, bitmap, (copyResult)->{})

来源:https://codelabs.developers.google.com/codelabs/sceneform-intro/index.html?index=..%2F..io2018#14