Table of Contents
Cocoa Application における画像情報を表す以下の3つのクラスの形式を相互変換する方法についてです。
- CGImage(Core Graphics Image)
- CIImage(Core Image)
- NSImage(NeXTSTEP Image)
CGImageからの変換
CGImage → CIImage
let ciImage = CIImage(cgImage: <変換したいCGImage>)
CGImage → NSImage
CGImage から NSImage への変換には、CGImage のサイズが必要となります。
let cgImage = <変換したいCGImage> let nsImage = NSImage(cgImage: cgImage, size: NSSize(width: cgImage.width, height: cgImage.height))
CIImageからの変換
CIImage → CGImage
クラス CIContext を介して変換します。
let ciImage = <変換したいCIImage> let cgImage = CIContext().createCGImage(ciImage, from: ciImage.extent)
CIImage → NSImage
CIImage の持つ情報を引き継ぐために、メソッド addRepresentation とクラス NSCIImageRep を利用します。
let ciImage = <変換したいCIImage> let nsImage = NSImage(size: ciImage.extent.size) nsImage.addRepresentation(NSCIImageRep(ciImage: ciImage))
NSImageからの変換
NSImage → CGImage
let nsImage = <変換したいNSImage> var nsImageRect: CGRect = CGRect(x: 0, y: 0, width: nsImage.size.width, height: nsImage.size.height) let cgImage = nsImage.cgImage(forProposedRect: &nsImageRect, context: nil, hints: nil)
NSImage → CIImage
上記の方法で一旦 CGImage に変換し、それを CIImage に変換します。
let nsImage = <変換したいNSImage> var nsImageRect: CGRect = CGRect(x: 0, y: 0, width: nsImage.size.width, height: nsImage.size.height) if let cgImage = nsImage.cgImage(forProposedRect: &nsImageRect, context: nil, hints: nil) { let ciImage = CIImage(cgImage: cgImage) }
以上、画像の情報を持つ3つクラス(NSImage、CGImage、CIImage)の相互変換についてでした。