8

CGImageSourceCreateThumbnailAtIndexサイズ変更された画像のバージョンを効率的に作成するために使用しようとしています。ディスクからの画像でこれを行う既存のコードがいくつかありますが、今は からの画像を使用しようとしていますALAssetsLibrary

これが私のコードです:

ALAsset *asset;
ALAssetRepresentation *representation = [asset defaultRepresentation];
CGImageRef imageRef = [representation fullResolutionImage];

CGDataProviderRef provider = CGImageGetDataProvider(imageRef);
CGImageSourceRef sourceRef = CGImageSourceCreateWithDataProvider(provider, NULL);

NSDictionary *resizeOptions = @{
  kCGImageSourceCreateThumbnailWithTransform : @YES,
  kCGImageSourceCreateThumbnailFromImageAlways : @YES,
  kCGImageSourceThumbnailMaxPixelSize : @(2100) 
};

CGImageRef resizedImage = CGImageSourceCreateThumbnailAtIndex(source, 0, resizeOptions);

問題は、それresizedImageが null であり、CGImageSourceGetCount(sourceRef)0 を返すことです。ただし、データ プロバイダーにはかなりの量のデータが含まれており、データは有効な画像データのように見えます。はALAsset、iPhone 4S のカメラ ロールから取得されます。

私は何が欠けていますか?CGImageSourceCreateWithDataProvider()が 0 画像の画像ソースを作成するのはなぜですか?

4

4 に答える 4

1

オプション #3 は担当者のfullScreenImage. 必要な「サムネイル」の種類によっては、これを使用する方が安価で簡単な場合があります。これは、(ほぼ) デバイスの画面のサイズよりも大きくありません。

于 2013-06-27T00:02:37.540 に答える
0

これも役立ちます...

ALAssetRepresentation* rep = [asset defaultRepresentation];

NSDictionary* options = [[NSDictionary alloc] initWithObjectsAndKeys:
                     (id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailWithTransform,
                     (id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailFromImageAlways, 
                     (id)[NSNumber numberWithDouble:400], (id)kCGImageSourceThumbnailMaxPixelSize, 
                     nil];

CGImageRef image = [rep CGImageWithOptions:options];
于 2015-03-29T16:27:52.617 に答える