0

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. 皆さん、助けてくれてありがとう。

今、私はそれらをもう一度読んでみます。読むことは書くことと同じで、鏡に映されているだけだと思いました。
ファイルは最大 20 MB です - ...えっと、...それぞれ! - それも問題かもしれません...

これは、実際に表示する画像を提供するコード スニペットです (この回答についてGanapathyに感謝します)。

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

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

ただし、小さな例よりも常に複雑であり、メタデータ (および画像のサムネイル) も必要であるため、CGImageSource結局、作業に戻ってしまうのではないかと心配しています。

ヘレカ!私はそれを見つけた!ミッシングリンクは方法でした fileURLWithPath それとは別に、私はキャッシングを行っておらず、画像検索のために create options ディクショナリも使用しています。

これは実際に機能しています:

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

1 に答える 1

0

ヘレカ!私はそれを見つけた!ミッシングリンクは方法でした fileURLWithPath それとは別に、私はキャッシングを行っておらず、画像検索のために create options ディクショナリも使用しています。

これは実際に機能しています:

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]);
    }
}
于 2013-08-01T15:39:19.733 に答える