为什么此代码将artistImage设置为0宽度和0高度的图像?
NSURL * artistImageURL = [NSURL URLWithString:@“http://userserve-ak.last.fm/serve/252/8581581.jpg”];
NSImage * artistImage = [[NSImage alloc] initWithContentsOfURL:artistImageURL];
答案 0 :(得分:4)
正如Ken所写,DPI在这张图片中搞砸了。如果要强制NSImage设置实际图像大小(忽略DPI),请使用http://borkware.com/quickies/one?topic=NSImage中描述的方法:
NSBitmapImageRep *rep = [[image representations] objectAtIndex: 0];
NSSize size = NSMakeSize([rep pixelsWide], [rep pixelsHigh]);
[image setSize: size];
答案 1 :(得分:1)
NSImage确实为我加载了这个,但该特定图像的元数据已损坏。根据exif数据的分辨率是7.1999997999228071e-06 dpi。
NSImage尊重文件中的DPI信息,因此如果您尝试以自然尺寸绘制图像,则会获得2520000070像素的光。
答案 2 :(得分:0)
我上次检查,NSImage's
-initWithContentsOfURL:
仅适用于文件网址。您需要先检索网址,然后使用-initWithData:
答案 3 :(得分:0)
或多或少保证.representations包含NSImageRep *(当然不总是NSBitmapImageRep)。为了安全地进行未来扩展,可以编写类似下面的代码。它还考虑了多个表示(如在.icns和.tiff文件中)。
@implementation NSImage (Extension)
- (void) makePixelSized {
NSSize max = NSZeroSize;
for (NSObject* o in self.representations) {
if ([o isKindOfClass: NSImageRep.class]) {
NSImageRep* r = (NSImageRep*)o;
if (r.pixelsWide != NSImageRepMatchesDevice && r.pixelsHigh != NSImageRepMatchesDevice) {
max.width = MAX(max.width, r.pixelsWide);
max.height = MAX(max.height, r.pixelsHigh);
}
}
}
if (max.width > 0 && max.height > 0) {
self.size = max;
}
}
@end