NSImage 不适用于所有图像
NSImage doesn't work with all images
我在我的应用程序中使用 NSImage class 加载图像。
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)
这是我的解决方案:使用真实的图像尺寸,而不是 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)
我在我的应用程序中使用 NSImage class 加载图像。
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)
这是我的解决方案:使用真实的图像尺寸,而不是 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)