UIImagePickerControllerのカメラで写真を撮影し、次に撮影するときに、前回に撮影した写真を半透明にし、UIImagePickerControllerのカメラの上に重ねてガイドにしたいと思っています。UIImagePickerControllerのカメラのプレビューが横幅いっぱいだったので、前回の写真の横幅をそれに合わせ、同じ比率で縦を計算して、以下のようにしたのですが、うまくいきません。
また、iPhoneを縦に持ち撮影し、各値をprint()で出力してみると、写真の縦と横の値が逆になっているのですが、なぜかよくわかりません。UIImagePickerControllerのカメラのプレビュー画面の上にぴったり重ねる位置の取得する方法がわからないので、重ねる位置は何回か試して決めようかと思っています。
そのやり方では、どのiPhoneやiPadでもできないので、教えて欲しいことが
UIImagePickerControllerのカメラのプレビュー画面のサイズを取得し写真をリサイズする方法
UIImagePickerControllerのカメラのプレビュー画面の上にぴったり重ねる位置の取得の方法
写真の縦と横の値がなぜ逆になるのか、その場合の対処の方法
の3つですよろしくお願いします。
swift3 xcode8.3.3
//写真のサイズを取得(photoAssetはPHAssetデータ) let photoAssetWidth = Int(photoAsset.pixelWidth) let photoAssetHeight = Int(photoAsset.pixelHeight) // Windowの表示領域すべてのサイズ(point)の取得 let myBoundSize: CGSize = UIScreen.main.bounds.size let boundsWidth = Int(myBoundSize.width) let boundsHeight = Int(myBoundSize.height) //写真をリサイズする let resizeWidth = boundsWidth let resizeHeight = photoAssetHeight * boundsWidth / photoAssetWidth //PHAssetデータからUIImageに作る let manager = PHImageManager.default() let option = PHImageRequestOptions() var photoImage = UIImage() option.isSynchronous = true manager.requestImage(for: photoAsset, targetSize: CGSize(width: resizeWidth, height: resizeHeight), contentMode: .aspectFit, options: option, resultHandler: {(result, info)->Void in photoImage = result! }) // UIImageViewのサイズを設定する let iWidth: CGFloat = CGFloat(boundsWidth) let iHeight: CGFloat = CGFloat(boundsHeight) // UIImageViewのx,yを設定する let posX: CGFloat = (self.view.bounds.width - iWidth)/2 let posY: CGFloat = (self.view.bounds.height - iHeight)/2 // UIImageViewを作成する(var myImageView: UIImageView!で定義してある) myImageView = UIImageView(frame: CGRect(x: posX, y: posY, width: iWidth, height: iHeight)) // 画像をUIImageViewに設定する myImageView.image = photoImage //UIImageViewを半透明にする myImageView.alpha = 0.3 // カメラ起動 UIImagePickerControllerのインスタンスの作成 self.cameraPicker.sourceType = self.sourceType self.cameraPicker.delegate = self self.present(self.cameraPicker, animated: true, completion: nil) // UIImageViewをcameraPickerに重ねる. self.cameraPicker.cameraOverlayView = myImageViewコード
あなたの回答
tips
プレビュー