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

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

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

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

4453閲覧

Swiftで撮った写真を画面遷移して表示させたい

daigakusei

総合スコア18

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

1クリップ

投稿2016/01/08 08:36

Swiftを使用して以下のことを行いたいのですが、1で撮影した画像を2で呼び出せなくて困っています。
1. Swiftでカメラを起動させ撮影(CameraViewController)
2. シーンを切り替えて撮影した画像の表示(CropViewController)
3. その画像を編集(トリミング)する(CropViewController)

私が行っている手順としては、まずCameraViewControllerで

let CameraData = NSUserDefaults.standardUserDefaults() // 設定保存

これを宣言しておいて、作成したカメラのシャッターボタンを押した時に取得した画像をJpegに変換し、それからUIImageを作成し、imageをPNGに変換し、CameraDataに保存しました。

// 取得したImageのDataBufferをJpegに変換 let myImageData : NSData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataBuffer) // JpegからUIIMageを作成 let myImage : UIImage = UIImage(data: myImageData)! // 画像保存 var imageData = UIImagePNGRepresentation(myImage) //imageをPNGに変換(NSData) self.CameraData.setObject(imageData, forKey: "Phote") // 画像を保存

そのあとに画面遷移を行いCropViewControllerで保存した画像を表示させたいのですが、

// ImageView
var myImageView: UIImageView!

/**

  • 最初に呼び出されるメソッド

*/
override func viewDidLoad() {
super.viewDidLoad()

let myInputImage: AnyObject? = CameraData.objectForKey("Phote") // 撮った画像呼び出し // UIImageViewの生成 myImageView = UIImageView(frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)) myImageView.image = myInputImage // ここがエラー self.view.addSubview(myImageView)

}

myImageViewにmyInputImageを入れることができず、真っ暗の画面が表示されてしまいます。エラー内容は
Cannot assign a value of type 'AnyObject?' to a value of type 'UIImage?'
でした。型が違うので代入できないとのことですが、どのようにすればわかりませんでした。

ちなみにカメラの起動と撮影を参考にしたサイトはこちらです。
https://sites.google.com/a/gclue.jp/swift-docs/ni-yinki100-ios/3-avfoundation/002-kamerano-qi-dongto-hua-xiangno-bao-cun

少し見ずらい文章になってしまい申し訳ないですが、どなたか教えてください。よろしくお願いしますm(_ _)m

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

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

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

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

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

guest

回答1

0

ベストアンサー

self.CameraData.setObject(imageData, forKey: "Phote")
でセットしている値はNSDataなので
myImageView.image = myInputImage
はエラーになるかと思います。

Swift

1let img = UIImage(data: CameraData.objectForKey("Phote")) 2myImageView.image = img

これでいけるんではないでしょうか?
あとNSUSerDefaultにセットした際、
.synchronize()

を呼んでやったほうがいいです。

投稿2016/01/08 08:44

masashimizuno

総合スコア42

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

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

daigakusei

2016/01/08 16:14

コメントありがとうございます。とても参考になります。 しかし、そのやり方で記述すると Missing argument parameter 'scale' in call というエラーが起きてしまい、調べたところscaleの引数がない?という意味がイマイチ理解できずそちらの対処法がわかりません。どうすればよいでしょうか^^; ちなみに self.CameraData.synchronize() // 同期処理 こちらをCropViewControllerのところに加えました。ありがとうございます。
daigakusei

2016/01/09 09:10

let myInputImage = UIImage(data: CameraData.objectForKey("Phote") as! NSData) このやり方が合っているかわかりませんが、一応画像を表示することができました。ありがとうございました(^^)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問