【问题标题】:GPUImage GPUImageFalseColorFilter giving wrong color and coloring transparent areasGPUImage GPUImageFalseColorFilter 给出错误的颜色和着色透明区域
【发布时间】:2015-02-19 02:36:14
【问题描述】:

我有一个带有白色图标和标题的绿色按钮。我正在尝试使用我刚刚学习的 GPUImage 库将绿色更改为蓝色,但将白色保持为白色。这是我的代码:

UIImage *inputImage = [UIImage imageNamed:@"pause-button"];
GPUImageFalseColorFilter *colorSwapFilter = [[GPUImageFalseColorFilter alloc] init];
colorSwapFilter.firstColor = (GPUVector4){0.0f, 0.0f, 1.0f, 1.0f};
colorSwapFilter.secondColor = (GPUVector4){1.0f, 1.0f, 1.0f, 1.0f};
UIImage *filteredImage = [colorSwapFilter imageByFilteringImage:inputImage];

有2个问题:

  1. 生成的图像是淡紫色而不是蓝色。几乎就像蓝色被 50% 的不透明度或其他东西覆盖一样,原来的绿色被设置为白色。
  2. 按钮不是矩形(更像是椭圆形),PNG 的透明区域(角)现在填充了半透明的蓝色(嗯,实际上是淡紫色)。基本上,按钮现在是一个矩形,中间有一个较深的椭圆形。

我是否错误地使用了这个过滤器?在使用这个过滤器之前我需要做一些预处理吗?

【问题讨论】:

    标签: ios uiimage gpuimage


    【解决方案1】:

    GPUImageFalseColorFilter 可能不是您想要用来改变某物色调的东西。它是 Core Image 中同名滤镜的重新实现,它首先将图像转换为其亮度,然后用一种颜色替换白色,用另一种颜色替换黑色。您可以在这些颜色之间获得可变混合,而不是灰度。我也认为它目前不尊重 alpha 通道。

    您可能需要更像 GPUImageHueFilter(同样,不确定它是否尊重 alpha)或 GPUImageLookupFilter 之类的东西。您可能需要构建一个自定义过滤器来定位某个阈值内的颜色(查看色度键控)并将其替换为给定的颜色。不过,色调变化可能会起到作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      相关资源
      最近更新 更多