Taking Photos with the Camera(拍照)

本文详细探讨了iOS平台下摄像头功能的实现与优化,包括摄像头是否支持拍照、摄像头是否可用,以及如何通过UIImagePickerController进行图像选择与处理。文章还深入介绍了UIImagePickerController中的信息集(info)如何用于获取挑选的媒体属性,如视频URL和相片元数据等,为开发者提供了丰富的实践案例。

1。导入库,实现协议

   #import <MobileCoreServices/MobileCoreServices.h>

   <UIImagePickerControllerDelegate, UINavigationControllerDelegate>


e.g.

- (BOOL) cameraSupportsMedia:(NSString *)paramMediaType sourceType:(UIImagePickerControllerSourceType)paramSourceType{

    __block BOOL result = NO;   

    if ([paramMediaType length] == 0){

        NSLog(@"Media type is empty.");

        return NO;

    }  

    //获取本机中符合指定资源的所有媒体类型,以便后续判定是否支持

    NSArray *availableMediaTypes =  [UIImagePickerController  availableMediaTypesForSourceType:paramSourceType];   

    [availableMediaTypes  enumerateObjectsUsingBlock:

         ^(id obj, NSUInteger idx, BOOL *stop) {       

         NSString *mediaType = (NSString *)obj;

         if ([mediaType isEqualToString:paramMediaType]){

             result = YES;

             *stop= YES;

         }        

     }];    

    return result;    

}

//摄像头是否支持拍照 

- (BOOL) doesCameraSupportTakingPhotos{  

    //KUTTypeImage : 静态图片  

    return [self cameraSupportsMedia:(__bridge NSString *)kUTTypeImage  sourceType:UIImagePickerControllerSourceTypeCamera];    

}

//是否可用摄像头

- (BOOL) isCameraAvailable{    

    return[UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera];   

}

//delegate:完成选择,注意这里的视频数据或是相片数据并未被保存(到机子的相册中)

- (void)  imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {  

    NSLog(@"Picker returned successfully.");  

    NSLog(@"infoOfPickedMedia:%@", info); //info:包含了挑选的媒体信息   

    NSString  *mediaType = info[UIImagePickerControllerMediaType];   

    if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeMovie]){ //挑选的是视频 

        NSURL *urlOfVideo = info[UIImagePickerControllerMediaURL];

        NSLog(@"Video URL = %@", urlOfVideo);

    } 

    else if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage]){ //挑选的是相片       

        NSDictionary *metadata = info[UIImagePickerControllerMediaMetadata]; //metadata只针对images

        UIImage *theImage = info[UIImagePickerControllerOriginalImage];        

        NSLog(@"Image Metadata = %@", metadata);

        NSLog(@"Image = %@", theImage);       

    }   

   [picker dismissViewControllerAnimated:YES completion:nil];  

}

//delegate 取消选择

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{

    NSLog(@"Picker was cancelled");

    [picker dismissViewControllerAnimated:YES completion:nil];   

}

- (void)actionDisplayPickerController {

    if ([self isCameraAvailable] && [self doesCameraSupportTakingPhotos]){

        UIImagePickerController *controller =  [[UIImagePickerController alloc] init];      

        controller.sourceType = UIImagePickerControllerSourceTypeCamera; //从照相机获取资源,如拍照,摄像等   


        //mediaType:KUTTypeImage / KUTTypeMovie 这里决定了出现的模式窗口imagePickerController是进行摄像还是进行照相

        NSString *requiredMediaType = (__bridge NSString *)kUTTypeImage; 

        controller.mediaTypes = [[NSArray alloc] initWithObjects:requiredMediaType, nil];        

        controller.allowsEditing = YES;

        controller.delegate = self;       

       [self presentViewController:controller animated:YES completion:nil];       

    } else {

        NSLog(@"Camera is not available.");

    }   

}

postscript:

    didFinishPickingMediaWithInfo中的字典集info包含了所获取资源的各项属性(以下是可访问的key)

    对于images(KUTTypeImage):默认获取到的相片不会被保存

       UIImagePickerControllerMediaMetadata:元数据(NSDictionary)

       UIImagePickerControllerOriginalImage:获取到的未编辑的原始图

       UIImagePickerControllerCropRect:被裁剪的尺寸(若可修改的话 allowsEditing = YES)

       UIImagePickerControllerEditedImage:编辑后的图

    对于videos(KUTTypeMovie):

       UIImagePickerControllerMediaURL:获取到video的URL



多源动态最优潮流的分布鲁棒优化方法(IEEE118节点)(Matlab代码实现)内容概要:本文介绍了基于Matlab代码实现的多源动态最优潮流的分布鲁棒优化方法,适用于IEEE118节点电力系统。该方法结合两阶段鲁棒模型与确定性模型,旨在应对电力系统中多源输入(如可再生能源)的不确定性,提升系统运行的安全性与经济性。文中详细阐述了分布鲁棒优化的建模思路,包括不确定性集合的构建、目标函数的设计以及约束条件的处理,并通过Matlab编程实现算法求解,提供了完整的仿真流程与结果分析。此外,文档还列举了大量相关电力系统优化研究案例,涵盖微电网调度、电动汽车集群并网、需求响应、储能配置等多个方向,展示了其在实际工程中的广泛应用价值。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事能源系统优化工作的工程师。; 使用场景及目标:①用于研究高比例可再生能源接入背景下电力系统的动态最优潮流问题;②支撑科研工作中对分布鲁棒优化模型的复现与改进;③为电力系统调度、规划及运行决策提供理论支持与仿真工具。; 阅读建议:建议读者结合提供的Matlab代码与IEEE118节点系统参数进行实操演练,深入理解分布鲁棒优化的建模逻辑与求解过程,同时可参考文中提及的其他优化案例拓展研究思路。
### 使用标准按钮调用重载方法 在编程中,尤其是面向对象编程(OOP),方法重载允许创建多个具有相同名称但参数不同的方法。当涉及到图形用户界面(GUI)开发中的标准按钮时,可以通过点击事件触发这些重载方法。 对于C# Windows Forms应用程序而言,在处理按钮点击事件的同时实现方法重载可以如下所示: ```csharp using System; using System.Windows.Forms; public partial class MainForm : Form { public MainForm() { InitializeComponent(); Button button = new Button { Text = "Click Me", Location = new Point(50, 50)}; button.Click += OnButtonClick; Controls.Add(button); } private void OnButtonClick(object sender, EventArgs e){ OverloadedMethod(); // 调用无参版本 string paramValue = "Hello"; OverloadedMethod(paramValue); // 调用带有一个字符串参数的版本 int numberParam = 123; OverloadedMethod(numberParam); // 调用带有整数参数的版本 } private void OverloadedMethod(){ MessageBox.Show("No parameters passed"); } private void OverloadedMethod(string message){ MessageBox.Show($"String parameter received: {message}"); } private void OverloadedMethod(int num){ MessageBox.Show($"Integer parameter received: {num}"); } } ``` 上述代码展示了如何定义三个不同签名的方法`OverloadedMethod()`并根据传入的不同类型的参数来执行相应的逻辑[^1]。 在这个例子中,每当按下按钮时都会依次调用这三个重载函数,展示消息框告知当前所传递给该函数的是哪种类型的数据。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值