以下のコードを使用して、NSImageの幅と高さを取得します。
NSImage *image = [[[NSImage alloc] initWithContentsOfFile:[NSString stringWithFormat:s]] autorelease];
imageWidth=[image size].width;
imageHeight=[image size].height;
NSLog(@"%f:%f",imageWidth,imageHeight);
ただし、imageWidth
、imageHeight
が正しい値を返さない場合があります。たとえば、画像を読むと、EXIF情報が表示されます。
PixelXDimension = 2272;
PixelYDimension = 1704;
ただし、imageWidth、imageHeightの出力
521:390
画像のサイズ(ピクセル単位)は、画像のNSImageRepに保存されます。ファイルに含まれる画像が1つだけの場合、次のようになります。
NSImageRep *rep = [[image representations] objectAtIndex:0];
NSSize imageSize = NSMakeSize(rep.pixelsWide, rep.pixelsHigh);
ここで、imageはNSImageであり、imageSizeはピクセル単位の画像サイズです。
NSImage sizeメソッドは、画面の解像度に依存するサイズ情報を返します。実際のファイルイメージで表されるサイズを取得するには、NSImageRepを使用する必要があります。
nsimage-size-not-real-size-with-some-pictures リンクを参照して、助けを求めてください
直接APIは正しい結果も提供します
CGImageRef cgImage = [oldImage CGImageForProposedRect:nil context:context hints:nil];
size_t width = CGImageGetWidth(cgImage);
size_t height = CGImageGetHeight(cgImage);
Appleは、DPIに基づくポイントシステムを使用して、ポイントを物理デバイスのピクセルにマッピングします。 EXIFの内容は関係ありません。また、キャンバスに画像を表示するために必要な論理画面ポイントの数が重要です。
iOSとOSXがこのマッピングを実行します。気にする必要がある唯一のサイズは、UIImage.sizeから返されるサイズです。
デバイスピクセルへのマッピングを自分で行うことはできません(読む必要はありません)。そのため、Appleが行います。
Swift 4
正しいピクセルの高さと幅を取得するには、NSBitmapImageRep
のNSImage
表現を作成する必要があります。まず、この拡張機能を使用して、CGImage
からNSImage
を収集します。
extension NSImage {
@objc var CGImage: CGImage? {
get {
guard let imageData = self.tiffRepresentation else { return nil }
guard let sourceData = CGImageSourceCreateWithData(imageData as CFData, nil) else { return nil }
return CGImageSourceCreateImageAtIndex(sourceData, 0, nil)
}
}
}
次に、高さと幅を取得する場合:
let rep = NSBitmapImageRep(cgImage: (NSImage(named: "Your Image Name")?.CGImage)!)
let imageHeight = rep.size.height
let imageWidth = rep.size.width