我正在尝试将裁剪的图像保存到相机胶卷。
(我需要以编程方式进行,我不能让用户编辑它)
这是我的(仍然很基本的)剪切和保存代码:
- (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
CIImage
我首先使用 raw创建一个UIImage
.CIImage
然后我使用第一个实例方法进行 裁剪。- 之后,我
UIImage
使用裁剪的 CIImage 创建一个新的。
此时,为了获得一些反馈,我将新裁剪的图像设置UIImage
为 a 的背景图像UIImageView
。这行得通,我可以清楚地看到图像完全按照我的意愿裁剪。
但是,当我尝试将其保存到相机胶卷时,事情就停止了。
我无法保存新创建的endImage
.
如您所见,我也添加了一行来保存原件UIImage
,只是为了比较。原来的可以正常保存。
另一个令人困惑的事情是NSError
传递给image:didFinishSavingWithError:contextInfo:
回调的对象是 nil。(回调通常为两次保存尝试执行)
编辑:刚刚做了一个实验:
NSLog(@"rawImage: %@ - rawImage.CGImage: %@", rawImage, rawImage.CGImage);
NSLog(@"endImage: %@ - endImage.CGImage: %@", endImage, endImage.CGImage);
看起来只有rawImage
(来自UIImagePickerController
)拥有支持CGImageRef
。另一个是从 a 创建的CIImage
,没有。
可以UIImageWriteToSavedPhotosAlbum
使用支持CGImageRef
吗?