2015-02-17 66 views
0

我有一个白色的图标和标题的绿色按钮。我正在尝试使用我刚刚了解的将绿色更改为蓝色的GPUImage库,但将白色保留为白色。这里是我的代码:GPUImage GPUImageFalseColorFilter给出错误的颜色和着色透明区域

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的透明区域(角落)现在用半透明蓝色(实际上是浅紫色)填充。基本上这个按钮现在是一个椭圆形的中间长方形。

我是否错误地使用了此过滤器?在使用此过滤器之前,我必须做一些预处理吗?

回答

1

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

你可能想要更像GPUImageHueFilter的东西(再次,不知道它是否尊重alpha)或GPUImageLookupFilter。您可能需要构建一个自定义过滤器,以便在特定阈值内查找颜色(请查看色度键控),并用您指定的颜色替换该颜色。不过,色相变化可能会完成这项工作。