CGImageSourceRef imageSource = CGImageSourceCreateWithURL возвращает NULL
Я хочу получить размер изображения без загрузки, поэтому я использую приведенный ниже код
-(float)gettingimagedimensions:(NSString*)url{
NSURL *imageFileURL = [NSURL fileURLWithPath:url];
//CGImageSourceRef imageSource = CGImageSourceCreateWithURL(imageFileURL, NULL);
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)imageFileURL, NULL);
if (imageSource == NULL) {
// Error loading image
return 0;
}
CGFloat width = 0.0f, height = 0.0f;
CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);
if (imageProperties != NULL) {
CFNumberRef widthNum = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
if (widthNum != NULL) {
CFNumberGetValue(widthNum, kCFNumberFloatType, &width);
}
CFNumberRef heightNum = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);
if (heightNum != NULL) {
CFNumberGetValue(heightNum, kCFNumberFloatType, &height);
}
CFRelease(imageProperties);
}
NSLog(@"Image dimensions: %.0f x %.0f px", width, height);
return height;
}
Проблема в том, что imageSource всегда равен NULL. Есть ли у какого-либо тела представление о том, почему он не работает!!
Обратите внимание, что URL являются действительными ссылками на изображения JPG или PNG.
1 ответ
У вас есть ARC включен? Я не знаю, и мой рабочий код выглядит следующим образом:
NSURL * imageFileURL = [NSURL fileURLWithPath:fp];
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageFileURL, NULL);
Обратите внимание на отсутствие __bridge
, Я звоню CFRelease
на imageSource
когда сделано между прочим