0

UIImageに入れた後、画像のサイズでNSLogを実行すると、予想されるサイズになります。ただし、CGImageSource でこれを試すと、予想の 2 倍のサイズの画像が得られます。これは私がそのために使用しているコードです:

NSString *fullPath = [self fullPathForThumbnail];

    NSURL *imageFileURL = [NSURL fileURLWithPath:fullPath];
    CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)imageFileURL, NULL);

    if (imageSource == NULL) {
        // Error loading image
        return NO;
    }

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:NO], (NSString *)kCGImageSourceShouldCache,
                             nil];
    CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (__bridge CFDictionaryRef)options);

    CGSize originalSize;

    if (imageProperties) {
        NSNumber *width = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
        NSNumber *height = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);

        originalSize = CGSizeMake(width.floatValue, height.floatValue);

        CFRelease(imageProperties);
    }

これは網膜画像でのみ発生します。非網膜画像は正しいサイズのようです。

4

1 に答える 1

0

bnobleが言ったことを拡張するには:

ここには、画像のサイズと画像のピクセル数という 2 つの異なる概念があります。これら 2 つの概念は、画像の解像度によって関連付けられています。

画像のサイズは、インチ、センチメートル、印刷ポイントなどの単位で指定されます。プリンターのポイントには実際にはさまざまな定義がありますが、IT で一般的に使用されているのは、Adobe が推進している 72 ポイント = 1 インチです。

Cocoa と以前の NeXTStep では、size画像の は常に物理的なサイズであり、ピクセル数は別の尺度でした。デバイスに依存しないグラフィック システムでは、72 dpi、150 dpi、300 dpi、または 2400 dpi の 1 cm x 1 cm の画像を使用できます。これらの各画像のピクセル数は異なりますが、サイズは常に同じです。

iOSのUIImageクラスは、(多くの人がそうであるように) ピクセル サイズ = 物理サイズ、つまり解像度が 72 dpi であると仮定して、2 つを同一視していました。

ただし、これは網膜ディスプレイで変更され、UIImage sizeプロパティのドキュメントには次のように記載されています。

iOS 4.0 以降では、この値はイメージの論理サイズを反映し、ポイント単位で測定されます。iOS 3.x 以前では、この値は常にピクセル単位で測定された画像の寸法を反映しています。

したがって、 のsizeプロパティはUIImage、物理的なサイズを示しています。一方kCGImagePropertyPixelWidth、プロパティはピクセル数を示しており、2x 網膜画像の場合、サイズのポイント数の 2 倍になると予想されます。

于 2012-12-13T10:03:51.040 に答える