Objective c n具有多个图层的图像大小

Objective c n具有多个图层的图像大小,objective-c,macos,osx-mountain-lion,nsimage,Objective C,Macos,Osx Mountain Lion,Nsimage,我有一个Mac(不是iOS)应用程序,允许用户使用NSOpenPanel选择一个或多个图像。我遇到的问题是如何获得多层图像的正确尺寸。如果一个图像包含一个层或压缩,下面将获得正确的图像尺寸和文件路径 NSImage *image0 = [[NSImage alloc] initWithContentsOfFile:path]; CGFloat w = image0.size.width; CGFloat h = image0.size.height; 但是如果我选择一个有多个图层的图像,我会得

我有一个Mac(不是iOS)应用程序,允许用户使用NSOpenPanel选择一个或多个图像。我遇到的问题是如何获得多层图像的正确尺寸。如果一个图像包含一个层或压缩,下面将获得正确的图像尺寸和文件路径

NSImage *image0 = [[NSImage alloc] initWithContentsOfFile:path];
CGFloat w = image0.size.width;
CGFloat h = image0.size.height;
但是如果我选择一个有多个图层的图像,我会得到奇怪的数字。例如,我有一个单层图像,根据焰火,其尺寸为1440 x 900 px。如果我添加一个小圆圈层,并将图像另存为PNG,然后读取它,我会得到1458 x 911像素。根据和,他们建议我读最大的一层。可以我创建了一个函数,如下所示

- (CGSize)getimageSize :(NSString *)filepath {
    NSArray * imageReps = [NSBitmapImageRep imageRepsWithContentsOfFile:filepath];
    NSInteger width = 0;
    NSInteger height = 0;
    for (NSImageRep * imageRep in imageReps) {
        if ([imageRep pixelsWide] > width) width = [imageRep pixelsWide];
        if ([imageRep pixelsHigh] > height) height = [imageRep pixelsHigh];
    }
    NSSize size = CGSizeMake((CGFloat)width, (CGFloat)height);
    return size;
}
使用上述函数,我得到了错误的尺寸(1458 x 911 px),而不是1440 x 900 px。事实上,直到几年前,我还在用真正愚蠢的工具开发Mac应用程序时也遇到了同样的问题。那么,当图像包含多个层时,如何获得正确的尺寸


谢谢您的建议。

如果您使用苹果的预览应用程序打开PNG,图像的大小是1440 x 900还是1458 x 911?这是一个很好的观点。根据Preview的一般信息,它是1440 x 900像素。我想我现在知道为什么应用程序会给我奇数了。图像DPI似乎为71.12。原始图像由sips(外壳)生成。