ios - SDK DJI 快速下载图片
问题描述
我只是试图从我的 DJI 无人机下载最新的访问提要并将提要转换为 UIImage。我认为可以做到这一点的最简单方法是拍照,然后立即从存储中下载最新照片。我将从下面的存储代码中添加下载。这是最简单的方法吗?我一直收到这个错误代码 -
Settings parameters operation failed. (Code : -1007)
我已经研究过,但找不到这意味着什么 - DJI 文档仅限于几乎所有 obj-c。这里的代码 -
@IBAction func download(_ sender: UIButton) {
let camera = self.fetchCamera()
// switch camera mode to allow for media downloads
camera?.setMode(DJICameraMode.mediaDownload, withCompletion: {(error) in
if error != nil {
self.status.text="\(error!.localizedDescription)"
}
else {
// get the media manager from the drone to gain access to the files
let manager = camera!.mediaManager!
if error != nil {
self.status.text = "State: \(manager.sdCardFileListState.rawValue)"
self.status.text = "Error refreshing list: \(error)"
}
else {
print("Refreshed file list")
print("State: \(manager.sdCardFileListState.rawValue)")
guard let files = manager.sdCardFileListSnapshot() else {
self.status.text = ("No files to download")
return
}
self.status.text = "There are files to download"
var images: [UIImage] = []
for file in files {
if file.mediaType == .JPEG {
self.status.text = ("Time created: \(file.timeCreated)")
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
file.fetchData(withOffset: 0, update: DispatchQueue.main, update: {(_ data: Data?, _ isComplete: Bool, _ error: Error?) -> Void in
if error != nil {
self.status.text = "State: \(manager.sdCardFileListState.rawValue)"
self.status.text = "Error downloading photo: \(error!)"
}
else {
// unwrap downloaded data and create image
if let data = data, let downloadedImage = UIImage(data: data) {
self.status.text = "Image was downloaded!"
images.append( downloadedImage )
}
}
}) // end of filedata fetch
}
}
} // end of loop
}
}
})// end of camera setMode block
}`
任何帮助将不胜感激 - 谢谢
解决方案
为什么不覆盖“生成新文件”的回调,然后在那里下载文件
func camera(_ camera: DJICamera, didGenerateNewMediaFile newMedia: DJIMediaFile) {
newMedia.fetchData(withOffset: 0, update: DispatchQueue.main, update: {(_ data: Data?, _ isComplete: Bool, _ error: Error?) -> Void in
if error != nil {
self.status.text = "State: \(manager.sdCardFileListState.rawValue)"
self.status.text = "Error downloading photo: \(error!)"
}
else {
// unwrap downloaded data and create image
if let data = data, let downloadedImage = UIImage(data: data) {
self.status.text = "Image was downloaded!"
images.append( downloadedImage )
}
}
}) // end of filedata fetch
}
您必须实现“DJICameraDelegate”类并在您的 ViewController 中设置委托。希望这可以帮助!
推荐阅读
- java - 如何在 Spring Boot 中模拟 Optional bean?
- python - 使用烧瓶生成并上传文件到s3
- lua - 有没有办法在 lua 中制作自定义 loadstring() 函数?
- django - Django REST Serializer 多对多字段仅通过表ID显示,需要多条记录的列表
- node.js - STRQSH 与 start.sh 的区别
- python - for循环不会显示结果
- datastage - 子字符串数据阶段作业参数
- neo4j - 如何优化以下 neo4j Cypher 查询
- python - Jupyter notebook 执行基于用户输入的自动化参数
- python - 给定元组列表,如何在 Pandas DataFrame 中对元组进行子集化?