0

我已经在论坛中寻找和搜索了几天,我似乎不明白如何解决我目前在为 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 都被更改以反映选择器图像,但两者都不起作用。我想我将不得不重写图像,也许尺寸更小并给它一个名字,我的理解和知识真正停止并需要一些帮助。

在此先感谢,有任何帮助。

4

2 回答 2

0

检查此链接:如何将图像保存在相册中

之后,您将能够从图像库中读取该图像。另外,请考虑“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;

}

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

于 2012-10-11T14:41:25.600 回答
0

如果您只想要原始拾取的图像,那么还有一个UIImagePickerController班级代表,那就是

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

使用此委托提供拾取的图像,您还可以在拾取图像时禁用图像的编辑。

于 2012-10-11T15:12:02.383 回答