2012-10-22 33 views
0

当我把它放入UIImage后,图像的大小做一个NSLog时,它出现在预期的大小。当我尝试CGImageSource时,我得到的图像尺寸是我期望的两倍。这是我正在使用的代码:CFImageSource认为我的视网膜图像是它的实际大小的2倍

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

这只发生在视网膜图像;非视网膜图像似乎是正确的大小。

+3

听起来像你是混合点vs像素。这些方法明确指出它们正在返回像素。按比例分割将为您提供像素,并且应该在视网膜和非视网膜显示屏上匹配。 – bobnoble

+0

2x是什么意思?假设A.png是100x100,[email protected]是200x200。该计划报告什么? 200x200或400x400?如果它报告200x200我认为这是预期的行为。 – Yuji

+0

我在这里有点困惑。可以说这种情况: – WolfLink

回答

0

要展开什么bnoble说:

这里有两个不同的概念:尺寸图像的像素图像中的数量。这两个概念与图像的分辨率相关。

图像的大小以英寸,厘米或打印机的点数为单位给出。实际上打印机的要点有不同的定义,但IT中常用的定义是Adobe推出的定义,即:72磅= 1英寸。

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

iOS上的UIImage类用于将两者等同起来,假设(像很多人一样),即pixel-size =物理大小,换句话说,分辨率为72 dpi。

然而,这种改变与视网膜显示,该文档的UIImage size属性现在有以下说:

在iOS系统4.0和更高版本,此值反映了 图像的逻辑大小是以点数衡量。在iOS 3.x和更低版本中,此值 总是反映以像素为单位测量的图像尺寸。

因此UIImagesize属性给你的物理尺寸。另一方面,kCGImagePropertyPixelWidth属性为您提供了像素数量,对于2倍视网膜图像,该像素数量预计为大小点数的两倍。

相关问题