ios - 如何通过GPUImage调整图像的亮度和对比度?

标签 ios gpuimage

我编写了一种使用亮度因子和对比度因子过滤图像的方法,如下所示:

- (UIImage*)image:(UIImage*)image withBrightness:(float)brightness contrast:(float)contrast{
    GPUImagePicture *imagePicture = [[GPUImagePicture alloc] initWithImage:image];
    GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
    GPUImageContrastFilter *contrastFilter = [[GPUImageContrastFilter alloc] init];

    [imagePicture addTarget:brightnessFilter];
    [brightnessFilter addTarget:contrastFilter];

    brightnessFilter.brightness = brightness; // set brightness
    contrastFilter.contrast = contrast;       // set contrast

    [imagePicture processImage];
    UIImage *filteredImage = [contrastFilter imageFromCurrentlyProcessedOutput];
    return filteredImage;
}

调用此实现将引发错误:<Error>: CGContextDrawImage: invalid context 0x0

如何使用GPUImage正确实现亮度和对比度调整?

最佳答案

您可能应该创建一个组过滤器,请检查此示例代码

    GPUImageFilterGroup *groupFilter = [[GPUImageFilterGroup alloc]init];
    [groupFilter addTarget:edit.currentFilter];

    //create a brightness filter
    GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc]init];
    [brightnessFilter setBrightness:brightnessValue];

    //create a contrast filter
    GPUImageContrastFilter *contrastFilter = [[GPUImageContrastFilter alloc]init];
    [contrastFilter setContrast:contrastValue];

    //create a exposure filter
    GPUImageExposureFilter *exposureFilter =[[GPUImageExposureFilter alloc]init];
    [exposureFilter setExposure:exposureValue];

    //add brightness,contrast,exposure filters to group filter
    [groupFilter addFilter:brightnessFilter];
    [groupFilter addFilter:contrastFilter];
    [groupFilter addFilter:exposureFilter];


    [edit.currentFilter addTarget:brightnessFilter];
    [brightnessFilter addTarget: contrastFilter];
    [contrastFilter addTarget: exposureFilter];
    //setting initial and terminal filters
    [(GPUImageFilterGroup *) groupFilter setInitialFilters:[NSArray arrayWithObject:edit.currentFilter]];
    [(GPUImageFilterGroup *) groupFilter setTerminalFilter:exposureFilter];


    //apply it to the GPUImagePicture

关于ios - 如何通过GPUImage调整图像的亮度和对比度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19134112/

相关文章:

ios滚动后保持UITableViewCell布局

ios - GPUImage - 将 GPUImageTransformFilter 匹配到正确的混合大小

swift - Pod 安装 GPUImage 不起作用

ios - GPUImage 相机打不开

objective-c - 单独类中的 UIAlertViewDelegate 会使应用程序崩溃

objective-c - iOS 异常 EXC_GUARD

ios - FMDatabase dateForColumn,有用吗?

ios - 与 Apple Watch 共享来自 iOS 的 AsyncStorage React native 应用程序

ios - 如何从 GPUImageHarrisCornerDetector 获取角坐标?

iphone - GPUImage 问题 iPhone