具有多个图层的NSImage图像尺寸

时间:2013-05-14 02:14:34

标签: 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;

但如果我选择一个有多个图层的图像,我会得到奇怪的数字。例如,根据 Fireworks ,我有一个单层图像,其尺寸为1,440 x 900像素。如果我添加一个小圆圈并将图像保存为 PNG 并读取它,我会得到1,458 x 911像素。根据{{​​3}}和this topic,他们建议我阅读最大的图层。好的。所以我创建了一个函数如下。

- (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;
}

使用上面的函数,我得到的尺寸错误(1,458 x 911 px)而不是1,440 x 900 px。实际上,几年前我用REAL Stupid开发Mac应用程序时遇到了同样的问题。那么当图像包含多个图层时,如何获得正确的尺寸?

感谢您的建议。

0 个答案:

没有答案