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