0

当我在将图像放入 UIImage 后对图像的大小进行 NSLog 时,它会以预期的大小出现。但是,当我使用 CGImageSource 尝试此操作时,我得到的图像大小是预期的两倍。这是我为此使用的代码:

NSString *fullPath = [self fullPathForThumbnail];

    NSURL *imageFileURL = [NSURL fileURLWithPath:fullPath];
    CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)imageFileURL, NULL);

    if (imageSource == NULL) {
        // Error loading image
        return NO;
    }

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:NO], (NSString *)kCGImageSourceShouldCache,
                             nil];
    CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (__bridge CFDictionaryRef)options);

    CGSize originalSize;

    if (imageProperties) {
        NSNumber *width = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
        NSNumber *height = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);

        originalSize = CGSizeMake(width.floatValue, height.floatValue);

        CFRelease(imageProperties);
    }

这只发生在视网膜图像上;非视网膜图像似乎是正确的尺寸。

4

1 回答 1

0

扩展 bnoble 所说的话:

这里有两个不同的概念:图像的大小和图像中的像素数。这两个概念与图像的分辨率有关。

图像的大小以英寸、厘米或打印机点等单位给出。打印机的磅数其实有不同的定义,但IT界常用的是Adobe推出的那个,即:72磅=1英寸。

在 Cocoa 和之前的 NeXTStep 中,size图像的大小始终是物理尺寸,像素数是单独的度量。在独立于设备的图形系统中,您可以拥有 1 cm x 1 cm 的图像,即 72 dpi、150 dpi、300 dpi 或 2400 dpi。这些图像中的每一个中的像素数将不同,但大小始终相同。

iOS 上的UIImage类过去常常将两者等同起来,假设(和许多人一样)像素大小 = 物理大小,或者换句话说,分辨率是 72 dpi。

但是,这随着视网膜显示而改变,该UIImage size属性的文档现在有以下内容:

在 iOS 4.0 及更高版本中,该值反映了图像的逻辑大小,以磅为单位。在 iOS 3.x 及更早版本中,此值始终反映以像素为单位测量的图像尺寸。

所以 的size属性UIImage是给你物理尺寸。kCGImagePropertyPixelWidth另一方面,该属性为您提供像素数,对于 2x 视网膜图像,预计像素数是大小点数的两倍。

于 2012-12-13T10:03:51.040 回答