以原始分辨率使用来自摄像头设备的原始图像数据

问题描述

我正在使用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 (将#修改为@)