以编程方式确定包中图像文件的尺寸

时间:2010-05-29 05:56:17

标签: iphone image

我的iPhone应用程序包(~3000)中有大量的图像文件,我想在运行时确定维度,而不是将这些数据存储在数据库或图像的xml清单中。

有没有办法以编程方式执行此操作?

3 个答案:

答案 0 :(得分:0)

UIImage具有返回图像尺寸的尺寸属性,但我不建议在iPhone应用中加载所有3000个图像。在构建时预先生成该信息将为您提供更好的结果。如果你没有对编码文件名中图像大小的图像使用某种命名约定,那么这与将信息存储在某种数据库或XML文件中的情况完全不同;)

答案 1 :(得分:0)

file Unix实用程序使用文件上的标头信息来确定大小。它基本上需要在文件的第一个块中加载并筛选信息(根据文件类型的不同而不同,但是你可能只有一个实现,因为你控制图像)。

答案 2 :(得分:0)

从iOS 4开始,可以访问图像属性而无需在内存中实际加载图像。

您需要 ImageIO.framework #import<的ImageIO / ImageIO.h>

NSURL *imageFileURL = [NSURL fileURLWithPath:imagePath];

CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageFileURL, NULL); 

if (imageSource == NULL) 
{ 
    // Error loading image ... 
} 

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:NO], (NSString *)kCGImageSourceShouldCache, nil]; 

CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (CFDictionaryRef)options); 

NSNumber *mImageWidth;

NSNumber *mImageHeight;

if (imageProperties) 
{   
    mImageWidth = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth); 

    mImageHeight = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight); 

    CFRelease(imageProperties); 
}