我正在尝试将裁剪的图像保存到相机胶卷.
(我需要以编程方式进行,我不能让用户编辑它)
这是我的(仍然非常基本的)剪切和保存代码:
- (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);
}
Run Code Online (Sandbox Code Playgroud)
该方法在以下内容中调用:
- (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);
Run Code Online (Sandbox Code Playgroud)
看起来只有rawImage(来自UIImagePickerController)拥有支持CGImageRef.另一个是由a创建的CIImage,不是.
可以UIImageWriteToSavedPhotosAlbum使用支持CGImageRef吗?
难道UIImageWriteToSavedPhotosAlbum可以使用支持CGImageRef工作吗?
正确.CIImage不是图像,只有CIImage支持的UIImage也不是图像; 它只是一种包装.为什么你在这里使用CIImage?您没有使用CIFilter,所以这没有任何意义.或者,如果你正在使用CIFilter,您必须通过CIContext渲染得到输出为位图.
您可以通过绘制到较小的图形上下文轻松裁剪.
| 归档时间: |
|
| 查看次数: |
1194 次 |
| 最近记录: |