【发布时间】:2015-08-04 21:03:33
【问题描述】:
我正在尝试将裁剪后的图像保存到相机胶卷。
(我需要以编程方式进行,我不能让用户编辑它)
这是我的(仍然很基本的)剪切和保存代码:
- (void)cutAndSaveImage:(UIImage*)rawImage
{
CIImage *workingImage = [[CIImage alloc] initWithImage:rawImage];
CGRect croppingRect = CGRectMake(0.0f, 0.0f, 3264.0f, 1224.0f);
CIImage *croppedImage = [workingImage imageByCroppingToRect:croppingRect];
UIImage *endImage = [UIImage imageWithCIImage:croppedImage scale: 1.0f orientation:UIImageOrientationRight];
self.testImage.image = endImage;
UIImageWriteToSavedPhotosAlbum(rawImage, self, @selector(image:didFinishSavingWithError:contextInfo:) , nil);
UIImageWriteToSavedPhotosAlbum(endImage, self, @selector(image:didFinishSavingWithError:contextInfo:) , nil);
}
方法在内部调用:- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
- 我首先使用原始
UIImage创建一个CIImage。 - 然后我使用第一个实例方法得到一个裁剪的
CIImage。 - 之后,我使用裁剪后的 CIImage 创建了一个新的
UIImage。
此时,为了获得一些反馈,我将新裁剪的UIImage 设置为UIImageView 的背景图像。这行得通,我可以清楚地看到图像完全按照我的意愿裁剪。
但是,当我尝试将其保存到相机胶卷时,一切都停止了。
我无法保存新创建的endImage。
如您所见,我也添加了一行来保存原始的UIImage,只是为了比较。原来的正常保存。
另一个令人困惑的事情是传递给image:didFinishSavingWithError:contextInfo: 回调的NSError 对象为nil。 (回调通常会在两次保存尝试中执行)
编辑: 刚做了一个实验:
NSLog(@"rawImage: %@ - rawImage.CGImage: %@", rawImage, rawImage.CGImage);
NSLog(@"endImage: %@ - endImage.CGImage: %@", endImage, endImage.CGImage);
看起来只有rawImage(来自UIImagePickerController)拥有支持CGImageRef。另一个是从CIImage 创建的,没有。
难道UIImageWriteToSavedPhotosAlbum 使用支持CGImageRef 工作吗?
【问题讨论】:
标签: ios objective-c