Я создаю приложение дополненной реальности и хочу показать изображения предварительного просмотра доступных файлов DAE.
Можно ли использовать Swift для извлечения данных изображения из файла DAE и загрузки их в UIImage?
Я создаю приложение дополненной реальности и хочу показать изображения предварительного просмотра доступных файлов DAE.
Можно ли использовать Swift для извлечения данных изображения из файла DAE и загрузки их в UIImage?
По умолчанию нет функции для вызова, которая извлекает снимок экрана из .dae
файла. Нельзя сказать, что это невозможно сделать на устройстве.
Чтобы понять, о чем вы спрашиваете, давайте рассмотрим различные компоненты.
Файл .dae
загружается с помощью ARSCNView, который является средством чтения .dae
файлов. ARSCNView традиционно добавляется как подпредставление к вашему ViewController. В этом случае вам понадобится программа просмотра для рендеринга 3D-файла за пределами экрана, поэтому вам нужно создать ARSCNView, но не добавлять его в качестве подпредставления VC (я бы добавил его во время начальной настройки, чтобы убедиться, что все загружается , но затем закомментируйте эту строку)
После того, как вы загрузили 3D-изображение в ARSCNView, используйте приведенную ниже функцию, чтобы скопировать контекст представления в изображение JPG.
let viewSnapshot = takeSnapshotOfView(view: yourARSCNView)
и разорвать контекст и изменить размер JPG:
import UIKit
import CoreGraphics
func takeSnapshotOfView(view:UIView) -> UIImage? {
UIGraphicsBeginImageContext(CGSize(width: view.frame.size.width, height: view.frame.size.height))
view.drawHierarchy(in: CGRect(x: 0.0, y: 0.0, width: view.frame.size.width, height: view.frame.size.height), afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image?.resize(CGRect(x: 0, y: 0, width: 300, height: (image?.size.height)! / 300 * (image?.size.width)!)) // resize image before returning
}
extension UIImage {
func resize(_ toSize: CGRect) -> UIImage {
let size = self.size
let widthRatio = toSize.width / self.size.width
let heightRatio = toSize.height / self.size.height
var newSize: CGSize
if widthRatio > heightRatio {
newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
} else {
newSize = CGSize(width: size.width * widthRatio, height: size.height * widthRatio)
}
let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
self.draw(in: rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
}