我的应用程序向选定的图像添加过滤器。该应用程序的工作原理如下:
- 从图像选择器中选择图像
- 图像作为我的 View Controller 的 ivar 加载
- 按下按钮即可将滤镜添加到图像
当我按下按钮添加滤镜时,主 ImageView 变为全白。但是,当我最初从选择器加载图像时,它显示得很好。这是添加过滤器的代码。
- (IBAction)addFilter:(id)sender {
if(_imageToFilter)
{
CIImage *newImage = _imageToFilter.CIImage;
CIFilter *myFilter = [CIFilter filterWithName:@"CIColorInvert" keysAndValues:@"inputImage",newImage, nil];
CIImage *filteredImage = [myFilter outputImage];
UIImage *outputImage = [UIImage imageWithCIImage:filteredImage];
[mainImage setImage:outputImage];
}
}
最佳答案
问题可能是由于 CIImage *inputImage 被分配了 nil
。尝试使用 CIImage 的 initWithImage:
而不是 _imageToFilter.CIImage
(更多关于下面的编辑):
-(IBAction)addFilter:(id)sender {
if(_imageToFilter) {
CIImage *inputImage = [[CIImage alloc] initWithImage:_imageToFilter];
CIFilter *myFilter = [CIFilter filterWithName:@"CIColorInvert" keysAndValues:@"inputImage",newImage, nil];
CIImage *filteredImage = [myFilter outputImage];
UIImage *outputImage = [UIImage imageWithCIImage:filteredImage];
[mainImage setImage:outputImage];
}
}
编辑:根据评论的反馈,问题似乎是 _imageToFilter.CIImage
返回 nil
。来自 docs :“如果 UIImage 对象是使用 CGImageRef 初始化的,则该属性的值为 nil。”
使用CIImage初始化方法initWithImage:用UIImage初始化一个CIImage对象,这样就解决了问题。其余代码工作正常,因此我将其返回到原始的 filterWithName:keysAndValues: 以继续关注有问题的部分。更多回复:这里的问题:Could anyone tell me why UIImage.ciimage is null
感谢您的反馈,希望答案对OP有所帮助。
关于ios - 通过 CIFilter 传递 UIImage 会生成空白图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19912458/