如何从NSDocumentDirectory加载自制的TIFF图像文件

时间:2013-07-16 10:02:26

标签: objective-c tiff nsdocumentdirectory cgimagesource

尝试从iPhone的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。再次感谢帮助,伙计们。

现在我尝试再次阅读它们。我思考阅读就像写作一样,只是镜像 这些文件大概是20MB - 咳咳......每个! - 这也可能是一个问题...

这是一段代码片段(感谢Ganapathy回复this),它实际上为我提供了一个图像显示:

if ([self pathLastRawDataSave])
{
    UIImage *anImage = [UIImage imageWithContentsOfFile:[self pathLastRawDataSave]];

    if (NULL != anImage)
    {
        [[self imageView] setImage:anImage];
    }
}

然而,它总是比一个小例子更复杂,我也需要元数据(和图像的缩略图),所以我担心我回来制作{{1}毕竟,工作。

Heureka!我找到了!缺少的链接是方法 CGImageSource 除此之外,我不是缓存,也使用创建选项字典进行图像检索。

这实际上有效:

fileURLWithPath

1 个答案:

答案 0 :(得分: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]);
    }
}