Storing Photos in the Photo Library(储存相片至手机)

本文深入探讨了iOS开发领域的图像处理与AR特效应用,详细介绍了OpenGL ES滤镜、OpenCV图像处理、人脸标定AR等关键技术,并通过实例展示了如何将这些技术应用于实际项目中。

1。导入库和协议(protocol)

   #import <MobileCoreServices/MobileCoreServices.h>

    <UIImagePickerControllerDelegate, UINavigationControllerDelegate>

   方法:UIImageWriteToSavePhotosAlbum


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];   

}

//保存后调用

- (void) imageWasSavedSuccessfully:(UIImage *)paramImage  didFinishSavingWithError:(NSError *)paramError  contextInfo:(void *)paramContextInfo{   

    if (paramError == nil){

        NSLog(@"Image was saved successfully.");

    } else {

        NSLog(@"An error happened while saving the image.");

        NSLog(@"Error = %@", paramError);

    }    

}

//delegate:完成选择

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

    NSLog(@"Picker returned successfully.");   

    NSLog(@"info:%@", info);   

    NSString  *mediaType = info[UIImagePickerControllerMediaType];   

    if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage]){       

        UIImage *theImage = nil;       

        if ([picker allowsEditing]){

            theImage = info[UIImagePickerControllerEditedImage];

        } else {

            theImage = info[UIImagePickerControllerOriginalImage];

        }       

        SEL selectorToCall =  @selector(imageWasSavedSuccessfully:didFinishSavingWithError:contextInfo:);  

       //保存到相册   

       UIImageWriteToSavedPhotosAlbum(theImage, self, selectorToCall,  NULL);     

    }   

    [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;       

        controller.mediaTypes = @[(__bridge NSString *)kUTTypeImage];     

        controller.allowsEditing = YES;

        controller.delegate = self;     

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

    } else {

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

    }  

}



基于部落竞争与成员合作算法(CTCM)融合动态窗口法DWA的无人机三维动态避障方法研究,MATLAB代码 动态避障路径规划:基于部落竞争与成员合作算法(CTCM)融合动态窗口法DWA的无人机三维动态避障方法研究,MATLAB 融合DWA的青蒿素优化算法(AOA)求解无人机三维动态避障路径规划,MATLAB代码 基于动态环境下多智能体自主避障路径优化的DWA算法研究,MATLAB代码 融合DWA的青蒿素优化算法AOA求解无人机三维动态避障路径规划,MATLAB代码 基于DWA的多智能体动态避障路径规划算法研究,MATLAB代码 融合动态窗口法DWA的粒子群算法PSO求解无人机三维动态避障路径规划研究,MATLAB代码 基于粒子群算法PSO融合动态窗口法DWA的无人机三维动态避障路径规划研究,MATLAB代码 基于ACOSRAR-DWA无人机三维动态避障路径规划,MATLAB代码 基于ACOSRAR-DWA无人机三维动态避障路径规划,MATLAB代码 基于DWA的动态环境下无人机自主避障路径优化,MATLAB代码 基于DWA的动态环境下机器人自主避障路径规划,MATLAB代码 基于城市场景下RRT、ACO、A*算法的无人机三维路径规划方法研究,MATLAB代码 基于城市场景下无人机三维路径规划的导航变量的多目标粒子群优化算法(NMOPSO),MATLAB代码 导航变量的多目标粒子群优化算法(NMOPSO)求解复杂城市场景下无人机三维路径规划,MATLAB代码 原创:5种最新多目标优化算法求解多无人机协同路径规划(多起点多终点,起始点、无人机数、障碍物可自定义),MATLAB代码 原创:4种最新多目标优化算法求解多无人机协同路径规划(多起点多终点,起始点、无人机数、障碍物可自定义),MATLAB代码 高维超多目标优化:基于导航变量的多目标粒子群优化算法(NMOPSO)的无人机三维
在ABAP开发中,SAP内存(SAP Memory)是一种用于在不同程序或会话之间共享数据的全局内存区域。当尝试在SAP内存中存储大量数据时,可能会遇到“分页溢出”(Paging Overflow)错误。该错误通常表示SAP内存的容量限制被超出,导致无法继续写入数据[^1]。 SAP内存的大小是有限的,默认情况下,每个SPA/GPA参数的最大数据长度为64KB。当尝试存储的数据超过该限制,或者在多个参数之间累计占用内存超出系统允许的上限时,就会触发分页溢出错误[^1]。 ### 解决方案与建议 1. **优化数据存储结构**: 避免将大量数据一次性写入SAP内存。可以考虑仅存储关键标识符(如订单号、客户编号等),并在需要时通过数据库查询获取完整数据,而不是将全部数据缓存在SAP内存中。 2. **使用ABAP内存(ABAP Memory)代替SAP内存**: 如果数据仅需在同一个内部会话(Internal Session)中的程序之间共享,可以使用`EXPORT TO MEMORY`和`IMPORT FROM MEMORY`语句操作ABAP内存。ABAP内存的容量通常比SAP内存更大,适合处理较大的数据量。 3. **检查SPA/GPA参数使用情况**: 确保没有不必要的SPA/GPA参数被设置。使用`SET PARAMETER`时应仅保留必要的数据,并在数据使用完毕后及时清除,例如使用`DELETE PARAMETER`语句。 4. **增加SAP内存大小(需谨慎)**: 在某些情况下,可以通过调整SAP系统的参数(如`ztta/roll_extension`或`rdisp/roll_max_offheap`)来增加内存分配,但这应由系统管理员在性能评估后进行,并非推荐的常规做法。 5. **使用替代机制传递数据**: 对于跨程序或跨事务的数据传递,可以考虑使用数据库表、临时表(如`GT`表)、共享内存(Shared Memory)或全局类变量(Global Class Attributes)等方法,以避免SAP内存的限制。 --- ### 示例代码:使用ABAP内存代替SAP内存 ```abap * 存储数据到ABAP内存 DATA: lv_data TYPE string VALUE 'Some large data to store'. EXPORT data = lv_data TO MEMORY ID 'MYKEY'. * 从ABAP内存读取数据 DATA: lv_result TYPE string. IMPORT data = lv_result FROM MEMORY ID 'MYKEY'. WRITE: / 'Data from memory:', lv_result. ``` --- ### 注意事项 - 在使用SAP内存时,应始终确保数据的及时清理,以避免内存泄漏和溢出问题。 - 如果问题频繁发生,建议通过事务码`ST22`查看DUMP信息,分析具体出错的程序位置和上下文,以便进一步优化代码逻辑或数据处理方式[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值