我有一个用 Swift 编写的小脚本,我用来处理一些 RAW 图像,它在 Xcode 的某个早期版本之前工作得很好(我不记得到底是哪个版本,但我知道它适用于 7.0 版,因为我将其转换为 Swift 2 并对其进行了测试)。
但是当我今天尝试运行它时,它不起作用。我在一个小片段中隔离了这个问题:
let turl = NSURL(string: "file:///some/random/path/IMG_5467.CR2")!
let tdata = NSData(contentsOfURL: turl)
print ("data size = \( tdata!.length )")
//let imageSource = CGImageSourceCreateWithURL( turl, nil );
let imageSource = CGImageSourceCreateWithData(tdata!, nil);
print( "StatusComplete = \(CGImageSourceStatus.StatusComplete.rawValue)" );
print( "StatusUnknownType = \(CGImageSourceStatus.StatusUnknownType.rawValue)" );
print( "URL: \(turl) - \(imageSource) - status \( CGImageSourceGetStatus(imageSource!).rawValue )" );
print( "count \( CGImageSourceGetCount(imageSource!) )" );
print( "status 0 \( CGImageSourceGetStatusAtIndex(imageSource!, 0).rawValue )" );
print( "type \( CGImageSourceGetType( imageSource! ) )" );
print( "Supported types: \( CGImageSourceCopyTypeIdentifiers() )" )
exit(1)
这是结果输出:
data size = 24730146
StatusComplete = 0
StatusUnknownType = -3
URL: file:///some/random/path/IMG_5467.CR2 - Optional(<CGImageSource 0x7fd51a40d2d0 [0x7fff7763ded0]>) - status -3
count 0
status 0 -3
type nil
当我尝试直接通过 URL 加载图像时(使用CGImageSourceCreateWithURL
),图像源状态为 0(StatusComplete),但索引 0 中的状态也是 -3(StatusUnknownType)。另一个区别是使用 URL 加载时类型为“com.canon.cr2-raw-image”。
数据大小正确,URL 正确,文件加载正确。我现在将尝试使用 Objective-C 加载文件,只是为了确认这不是 Swift 本身的问题。
有任何想法吗?我尝试了新的和已经测试过的 RAW 图像文件。