以编程方式确定包中图像文件的尺寸
问题描述:
我的iphone应用程序包(〜3000)中有大量图像文件,我想在运行时确定尺寸,而不是将此数据存储在数据库或xml清单中图像。以编程方式确定包中图像文件的尺寸
有没有办法以编程方式做到这一点?
答
UIImage具有返回图片尺寸的size属性,但我不建议在您的iPhone应用程序中加载所有3000张图片。在构建时预先生成这些信息会给你带来更好的结果。如果没有,你可能会使用某种命名约定来对图像进行编码,然后将这些信息存储在某种数据库或XML文件中,这实际上没有什么区别;)
答
file
Unix实用程序使用文件头信息来确定大小。它基本上需要在文件的第一个块中加载并筛选信息(根据文件类型而有所不同,但大概只有一个实现,因为您控制图像)。
答
从iOS 4开始,可以在不实际加载内存中的图像的情况下访问图像属性。
你需要ImageIO.framework和#进口<的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);
}