1

我有一个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 像素。根据this topicthis 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 像素)而不是 1,440 x 900 像素。实际上,直到几年前,我在使用 REAL Stupid 开发 Mac 应用程序时也遇到了同样的问题。那么当图像包含多个图层时,如何获得正确的尺寸?

感谢您的意见。

4

0 回答 0