如何通过自定义按钮从已打开的前置摄像头捕获图像

问题描述 投票:0回答:1

我正在开发一个在用户脸上显示3D模型的增强现实应用程序。我制作了一个扩展ArFragment的类,在该类中,一旦选择了模型,我就将前置摄像头设置为打开。我制作了用于捕获图像的自定义按钮,但我不知道如何使用显示的3d模型来实现图像本身的捕获并将其存储在手机中(最好不要在图片中显示自定义按钮)。尝试了一些在Internet上找到的用于程序化屏幕截图的代码,但是仅截取按钮(箭头和圆圈)的屏幕快照。这是活动的外观:

enter image description here这是扩展ArFragment的类:

public class CustomArFragment extends ArFragment {
@Override
protected Config getSessionConfiguration(Session session) {
    Config config = new Config(session);
    config.setAugmentedFaceMode(Config.AugmentedFaceMode.MESH3D);

    this.getArSceneView().setupSession(session);

    return config;
}

@Override
protected Set<Session.Feature> getSessionFeatures() {
    return EnumSet.of(Session.Feature.FRONT_CAMERA);
}

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    FrameLayout frameLayout = (FrameLayout) super.onCreateView(inflater, container, savedInstanceState);

    getPlaneDiscoveryController().hide();
    getPlaneDiscoveryController().setInstructionView(null);


    return frameLayout;

}
}

这是我设置3d模型的活动:

public class ArActivity extends AppCompatActivity {
int pos;
private int[] images = {R.raw.glasses1, R.raw.glasses3, R.raw.glasses4, R.raw.glasses5,
        R.raw.glasses6, R.raw.glasses7, R.raw.glasses8, R.raw.glasses9, R.raw.glasses10};

private ModelRenderable modelRenderable;
private boolean isAdded = false;

@Override
protected void onCreate(Bundle savedInstanceState) {

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        pos = extras.getInt("pos");

    }

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ar);

    CustomArFragment customArFragment = (CustomArFragment) getSupportFragmentManager().findFragmentById(R.id.arFragment);

    ModelRenderable
            .builder().setSource(this, images[pos])
            .build()
            .thenAccept(renderable -> {
                modelRenderable = renderable;
                modelRenderable.setShadowCaster(false);
                modelRenderable.setShadowReceiver(false);
            });

    customArFragment.getArSceneView().setCameraStreamRenderPriority(Renderable.RENDER_PRIORITY_FIRST);
    customArFragment.getArSceneView().getScene().addOnUpdateListener(frameTime -> {

        if (modelRenderable == null)
            return;

        Frame frame = customArFragment.getArSceneView().getArFrame();
        Collection<AugmentedFace> augmentedFaces = frame.getUpdatedTrackables(AugmentedFace.class);

        for (AugmentedFace augmentedFace : augmentedFaces) {

            if (isAdded)
                return;

            AugmentedFaceNode augmentedFaceNode = new AugmentedFaceNode(augmentedFace);
            augmentedFaceNode.setParent(customArFragment.getArSceneView().getScene());
            augmentedFaceNode.setFaceRegionsRenderable(modelRenderable);

            isAdded = true;
        }
    });
}
}
android android-camera screenshot augmented-reality capture
1个回答
0
投票

我以前有类似的问题。使用放置的3d模型捕获“摄像机”图像。

我用PixelCopy解决了。我在下面添加我的那部分代码。抱歉,这不是您问题的直接答案,但我希望您有一些想法

© www.soinside.com 2019 - 2024. All rights reserved.