質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

635閲覧

カメラのエフェクト機能について

taiseiswift

総合スコア20

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/02/04 13:48

現在ある教本の写真のエフェクトアプリを作っています。
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) } } コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

リファレンスマニュアルを参照する癖を付けたほうがよいです。

kCIInputImageKey
https://developer.apple.com/documentation/coreimage/kciinputimagekey?language=objc

入力イメージとして使用するCIImageオブジェクトのキー。背景画像も使用するフィルタの場合、このキーは前景画像を参照します。

フィルターは、様々な種類があり、フィルターごとに様々なパタメータをセットできるのですが、
そのためにすべてのプロパティ(インターフェース)を用意するのは仕組み的によろしくないと考えたのでしょう。

そのため、辞書のように、必要なキーに対して値を格納していくスタイルを採用しています。
(フィルターによって使用するキーが異なります)
その一つのキーがkCIInputImageKeyです。


extent
https://developer.apple.com/documentation/coreimage/ciimage/1437996-extent

画像の範囲を指定する四角形。

こちらは私もよく判っていませんので他の方の解説を期待します。
おそらくですがフィルターを通すことで画像のサイズが変わったりするのかなと思います。
その情報が取れるのかなと。

投稿2019/02/05 00:37

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taiseiswift

2019/02/06 06:34

ありがとうございます。 リファレンスマニュアルを見る事を心がけます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問