如何从GPUImageView获取UIImage

时间:2013-04-11 13:52:45

标签: iphone uiimage gpuimage

我在我的项目中使用GPUImageView库,它正在使用GPUImageView,我在GPUImageView上添加了像对比度和其他图像效果(如棕褐色等)的过滤器,一切都很好,但问题是现在我想将GPUImageVIew转换为UIImage所以我可以从UIImage中提取图像并在Facebook上发布该图像,但我无法做到这一点,在Facebook上发布的图像是简单的相机捕获图像,没有使用GPUIMageView添加的特殊效果。如何实现这一目标。请帮帮我。谢谢你提前...下面是我的代码

    -(void) loadFilters
{
    for(int i = 0; i < 10; i++)
    {
        UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg", i + 1]] forState:UIControlStateNormal];
        button.frame = CGRectMake(10+i*(60+10), 5.0f, 60.0f, 60.0f);
        button.layer.cornerRadius = 7.0f;

        //use bezier path instead of maskToBounds on button.layer
        UIBezierPath *bi = [UIBezierPath bezierPathWithRoundedRect:button.bounds
                                                 byRoundingCorners:UIRectCornerAllCorners
                                                       cornerRadii:CGSizeMake(7.0,7.0)];

        CAShapeLayer *maskLayer = [CAShapeLayer layer];
        maskLayer.frame = button.bounds;
        maskLayer.path = bi.CGPath;
        button.layer.mask = maskLayer;

        button.layer.borderWidth = 1;
        button.layer.borderColor = [[UIColor blackColor] CGColor];

        [button addTarget:self
                   action:@selector(filterClicked:)
         forControlEvents:UIControlEventTouchUpInside];
        button.tag = i;
       // [button setTitle:@"*" forState:UIControlStateSelected];
        if(i == 0){
            [button setSelected:YES];
        }
        [self.filterScrollView addSubview:button];
    }
    [self.filterScrollView setContentSize:CGSizeMake(10 + 10*(60+10), 75.0)];
}
-(void) filterClicked:(UIButton *) sender
{
    for(UIView *view in self.filterScrollView.subviews)
    {
        if([view isKindOfClass:[UIButton class]])
        {
            [(UIButton *)view setSelected:NO];
        }
    }

    [sender setSelected:YES];
    [self removeAllTargets];

    selectedFilter = sender.tag;
    [self setFilter:sender.tag];
    [self prepareFilter];
}

-(void) setFilter:(int) index
{
    UIImage *inputImage = [UIImage imageNamed:@"Default-568h@2x.png"];
    img_New = [[UIImage alloc] init];
    switch (index) {
        case 1:
        {
            filter = [[GPUImageContrastFilter alloc] init];
            [(GPUImageContrastFilter *) filter setContrast:1.75];
           // img_New = [filter imageByFilteringImage:inputImage];
            if(Border==NO)
            {
                [imgBorder setImage:[UIImage imageNamed:@"borderNew1.png"]];
            }
        } break;
        case 2:
        {
            filter = [[GPUImageToneCurveFilter alloc] initWithACV:@"crossprocess"];
            //img_New = [filter imageByFilteringImage:inputImage];
            if(Border==NO)
            {
                [imgBorder setImage:[UIImage imageNamed:@"borderNew2.png"]];
            }
        } break;
        case 3:
        {
            filter = [[GPUImageToneCurveFilter alloc] initWithACV:@"02"];
            //img_New = [filter imageByFilteringImage:inputImage];
            if(Border==NO)
            {
                [imgBorder setImage:[UIImage imageNamed:@"borderNew3.png"]];
            }
        } break;
        case 4:
        {
            filter = [[GrayscaleContrastFilter alloc] init];
            //img_New = [filter imageByFilteringImage:inputImage];
            if(Border==NO)
            {
                [imgBorder setImage:[UIImage imageNamed:@"borderNew4.png"]];
            }
        } break;
        case 5:
        {
            filter = [[GPUImageToneCurveFilter alloc] initWithACV:@"17"];
            //img_New = [filter imageByFilteringImage:inputImage];
            if(Border==NO)
            {
                [imgBorder setImage:[UIImage imageNamed:@"borderNew5.png"]];
            }
        } break;
        case 6: {
            filter = [[GPUImageToneCurveFilter alloc] initWithACV:@"aqua"];
            //img_New = [filter imageByFilteringImage:inputImage];
            if(Border==NO)
            {
                [imgBorder setImage:[UIImage imageNamed:@"borderNew6.png"]];
            }
        } break;
        case 7: {
            filter = [[GPUImageToneCurveFilter alloc] initWithACV:@"yellow-red"];
            //img_New = [filter imageByFilteringImage:inputImage];
            if(Border==NO)
            {
                [imgBorder setImage:[UIImage imageNamed:@"borderNew7.png"]];
            }
        } break;
        case 8: {
            filter = [[GPUImageToneCurveFilter alloc] initWithACV:@"06"];
           // img_New = [filter imageByFilteringImage:inputImage];
            if(Border==NO)
            {
                [imgBorder setImage:[UIImage imageNamed:@"borderNew8.png"]];
            }
        } break;
        case 9: {
            filter = [[GPUImageToneCurveFilter alloc] initWithACV:@"purple-green"];
           // img_New = [filter imageByFilteringImage:inputImage];
            if(Border==NO)
            {
                [imgBorder setImage:[UIImage imageNamed:@"borderNew9.png"]];
            }
        } break;
        default:
            filter = [[GPUImageFilter alloc] init];
            //img_New = [filter imageByFilteringImage:inputImage];
            if(Border==NO)
            {
                [imgBorder setImage:[UIImage imageNamed:@""]];
            }
            break;
    }
}

1 个答案:

答案 0 :(得分:5)

您可以通过

获取图片
UIImage *currentFilteredImage = [filter imageFromCurrentlyProcessedOutput];