GPUImage GPUImageFalseColorFilter给出错误的颜色和着色透明区域

时间:2015-02-17 23:15:18

标签: ios uiimage gpuimage

我有一个带有白色图标和标题的绿色按钮。我正在尝试使用我刚学会的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];

有两个问题:

  1. 得到的图像是淡紫色而不是蓝色。几乎就像蓝色被50%的不透明度覆盖了一样,原来的绿色被设置为白色。
  2. 按钮不是矩形(多为椭圆形),PNG的透明区域(角落)现在填充半透明蓝色(实际上是浅紫色)。基本上按钮现在是一个矩形,中间有一个较深的椭圆形。
  3. 我是否错误地使用此过滤器?在使用此过滤器之前,是否必须进行一些预处理?

1 个答案:

答案 0 :(得分:1)

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

您可能想要更像GPUImageHueFilter(再次,不确定它是否尊重alpha)或GPUImageLookupFilter。您可能需要构建一个自定义过滤器来定位某个阈值内的颜色(查看色度键控的颜色)并用您给定的颜色替换它。但是,Hue的变化可能会起到作用。