Swift/NSImage

Last-modified: 2017-06-16 (金) 15:52:30

AppKit>NSImage
NSImage クラス
画像データを操作する高級インターフェイス

概要
NSImage のインスタンスを使うことで、既存の画像ファイルを読み込んだり、新しい画像を作ったり、操作後の画像イメージををビューの上の書き込んだりできます。このクラスは主に画像に関係する操作を行うのに使いますが、このクラス自体はその画像のことをまったく解釈はしません。そのかわり、1つ以上の画像表現を取り仕切るオブジェクト( NSImageRef のサブクラス)と共同に作業することで、画像を管理した描画したりします。このことの多くは、透明性が保たれています。

NSImage クラスは多くの機能を果たし、これによってつぎのタスクをサポートします。
ディスクまたはURLに保存された画像を読み込む。
ビューまたはグラフィックコンテキスト(graphics context) へ画像を書き込む。
CALayer オブジェクトを提供する。
描画コマンドを基に、新規の画像を作る。
様々なフォーマットへ画像を変換する。
NSImage クラス自体は、いろいろなフォーマットの画像データを取り扱う能力があります。それらフォーマットの種類は OS のバージョンによって異なりますが、TIFF, JPEG,GIF,PNG そして PDF といった標準的なフォーマットを含んでいます。それぞれのフォーマットは、特定の画像表現オブジェクト (iamge representation object) によって管理されており、それらオブジェクトが実際の画像データを管理しています。[[ サポートしている画像形式の決定 (Determining the Supported Image Types) ]]で説明しているメソッドを使うことで、サポートされているフォーマットのリストが得られます。

より詳しくは、[[ココアでの描画ガイド (Cocoa Drawing Guide) ]]にある画像オブジェクトの使い方で説明しています。

CALayer オブジェクトを利用して画像を扱う

NSImage オブジェクトを直接 CALayer? オブジェクトの contents? プロパティへアサインできますが、これだといつも最も良い効果が得られるとは限りません。画像オブジェクトを直接取り扱う代わりに、layerContents(forContentScale:) メソッドを使うことで、レイヤーの要素として扱えるオブジェクトが得られます。このメソッドは要素として扱うのに最適なイメージを作り、対応する重ね合わせモードの全てへ対応できるようになります。これとは反対に、NSImage クラスがサポートするのは kCAGravityResize, KCAGravityResizeAspect, そして KCAGRavityResizeAspectFill モードだけです。

layerContents(forContentsScale:) メソッドを呼ぶ前には、recommendedLayerContentsScale(_:) メソッドを使い、得られる画像に最適な拡大縮小率を得ます。Listen 1? で示している例では、ウインドウサイズ適した拡大縮小率を使用しています。この率によって、コードは画像オブジェクトに最適な率を計算でき、レイヤーにはめ込めるオブジェクトを生成することができます。このコードを使うことで、レイヤーの境界へ正確に合う画像、またはレイヤーの contentsGravity? プロパティを信頼して画像を配置したり大きさを変えたりできます。

Listing 1 画像をレイヤーに割り当てる

static void updateLayerWithImageInWindow1(NSImage *image, CALayer *layer, NSWindow *window) {
   CGFloat desiredScaleFactor = [window backingScaleFactor];
   CGFloat actualScaleFactor = [image recommendedLayerContentsScale:desiredScaleFactor];
   id layerContents = [image layerContentsForContentsScale:actualScaleFactor];
   [layer setContents:layerContents];
   [layer setContentsScale:actualScaleFactor];
}

Symbols
新しい NSImage オブジェクトを作る

init?(byReferencingFile: String)
Initializes and returns an image object using the specified file.
指定するファイルから画像オブジェクトを初期化して返す。

init(byReferencing: URL)
Initializes and returns an image object using the specified URL.
指定する URL から画像オブジェクトを初期化して返す。

init(cgImage: CGImage, size: NSSize)
Initializes and returns an image object using the contents of a Core Graphics image.
Core Graphics イメージで画像オブジェクトを初期化して返す。

init?(contentsOfFile: String)
Initializes and returns an image object with the contents of the specified file.
指定するファイルの内容を用いて初期化したオブジェクトを返す

init?(contentsOf: URL)
Initializes and returns an image object with the contents of the specified URL.
指定する URL の内容を用いて初期化したオブジェクトを返す

init?(data: Data)
Initializes and returns an image object using the provided image data.
あたえられている画像データを用いて初期化した画像オブジェクトを返す。

init?(dataIgnoringOrientation: Data)
Initializes and returns an image object using the provided image data and ignoring the EXIF orientation tags.
あたえられている画像データを用いるが、EXIF にある上下左右のタグを無視をし、これで初期化した画像オブジェクトを返す。

init?(pasteboard: NSPasteboard)
Initializes and returns an image object with data from the specified pasteboard.
ペーストボードにあるデータを用いて初期化した画像オブジェクトを返す。

init(size: NSSize, flipped: Bool, drawingHandler: (NSRect) -> Bool)
Creates and returns an image object whose contents are drawn using the specified block.
あたえるブロックを用いて描画した内容のオブジェクトを初期化し、返す。

init(size: NSSize)
Initializes and returns an image object with the specified dimensions.
あたえる大きさで初期化した画像オブジェクトを返す。

init(iconRef: IconRef)
Initializes the image object with a Carbon-style icon resource.
Carbon 風のアイコンリソースで初期化したイメージオブジェクトを返す。

画像を名前で参照
画像の属性を設定
サポートしている画像のタイプを特定
Image Representation との作業
Image Representation Selection Criteria を設定
画像を描画
描画オプションの管理
対象の管理
配置メタデータ
キャッシュ設定
委譲
TIFF データの生成
CGImage データの生成
負荷の管理
ヒットテスト
アクセシビリティの管理
Core Animation
軸適合
定数
初期化
インスタンス属性

継承関係
親オブジェクト
終わり