gpt4 book ai didi

iphone - 访问 UIImage 属性而不将图像加载到内存中

转载 作者:行者123 更新时间:2023-12-03 18:20:41 24 4
gpt4 key购买 nike

如您所知,iPhone 指南不鼓励加载大于 1024x1024 的 uiimages。

我必须加载的图像的大小各不相同,我想检查我要加载的图像的大小;然而,使用 uiimage 的 .size 属性需要加载图像...这正是我想要避免的。

我的推理有问题吗?或者有解决办法吗?

谢谢大家

最佳答案

从 iOS 4.0 开始,iOS SDK 包括 CGImageSource... functions (在ImageIO框架中)。这是一个非常灵活的 API,可以查询元数据,而无需将图像加载到内存中。获取图像的像素尺寸应该像这样工作(确保在您的目标中包含 ImageIO.framework):

#import <ImageIO/ImageIO.h>

NSURL *imageFileURL = [NSURL fileURLWithPath:...];
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageFileURL, NULL);
if (imageSource == NULL) {
// Error loading image
...
return;
}

CGFloat width = 0.0f, height = 0.0f;
CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);

CFRelease(imageSource);

if (imageProperties != NULL) {

CFNumberRef widthNum = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
if (widthNum != NULL) {
CFNumberGetValue(widthNum, kCFNumberCGFloatType, &width);
}

CFNumberRef heightNum = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);
if (heightNum != NULL) {
CFNumberGetValue(heightNum, kCFNumberCGFloatType, &height);
}

// Check orientation and flip size if required
CFNumberRef orientationNum = CFDictionaryGetValue(imageProperties, kCGImagePropertyOrientation);
if (orientationNum != NULL) {
int orientation;
CFNumberGetValue(orientationNum, kCFNumberIntType, &orientation);
if (orientation > 4) {
CGFloat temp = width;
width = height;
height = temp;
}
}

CFRelease(imageProperties);
}

NSLog(@"Image dimensions: %.0f x %.0f px", width, height);

(改编自 Gelphman 和 Laden 的“Programming with Quartz”, list 9.5,第 228 页)

关于iphone - 访问 UIImage 属性而不将图像加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4169677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com