2013-07-16 28 views
0

當試圖加載iPhone的NSDocumentsDirectory文件時,我無法使用我擁有的路徑字符串創建圖像源。如何從NSDocumentsDirectory加載自制的TIFF圖像文件

我收到錯誤消息「<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。夥計們再次感謝您的幫助。

現在我試着再讀一遍。我認爲閱讀就像寫作,只有鏡像。
這些文件是〜20MB - ...啊哈,每個! - 這可能是一個問題,以及...

這是一個代碼段(感謝Ganapathythis答案),其實讓我來顯示圖像:

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

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]); 
    } 
}