如何解决以原始分辨率使用来自摄像头设备的原始图像数据
我正在使用ICDeviceBrowser的ImageCaptureCore处理摄像头设备。
列出,读取,下载等...相机图像。
我使用(ICCameraFile).requestReadData()方法访问相机/ SD卡上的媒体文件。
我读取了所选“ mediafile”的数据,并将其转换为NSImage。
这似乎适用于jpeg图像,并且以其原始分辨率显示。
图像大小为(72 dpi时为1229×922像素)。
与原始图像(例如尼康的NEF)一起使用时,NSimage的显示分辨率较低。
报告的图像大小为(28.8,38.4)。(72 dpi时应为4912×7360像素)。
当我将图像数据写入磁盘文件并通过引用在图像视图中显示时, 分辨率应为(4912.0,7360.0)。
我希望有一种方法可以直接使用图像数据而无需保存和从磁盘读取数据,从而获得性能和磁盘空间。
请参阅Swift 5.x的代码
fileprivate func displayCameraFile(_ camerafile: ICCameraFile) {
camerafile.requestReadData(atOffset: 0,length: camerafile.fileSize,completion: { [self](imgdata,imgerror) in
if imgerror != nil {
print("Done.... \(imgerror?.localizedDescription ?? "error...???")")
return
}else{
guard imgdata != nil else {
print("Error image data is nil.")
return
}
//=========Read image data from device,convert to NSimage and display========
let ext = camerafile.name!.pathExtension
let img = NSImage(data: imgdata!)
print(img?.size)
img?.setName("Test.\(ext)")
imageView1.image = img
//=======================================================
//==========Save Image to disk and Load it to display===================
let destpath = checkCreatePreviewsTempFolder()
let previewname = "tempCameraImage$for$preview"
let fullppreviewpath:String = destpath + previewname + "." + camerafile.name!.pathExtension
do{
try imgdata?.write(to: URL(fileURLWithPath: fullppreviewpath))
let diskimg = NSImage(byReferencing: URL(fileURLWithPath: fullppreviewpath))
print(diskimg.size)
imageView.image = diskimg
}catch{
print("ERROR: \(error.localizedDescription)")
imageView.image = NSImage(named: NSImage.Name("CameraBrowser"))
}
//=======================================================
}
})
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。