2013-09-26 28 views
0

我在Mac OSX下面的代码加载图像:的UIImage和NSImage中报告不同的图像尺寸

NSImage *baseImage = [NSImage imageNamed:[NSString stringWithCString:file.getFilename().c_str() encoding:NSUTF8StringEncoding]]; 

和iOS下面的代码加载图像:

UIImage* baseImage = [UIImage imageNamed:[NSString stringWithCString:file.getFilename().c_str() encoding:NSUTF8StringEncoding]]; 

而下面就两个平台行的图象负荷后:

printf("Surface: \"%s\" size: %d, %d\n", file.getFilename().c_str(), (int)[baseImage size].width, (int)[baseImage size].height); 

如果所讨论的图像为72 DPI,然后在两个平台上,我得到这个作为输出:

Surface: "player.png" size: 30, 30 (Mac) 
Surface: "player.png" size: 30, 30 (iOS) 

然而,如果图像是96 DPI,然后我得到不同的结果:

Surface: "player.png" size: 30, 30 (Mac) 
Surface: "player.png" size: 40, 40 (iOS) 

尽管Mac将图像缩放为匹配72 DPI并且iOS不能缩放它,这是奇怪的行为,但我希望跨平台获得一致的结果。 (最好缩小到72 DPI。)

tl; dr:在iOS上,如何检测图像的DPI并相应地缩放它?

回答

2

NSImage实例实际上可以包含多个图像表示(它们是NSImageRep的实例),并且可能有不同的大小。您应该了解“尺寸”是指绘制单位点的大小,而不是像素的尺寸。

如果您想要像素尺寸,请使用-bestRepresentationForRect:context:hints:感兴趣的大小获取NSImageRep,然后调用-pixelsHigh和-pixelsWide。

PNG格式可能包含描述图像实际大小的字段,它会出现NSImage正在履行,也许UIImage不是。

您可以使用“sips”命令行工具(输入“man sips”获取更多信息)检查您的图像文件(png's)。它可以选择读取和处理各种图像格式的像素尺寸和DPI。