Получите изображение предварительного просмотра из файла dae для отображения в UIImage

Я создаю приложение дополненной реальности и хочу показать изображения предварительного просмотра доступных файлов DAE.

Можно ли использовать Swift для извлечения данных изображения из файла DAE и загрузки их в UIImage?


person WellEndowedPenguin    schedule 02.06.2019    source источник
comment
Вы должны сделать снимок экрана в другом программном обеспечении, таком как Blender, чтобы поместить изображение в UIImage.   -  person Diego Isco    schedule 03.06.2019


Ответы (1)


По умолчанию нет функции для вызова, которая извлекает снимок экрана из .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!
    }
}
person Hermes    schedule 08.06.2019