При попытке загрузить файлы из NSDocumentsDirectory
iPhone я не могу создать источник изображения с помощью строки пути, которую у меня есть.Как загрузить самодельный файл изображения TIFF из NSDocumentsDirectory
Я получаю сообщение об ошибке «<Error>: ImageIO: CGImageSourceCreateWithURL CFURLCreateDataAndPropertiesFromResource failed with error code -15.
», которое является kCFURLImproperArgumentsError
.
Однако я не могу найти, какие «правильные» аргументы могут быть. Примерный путь: «/var/mobile/Applications/36D76BDF-72EC-4180-9246-CF1F50CF396C/Documents/2013080110555532Image.tiff
»
В моем вопросе How to save a TIFF..., теперь я документирую, как я пишу файлы на NSDocumentsDirectory
. Еще раз спасибо за помощь, ребята.
Сейчас я попробуйте прочитайте их снова. I мысль чтение было похоже на письмо, только зеркальное отображение.
Файлы ~ 20 МБ - ... гм ... каждый! - что может быть проблемой, а также ...
Это фрагмент кода (благодаря Ganapathy для this ответа), что на самом деле дает мне изображение для отображения:
if ([self pathLastRawDataSave])
{
UIImage *anImage = [UIImage imageWithContentsOfFile:[self pathLastRawDataSave]];
if (NULL != anImage)
{
[[self imageView] setImage:anImage];
}
}
Однако, это всегда сложнее, чем в небольшом примере, и мне также нужны метаданные (и миниатюры изображения), поэтому я боюсь, что вернусь, чтобы сделать работу CGImageSource
.
Heureka! Я нашел это! Недопустимым звеном был методfileURLWithPath
! Кроме того, я не кэширую, а также используя словарь вариантов создания для извлечения изображений.
Это на самом деле работает:
if ([self pathLastRawDataSave])
{
NSURL* imageFileURL = [NSURL fileURLWithPath:[self pathLastRawDataSave]];
CFURLRef imageFileURLRef = (__bridge CFURLRef)imageFileURL; // bridged from NS-Object, no release!
NSDictionary* sourceOptions = @{(id)kCGImageSourceShouldCache: (id)kCFBooleanFalse,
(id)kCGImageSourceTypeIdentifierHint: (id)kUTTypeTIFF};
CFDictionaryRef sourceOptionsRef = (__bridge CFDictionaryRef)sourceOptions; // bridged from NS-Object, no release!
CGImageSourceRef imageSource = CGImageSourceCreateWithURL(imageFileURLRef, sourceOptionsRef);
if (NULL != imageSource)
{
// create the image from the file
CGImageRef imageData = CGImageSourceCreateImageAtIndex(imageSource, 0, sourceOptionsRef);
// release core foundation object
CFRelease(imageSource);
}
else
{
// Error opening image file
HLSLoggerFatal(@"Image source could not be accessed at path %@", [self pathLastRawDataSave]);
}
}