相机应用程序//我需要用什么代码来显示刚拍摄的照片?

时间:2016-01-25 15:06:43

标签: ios swift camera

这是我的相机应用程序的代码。

ViewController.swift

import UIKit
import AVFoundation

class ViewController: UIViewController, UIGestureRecognizerDelegate {

    var input:AVCaptureDeviceInput!
    var output:AVCaptureStillImageOutput!
    var session:AVCaptureSession!
    var preView:UIView!
    var camera:AVCaptureDevice!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 画面タップでシャッターを切るための設定
        let tapGesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapped:")
        // デリゲートをセット
        tapGesture.delegate = self;
        // Viewに追加.
        self.view.addGestureRecognizer(tapGesture)

    }


    // メモリ管理のため
    override func viewWillAppear(animated: Bool) {
        // スクリーン設定
        setupDisplay()
        // カメラの設定
        setupCamera()
    }

    // メモリ管理のため
    override func viewDidDisappear(animated: Bool) {
        // camera stop メモリ解放
        session.stopRunning()

        for output in session.outputs {
            session.removeOutput(output as? AVCaptureOutput)
        }

        for input in session.inputs {
            session.removeInput(input as? AVCaptureInput)
        }
        session = nil
        camera = nil
    }

    func setupDisplay(){
        //スクリーンの幅
        let screenWidth = UIScreen.mainScreen().bounds.size.width;
        //スクリーンの高さ
        let screenHeight = UIScreen.mainScreen().bounds.size.height;

        // プレビュー用のビューを生成
        preView = UIView(frame: CGRectMake(0.0, 0.0, screenWidth, screenHeight))

    }

    func setupCamera(){

        // セッション
        session = AVCaptureSession()

        for caputureDevice: AnyObject in AVCaptureDevice.devices() {
            // 背面カメラを取得
            if caputureDevice.position == AVCaptureDevicePosition.Back {
                camera = caputureDevice as? AVCaptureDevice
            }
            // 前面カメラを取得
            //if caputureDevice.position == AVCaptureDevicePosition.Front {
            //    camera = caputureDevice as? AVCaptureDevice
            //}
        }

        // カメラからの入力データ
        do {
            input = try AVCaptureDeviceInput(device: camera) as AVCaptureDeviceInput
        } catch let error as NSError {
            print(error)
        }

        // 入力をセッションに追加
        if(session.canAddInput(input)) {
            session.addInput(input)
        }

        // 静止画出力のインスタンス生成
        output = AVCaptureStillImageOutput()
        // 出力をセッションに追加
        if(session.canAddOutput(output)) {
            session.addOutput(output)
        }

        // セッションからプレビューを表示を
        let previewLayer = AVCaptureVideoPreviewLayer(session: session)

        previewLayer.frame = preView.frame

        //        previewLayer.videoGravity = AVLayerVideoGravityResize
        //        previewLayer.videoGravity = AVLayerVideoGravityResizeAspect
        previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill

        // レイヤーをViewに設定
        // これを外すとプレビューが無くなる、けれど撮影はできる
        self.view.layer.addSublayer(previewLayer)

        session.startRunning()
    }


    // タップイベント.
    func tapped(sender: UITapGestureRecognizer){
        print("タップ")
        takeStillPicture()
    }

    func takeStillPicture(){

        // ビデオ出力に接続.
        if let connection:AVCaptureConnection? = output.connectionWithMediaType(AVMediaTypeVideo){
            // ビデオ出力から画像を非同期で取得
            output.captureStillImageAsynchronouslyFromConnection(connection, completionHandler: { (imageDataBuffer, error) -> Void in

                // 取得画像のDataBufferをJpegに変換
                let imageData:NSData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataBuffer)

                // JpegからUIImageを作成.
                let image:UIImage = UIImage(data: imageData)!

                // アルバムに追加.
                UIImageWriteToSavedPhotosAlbum(image, self, nil, nil)

            })
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

这个应用程序只需拍照并自动保存,不做任何其他事情。要显示刚刚在屏幕上显示的图片,您需要编写什么代码???

1 个答案:

答案 0 :(得分:0)

这一行之后:

UIImageWriteToSavedPhotosAlbum(image, self, nil, nil);

使用imageView(从故事板中删除它或通过代码手动添加),然后使用:

设置图像
imageView.image = image;