当我在将图像放入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);
}
这只发生在视网膜图像上;非视网膜图像似乎是正确的大小。
答案 0 :(得分:0)
扩大bnoble说的话:
这里有两个不同的概念:图像的尺寸和图像中像素的数量。这两个概念与图像的分辨率相关。
图像的大小以英寸,厘米或打印机的点为单位给出。实际上对打印机的定义有不同的定义,但IT中常用的是Adobe推广的定义,即72点= 1英寸。
在Cocoa和之前的NeXTStep中,图像的size
始终是物理大小,像素数是一个单独的度量。在独立于设备的图形系统中,您可以使用72 dpi,150 dpi,300 dpi或2400 dpi的1 cm x 1 cm图像。每个图像中的像素数将不同,但大小始终相同。
iOS上的UIImage
类用于将两者等同,假设(像许多人一样)像素大小=物理大小,或者换句话说分辨率是72 dpi。
然而,随着视网膜显示的变化,UIImage size
属性的文档现在有以下说法:
在iOS 4.0及更高版本中,此值反映了该值的逻辑大小 图像并以点为单位进行测量。在iOS 3.x及更早版本中,此值 始终反映以像素为单位测量的图像尺寸。
因此size
的{{1}}属性会为您提供物理尺寸。另一方面,UIImage
属性为您提供像素数,对于2x视网膜图像,该像素数应为该尺寸点数的两倍。