現在ある教本の写真のエフェクトアプリを作っています。
effectFilter.setValue(inputImage, forKey: kCIInputImageKey)
というコードのkCIInputImageKeyとは何ですか?
また、
guard let cgImage = ciContext.createCGImage(outputImage, from: outputImage.extent)
というコードのoutputImage.extentとはどういう意味ですか?
回答よろしくお願い致します。
import UIKit class EffectViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() effectImage.image = originalImage } @IBOutlet weak var effectImage: UIImageView! // 前の画面より画像を設定 var originalImage : UIImage? @IBAction func effectButtonAction(_ sender: Any) { // エフェクト前画像をアンラップしてエフェクト用画像として取り出す if let image = originalImage { // フィルター名を指定 let filterName = "CIPhotoEffectMono" // 元々の画像の回転角度を取得 let rotate = image.imageOrientation // UIImage形式の画像をCIImage形式に変換 let inputImage = CIImage(image: image) // フィルターの種類を引数で指定された種類を指定してCIFilterのインスタンスを取得 guard let effectFilter = CIFilter(name: filterName) else { return } // エフェクトのパラメータを初期化 effectFilter.setDefaults() // インスタンスにエフェクトする元画像を設定 effectFilter.setValue(inputImage, forKey: kCIInputImageKey) // エフェクト後のCIImage形式の画像を取り出す guard let outputImage = effectFilter.outputImage else { return } // CIContextのインスタンスを取得 let ciContext = CIContext(options: nil) // エフェクト後の画像をCIContext上に描画し、結果をcgImageとしてCGImage形式の画像を取得 guard let cgImage = ciContext.createCGImage(outputImage, from: outputImage.extent) else { return } // エフェクト後の画像をCGImage形式からUIImage形式に変更。その際に回転角度を指定。そしてImageViewに表示 effectImage.image = UIImage(cgImage: cgImage, scale: 1.0, orientation: rotate) } } @IBAction func shareButtonAction(_ sender: Any) { // 表示画像をアンラップしてシェア画像として取り出す if let shareImage = effectImage.image { // UIActivityViewControllerに渡す配列を作成 let shareItems = [shareImage] // UIActivityControllerにしシェア画像を渡す let controller = UIActivityViewController(activityItems: shareItems, applicationActivities: nil) // iPadで落ちてしまう対策 controller.popoverPresentationController?.sourceView = view // UIActivityViewControllerを表示 present(controller,animated: true,completion: nil) } } @IBAction func closeButtonAction(_ sender: Any) { // 画面を閉じて前の画面に戻る dismiss(animated: true, completion: nil) } } コード
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/06 06:34