Ios 核心图像过滤器
我试图在从照片库加载到UI视图的图像上实现一个sepia过滤器 我有一个UI滑块…范围为-1到1。应用乌贼墨的效果 我面临的问题是,总的影响正在得到总结。比如…如果我把滑块设为1,然后把它移回0。它不会将图像恢复到原始形式。我把它移回到1。,总乌贼墨涂了2次Ios 核心图像过滤器,ios,filter,uiimageview,uislider,core-image,Ios,Filter,Uiimageview,Uislider,Core Image,我试图在从照片库加载到UI视图的图像上实现一个sepia过滤器 我有一个UI滑块…范围为-1到1。应用乌贼墨的效果 我面临的问题是,总的影响正在得到总结。比如…如果我把滑块设为1,然后把它移回0。它不会将图像恢复到原始形式。我把它移回到1。,总乌贼墨涂了2次 - (IBAction)slidermove:(id)sender { currentValue=_sliderValue.value; if (currentButton==1) { //1
- (IBAction)slidermove:(id)sender {
currentValue=_sliderValue.value;
if (currentButton==1)
{
//1
CIImage *beginImage = [CIImage imageWithData: UIImagePNGRepresentation(self.imageView.image)];
//2
CIContext *context = [CIContext contextWithOptions:nil];
//3
CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"
keysAndValues: kCIInputImageKey, beginImage,
@"inputIntensity", [NSNumber numberWithFloat:currentValue], nil];
//4
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
//5
self.imageView.image = [UIImage imageWithCGImage:cgimg];
//6
CGImageRelease(cgimg);
}
}
- (IBAction)applyeffect:(id)sender
{
currentButton=1;
}
出现此问题是因为您没有保存原始图像。每次滑块更改时都会更改图像,因此效果会更复杂。以下是您应该做的: 在您的
@界面中
:
@property(strong, nonatomic)UIImage *originalImage;
在您的@实现中
:
-(void)viewDidLoad{
[super viewDidLoad];
self.imageView.image = self.originalImage;
}
然后,在执行效果时,将其应用于
originalImage
属性,并在self.imageView中显示结果。更好的是,我建议不要每次移动滑块时都重新创建过滤器、上下文和初始图像。那将是非常昂贵的。相反,只需创建一次上下文、初始图像和过滤器,然后使用滑块调整值即可。更好的做法是,不要渲染到UIImage和UIImageView,而是将结果渲染到OpenGL ES上下文中,以便实时更新,并且只在需要时下拉完整的UIImage。68cherries,当我在beginImage中使用原始图像时,只要移动滑块,图像就会消失。CIImage*beginImage=[CIImage-imageWithData:UIImagePNGRepresentation(self.originalImage)];您应该验证是否在代码中的该点设置了self.originalImage
。