imagePickerController

时间:2012-10-11 14:30:29

标签: iphone objective-c ios cocoa xcode4.2

我一直在论坛上搜索并搜索了几天,我似乎不明白如何解决这个问题,我正在为iPhone写一个小应用程序,从相册中拍摄照片,并允许一些小的使用过滤器进行图片编辑。

我正在使用imagePickerController从相册或相机中选择图像。

我正在使用的代码旨在处理一个小的jpg图像“001.jpg”

    - (void)viewDidLoad {
[self.imageView setImage:[UIImage imageNamed:@"001.jpg"]];
}

,相对调整滑块如下所示:

(IBAction) sliderMoved:(id)sender;
{
    UIImage *image = [UIImage imageNamed:@"001.jpg"]; ...

由于在我的第一阶段一切都运行良好,过滤器适用于jpg,我继续实施imagePickerController。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissModalViewControllerAnimated:YES];
    imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
}

所以我能够从相册中选择一张照片,在UIImageView上显示,但过滤器仍在寻找001.jpg,所以我将名称更改为:

        - (void)viewDidLoad {
        imageView.image = [UIImage imageNamed:@"UIImagePickerControllerOriginalImage"];
}

- (IBAction) sliderMoved:(id)sender;
{
    UIImage *image = [UIImage imageNamed:@"UIImagePickerControllerOriginalImage"]; ...

但它不起作用,当我移动幻灯片以应用过滤器告诉我该位置无效时,它基本上会崩溃。 didLoad和sliderMove都被更改为反映选择器图像,但两者都没有工作。 我想我将不得不重写图像,可能是更小的尺寸,并给它一个名字,我的理解和知识真的停止了,需要一些帮助。

提前致谢并提供帮助。

2 个答案:

答案 0 :(得分:0)

点击此链接:How to save images in photo Album

之后,您将能够从图像库中读取该图像。另外,请注意“UIImagePickerControllerOriginalImage”是用于从信息字典中获取图像的键。不要混淆图像名称,它们是不同的东西。

如果您想更轻松地从库中读取/写入图像,我的建议是使用ALAssetsLibrary它有很大帮助。例如,要将图像写入资产:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:finalImage.CGImage orientation:(ALAssetOrientation)finalImage.imageOrientation completionBlock:^(NSURL *assetURL, NSError *error ) {
    if(error){
        //Handle here your error
    }else{
        //Success! you saved your image!
        }
    }
 }];

//release your library

修改

如果您不想使用资产,则可以随时使用文档文件夹。看看这个方法:

- (void)saveImage: (UIImage*)image
{
if (image != nil)
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                  NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* path = [documentsDirectory stringByAppendingPathComponent: 
                   [NSString stringWithString: @"your_image_name.png"] ];
    NSData* data = UIImagePNGRepresentation(image);
    [data writeToFile:path atomically:YES];
}

}

- (UIImage*)loadImage
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                  NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent: 
                  [NSString stringWithString: @"your_image_name.png"] ];
UIImage* image = [UIImage imageWithContentsOfFile:path];
return image;

}

您有很多变通方法。一个是将文档中的图像保存(使用上述方法),并始终在文档中使用该副本。但当然您必须了解磁盘使用情况,并记住用户将无法访问该图像,因为它位于内部文件夹而不是相机胶卷。

答案 1 :(得分:0)

如果你只想要原始选中的图像,还有一个UIImagePickerController类的代表,它是

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo

使用此委托给出所选图像,并且您可以在拾取图像时禁用图像编辑。