Как загрузить самодельный файл изображения TIFF из NSDocumentsDirectory
При попытке загрузить файлы из NSDocumentsDirectory
iPhone, я не могу создать источник изображения со строкой пути, который у меня есть.
Я получаю сообщение об ошибке <Error>: ImageIO: CGImageSourceCreateWithURL CFURLCreateDataAndPropertiesFromResource failed with error code -15.
", который является kCFURLImproperArgumentsError
,
Однако я не могу найти, какие "правильные" аргументы могут быть. Пример пути будет: /var/mobile/Applications/36D76BDF-72EC-4180-9246-CF1F50CF396C/Documents/2013080110555532Image.tiff
"
На мой вопрос, как сохранить TIFF..., я теперь документирую, как записывать файлы в NSDocumentsDirectory
, Еще раз спасибо за помощь, ребята.
Теперь я пытаюсь прочитать их снова. Я думал, что чтение было похоже на письмо, только зеркальное отражение.
Файлы ~20MB - ... хм,... каждый! - это тоже может быть проблемой...
Это фрагмент кода (спасибо Ganapathy за этот ответ), который на самом деле дает мне изображение для отображения:
if ([self pathLastRawDataSave])
{
UIImage *anImage = [UIImage imageWithContentsOfFile:[self pathLastRawDataSave]];
if (NULL != anImage)
{
[[self imageView] setImage:anImage];
}
}
Тем не менее, это всегда сложнее, чем в небольшом примере, и мне также нужны метаданные (и эскиз изображения), поэтому я боюсь, что вернулся, чтобы сделать CGImageSource
работа, в конце концов.
Эврика! Я нашел это! Недостающим звеном был метод 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]);
}
}
1 ответ
Эврика! Я нашел это! Недостающим звеном был метод 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]);
}
}