研究 iOS 摄像头缩放的内容

阎裕
2023-12-01


通过AVFoundation 捕获视频


在 iOS 6 SDK(iOS 5 SDK 以上)中捕捉摄影机的静态拍摄画面,制作类似「录像同时拍照的效果」可以透果很多方式,像是透过
UIImagePickerController 的方式,呼叫 iOS SDK 所提供的 API 来捕捉画面,或是透过
AVFoundation 的方式,建立影像的 AVCaptureSession,并且设定对应的 Input 与 Output。而本篇文章所采用的方法属于后者,我们使用 AVCaptureStillImageOutput 来当做 AVCaptureSession 的 Output 端,输出静态影像。

在开始之前请先替您的项目加上 AVFoundation.framework,并且在对应的类别中引用此头文件。



    //----------------------------
    //实例化视频捕获对象 [建立 AVCaptureSession]
    //----------------------------
    AVCaptureSession *session = [[AVCaptureSession alloc]init];  
      
    //设置画质  
    session.sessionPreset = AVCaptureSessionPresetMedium;  

    //----------------------------
    //创建视频图层  
    //----------------------------
    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:session];  
      
    captureVideoPreviewLayer.frame = CGRectMake(0, 0, 320, 568);  
      
    //设置缩放比例  
    CGFloat camScaleup = 1.8;  
    captureVideoPreviewLayer.affineTransform = CGAffineTransformMakeScale(camScaleup, camScaleup);  
      
    [self.view.layer addSublayer:captureVideoPreviewLayer];  

    //----------------------------
    //捕捉视频
    //----------------------------
    //指定媒体类型获得默认捕获设备AVCaptureDevice对象  
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];  
      
    NSError *error = nil;  
      
    //实例化捕获输入对象  
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];  
      
    if (!input) {  
        NSLog(@"%@",error);  
    }  
      
    //加入捕获会话中  
    [session addInput:input];  



    //----------------------------
    //设置输出的图像
    //----------------------------
    //实例化静态图像输出对象  
    AVCaptureStillImageOutput *stillImageOutput = [[AVCaptureStillImageOutput alloc]init];  
      
    //设置输出参数  
    NSDictionary *dict = [[NSDictionary alloc]initWithObjectsAndKeys:AVVideoCodecJPEG,AVVideoCodecKey ,nil];  
      
    stillImageOutput.outputSettings = dict;  
      
    [session addOutput:stillImageOutput];  
      
    [session startRunning];  


    //----------------------------
    //
    //----------------------------


    //----------------------------
    //
    //----------------------------



    //----------------------------
    //
    //----------------------------



    //----------------------------
    //
    //----------------------------



/*!
AVCaptureSession 预设适用于高分辨率照片质量的输出。

 
Clients may set an AVCaptureSession instance's sessionPreset to AVCaptureSessionPresetPhoto
  for full resolution photo quality output.
*/
AVF_EXPORT NSString *const AVCaptureSessionPresetPhoto NS_AVAILABLE(10_7, 4_0);



/*!
AVCaptureSession 预设适用于高质量的视频和音频输出。
 
AVCaptureSessionPresetHigh 是 sessionPreset 的默认值。
*/
AVF_EXPORT NSString *const AVCaptureSessionPresetHigh NS_AVAILABLE(10_7, 4_0);



/*!
AVCaptureSession 预设适用于中等质量的输出。
 
实现的输出适合于在无线网络共享的视频和音频比特率。
*/
AVF_EXPORT NSString *const AVCaptureSessionPresetMedium NS_AVAILABLE(10_7, 4_0);


/*!
AVCaptureSession 预设适用于低质量的输出。

为了实现的输出视频和音频比特率适合共享 3G。
*/
AVF_EXPORT NSString *const AVCaptureSessionPresetLow NS_AVAILABLE(10_7, 4_0);


//下面不是针对 ipad iphone 的。针对 MAC_OS


//-----------------------------------------------

/*!
使用此常量设置优化动画 beginTime 属性设置为 0 的时间。
常数是一个小的、 非零的、 积极的值,避免了优化
*/
AVF_EXPORT const CFTimeInterval AVCoreAnimationBeginTimeAtZero NS_AVAILABLE(10_7, 4_0);


/*!
保留长宽比 ;适合层范围内。
 */
AVF_EXPORT NSString *const AVLayerVideoGravityResizeAspect NS_AVAILABLE(10_7, 4_0);


/*!
保留长宽比 ;填充图层边界。
 */
AVF_EXPORT NSString *const AVLayerVideoGravityResizeAspectFill NS_AVAILABLE(10_7, 4_0);

/*!
拉伸以填充图层边界。
 */
AVF_EXPORT NSString *const AVLayerVideoGravityResize NS_AVAILABLE(10_7, 4_0);





转载于:https://www.cnblogs.com/allanliu/p/4277915.html

 类似资料: