我正在尝试将裁剪的图像保存到相机胶卷。
(我需要以编程方式进行,我不能让用户编辑它)
这是我的(仍然很基本的)剪切和保存代码:
- (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吗?