1

画像の読み込みを背景に移動しようとしています。現在、バックグラウンドでUIImagesをロードしていますが、これを読んだことから、これは推奨される方法ではありません。代わりに、バックグラウンドでCGImageRefをロードしてから、メインスレッドでUIImageをロードする必要があります。

問題は、を作成しようとするとCGImageRef、nullとして返されることです。サンプルコード:

NSData * imageData = [NSData dataWithContentsOfFile: coverPath];
if(nil != imageData)
{
    UIImage * uiImage = [UIImage imageWithData: imageData];

    CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef) imageData);
    CGImageRef imageRef = CGImageCreateWithPNGDataProvider(provider, NULL, true, kCGRenderingIntentDefault);

    NSLog(@"Test: %p, %p", imageRef, uiImage);
    CGDataProviderRelease(provider);
}

ログアウトしTest: 0x0, 0x1c566bb0ます。imageRefはnullですが、uiImageはnullではありません。私がここで間違っていることについて何か考えはありますか?これは非常に単純なはずですか?

4

1 に答える 1

4
CGImageCreateWithPNGDataProvider()

nil提供されたデータがPNG形式(JPEGやTIFFなど)でない場合に返されます。

[UIImage imageWithData: imageData]

サポートされているすべての画像ファイル形式(PNG、JPEG、TIFFなど)の画像を返します

これは、最初の関数が失敗し、2番目の関数が成功する理由を説明しています。

于 2012-11-05T21:29:02.057 に答える