Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 核心图像过滤器_Ios_Filter_Uiimageview_Uislider_Core Image - Fatal编程技术网

Ios 核心图像过滤器

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

我试图在从照片库加载到UI视图的图像上实现一个sepia过滤器

我有一个UI滑块…范围为-1到1。应用乌贼墨的效果

我面临的问题是,总的影响正在得到总结。比如…如果我把滑块设为1,然后把它移回0。它不会将图像恢复到原始形式。我把它移回到1。,总乌贼墨涂了2次

- (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