NSImage不适用于所有图像

时间:2016-05-21 19:27:03

标签: swift macos cocoa nsimage

我在我的应用程序中使用NSImage类加载图像。

 if let image = NSImage(contentsOfURL: openPanel.URL!) {
  ...
 }

大多数图像都能正常工作。然后我将它转换为CGImage并使用我想要的。但是对于一些图像,它只是故障,我不明白为什么。例如,如果我加载图片大小2133x2133,它似乎什么也没有,如果我打印image.size我看到非常奇怪的(511.92, 511.92)

什么可能导致这种行为?所有图像均为PNG格式。同时,我可以加载大小为(2048.0, 1536.0)的图像,一切正常。

如何开始使用NSImage开始调试加载?

这是图片的示例:

http://rgho.st/6CVKMR2ZM/image.png

当我使用这个函数创建CGImage时,我什么也看不见:

    var imageRect = CGRectMake(0, 0, newImage.size.width, newImage.size.height)
    let imageRef = newImage.CGImageForProposedRect(&imageRect, context: nil, hints: nil)

1 个答案:

答案 0 :(得分:0)

这是我的解决方案:使用真实的图像尺寸,而不是Apple使用DPI为我计算的尺寸。

    var w = 0
    var h = 0
    for r in newImage.representations {
        w = max(w, r.pixelsWide)
        h = max(h, r.pixelsHigh)
    }
    var imageRect = CGRectMake(0, 0, CGFloat(w), CGFloat(h))
    let imageRef = newImage.CGImageForProposedRect(&imageRect, context: nil, hints: nil)