У меня есть ARSceneView с несколькими узлами. Я хотел бы захватить изображение этих узлов без фона камеры. Метод snapshot () дает изображение узлов с фоном камеры.
Я подумал о том, чтобы установить фон сцены в прозрачный цвет следующим образом:
sceneView.scene.background.contents = UIColor.clear
Чтобы сделать это, я сохраняю содержимое фона в новой переменной следующим образом:
let storedBG = sceneView.scene.background.contents
Затем я делаю снимок: sceneView.snapshot
. Наконец, установите для фона исходное значение:
sceneView.scene.background.contents = storedBG
В результате этого процесса я получаю изображение своих узлов без фона.
Вышеприведенная стратегия работает, но выглядит не очень безопасно, и, кажется, есть лучшие способы достижения того же результата. Например, я подумал о создании нового изображения, взяв разницу двух изображений.
Чтобы это работало, я бы использовал sceneView.snapshot()
, который будет содержать узлы и фон, и sceneView.session.currentFrame.capturedImage
, который будет включать только необработанный кадр камеры без узлов. Затем я бы использовал CoreImage, CoreGraphics или другую библиотеку, чтобы вычислить разницу этих двух изображений, чтобы получить узлы без фона. Мне кажется, этот подход может сработать.
Однако у меня нет опыта работы с CoreImage, CoreGraphics или какой-либо другой соответствующей библиотекой, чтобы это произошло. Может кто-нибудь помочь, пожалуйста?