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

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

ただいまの
回答率

88.03%

スクショ画像を遷移先の画面に渡す

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 494

score 6

まずカメラの映像をUIViewに写し、その部分をスクリーンショットしてUIImage
にします。
そして別のViewControllerにその画像をuser defaultを利用して渡したいと考えています。
ですが、画像が渡せていないのか、スクリーンショットがうまくできていないのか
遷移先のViewControllerで画像を表示させることができません。
エラーは出ていません。

ViewController

 //画像send
        let defaults = UserDefaults.standard
        var capturedImage: UIImage!

        //画像キャプチャー
        func getScreenShot(windowFrame: CGRect) -> UIImage {

            UIGraphicsBeginImageContextWithOptions(windowFrame.size, false, 0.0)

            self.view.drawHierarchy(in: self.view.bounds, afterScreenUpdates: true)
            //let context: CGContext = UIGraphicsGetCurrentContext()!
            //self.view.layer.render(in: context)
            capturedImage = UIGraphicsGetImageFromCurrentImageContext()!
            UIGraphicsEndImageContext()

            return capturedImage
        }
 //savebutton
        @IBAction func saveButton(_ sender: Any) {
            capturedImage = getScreenShot(windowFrame: self.cameraView.bounds)
            defaults.UIImageToData(image: capturedImage, forKey: "image")
                // sendSaveImage()
        }
}
 extension UserDefaults {
        // 保存したいUIImage, 保存するUserDefaults, Keyを取得
        func UIImageToData(image: UIImage, forKey: String) {
            // UIImageをData型へ変換
            let nsdata = image.pngData()
            // UserDefaultsへ保存
            self.set(nsdata, forKey: forKey)
        }
        // 参照するUserDefaults, Keyを取得, UIImageを返す
        func getImageData(forKey: String) -> UIImage {
            // UserDefaultsからKeyを基にData型を参照
            let data = self.data(forKey: forKey)
            // UIImage型へ変換
            let returnImage = UIImage(data: data!)
            // UIImageを返す
            return returnImage!
        }
    }

ViewController2

  @IBOutlet weak var cameraView: UIImageView!
  //画像取得 
let defaults = UserDefaults.standard
override func viewDidLoad() {
                            super.viewDidLoad()
                            //

                            self.view.backgroundColor = UIColor.init(red: 230/255, green: 255/255, blue: 230/255, alpha: 90/100)
                            capturedImage = defaults.getImageData(forKey: "image")

                            let rect = cameraView.frame
                            imageView = UIImageView(frame:rect)
                            imageView.contentMode = .scaleAspectFit
                            imageView.image = capturedImage
                            imageView.center = self.cameraView.center
                            self.cameraView.addSubview(imageView)

                        }
 @IBAction func saveButton(_ sender: Any) {
                            let image = mergeImage(windowFrame: cameraView.frame)
                            UIImageWriteToSavedPhotosAlbum(image,self,#selector(self.didFinishSavingImage(_:didFinishSavingWithError:contextInfo:)),nil)
                        }
                    }
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

ViewController2 の

let rect = cameraView.frame

let rect = cameraView.bounds

の間違いだったりしませんかね?


AutoLayoutを使っているのでしたら上記の修正でも駄目だった気がするので(viewDidLoad内ではframeは確定しないため)、
imageViewをコードではなくStoryboardで生成してoutlet経由で操作したらどうでしょう?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る