2013-07-16 3 views
0

При попытке загрузить файлы из 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]); 
    } 
} 

ответ

0

Эврика! Я нашел это! Недопустимым звеном был метод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]); 
    } 
}