質問

画像のサイズを見つけたいとしましょう。そのため、ユーザーがiPadアプリで10,000×10,000ピクセルの画像をロードしようとすると、それらをダイアログで表示してクラッシュさせることができます。潜在的に大きな画像をすぐにメモリにロードする[UIImage imageNamed:]または[UIImage imageWithContentsOfFile:]を実行する場合。

代わりにコア画像を使用する場合は、次のようにしてください。

CIImage *ciImage = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:imgPath]];
.

そのサイズのために私の新しいCIImageに尋ねます:

CGSize imgSize = ciImage.extent.size;
.

画像全体をメモリにロードしてこれを教えてください。ファイルのメタデータを見て画像のサイズを調べるだけですか?

役に立ちましたか?

解決

imageWithContentsOfURL関数は、画像をメモリにロードします。

幸運なことに、AppleがIOS4のメモリに実際のピクセルデータを読み込まずに画像メタデータを読み込むためのCGImageSourceは、それを使用する方法について読むことができますこのブログPOST (便利には、画像の寸法を取得する方法についてのコードサンプルを提供)。

編集:リンク腐敗から保護するためにここに貼り付けられたコードサンプル:

#import <ImageIO/ImageIO.h>

NSURL *imageFileURL = [NSURL fileURLWithPath:...];
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageFileURL, NULL);
if (imageSource == NULL) {
    // Error loading image
    ...
    return;
}

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                     [NSNumber numberWithBool:NO], (NSString *)kCGImageSourceShouldCache,nil];
CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (CFDictionaryRef)options);
if (imageProperties) {
    NSNumber *width = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
    NSNumber *height = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);
    NSLog(@"Image dimensions: %@ x %@ px", width, height);
    CFRelease(imageProperties);
}
.

フルAPIリファレンスはもありますここで

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top