簡體   English   中英

捕獲ARCore ArSceneView的位圖

[英]Capture bitmap of ARCore ArSceneView

我正在嘗試添加一個屏幕快照按鈕,以捕獲ARCore相機視圖(包括附加節點)的屏幕快照。

我嘗試了幾種不同的方法,所有方法都可以捕獲屏幕上的其他內容,但是ARSceneView始終是透明的。

我嘗試過的事情:

ArFragment arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);
View view = arFragment.getARSceneView(); //Also tried arFragment.getView();

(1)

view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);

(2)

Bitmap bitmap = getBitmapFromView(view);

public Bitmap getBitmapFromView(View view) {
        view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
        view.buildDrawingCache();
        Bitmap returnedBitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(),
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(returnedBitmap);
        Drawable drawable = view.getBackground();
        if (drawable != null)
            drawable.draw(canvas);
        view.draw(canvas);
        return returnedBitmap;
    }

我也知道您可以從ARFragment獲取圖像,但是它將返回一個空白的透明圖像

Image image = arFragment.getArSceneView().getArFrame().acquireCameraImage();
//image is completely transparent and wrong size

您可以使用PixelCopy.request()

ArSceneView view = fragment.getArSceneView();
final Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
PixelCopy.request(view, bitmap, (copyResult) -> {
  if (copyResult == PixelCopy.SUCCESS) {
    // Save bitmap
  } else {
      // Error
  }
}, handler);

資源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM