2012-03-14 47 views
5

我想在我的應用程序中對圖像應用濾鏡效果。 我是新的Open GL &想申請棕褐色,RGB,GrayScale效果圖像在我的應用程序。 我有實現亮度,對比度,飽和度效果,但無法在灰度上找到任何解決方案,RGB &棕褐色效果。對UIImage應用棕褐色,RGB,GrayScale效果

在此先感謝。

+0

看看http://stackoverflow.com/questions/3549396/image-processing-glamour-filter-in-iphone – janusbalatbat 2012-03-14 10:57:19

+0

@niks你能提供代碼的亮度,對比度和飽和度 – Nassif 2013-11-06 05:15:00

回答

5

您不指定是否要在OpenGL ES 1.1或2.0中執行此操作,因此我將假定您指的是較新的2.0。如果1.1的確是你的目標,那麼你需要玩混合模式,比如蘋果在GLImageProcessing example

對於OpenGL ES 2.0,可以使用片段着色器來實現上述每種效果。對於圖像的灰度版本,你可以使用下面的片段着色器只提取亮度:

precision highp float; 

varying vec2 textureCoordinate; 

uniform sampler2D inputImageTexture; 

const highp vec3 W = vec3(0.2125, 0.7154, 0.0721); 

void main() 
{ 
    float luminance = dot(texture2D(inputImageTexture, textureCoordinate).rgb, W); 

    gl_FragColor = vec4(vec3(luminance), 1.0); 
} 

對於一個棕褐色色調,你可以使用顏色矩陣處理着色器我證明this answer

varying highp vec2 textureCoordinate; 

uniform sampler2D inputImageTexture; 

uniform lowp mat4 colorMatrix; 
uniform lowp float intensity; 

void main() 
{ 
    lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate); 
    lowp vec4 outputColor = textureColor * colorMatrix; 

    gl_FragColor = (intensity * outputColor) + ((1.0 - intensity) * textureColor); 
} 

self.colorMatrix = (GPUMatrix4x4){ 
     {0.3588, 0.7044, 0.1368, 0}, 
     {0.2990, 0.5870, 0.1140, 0}, 
     {0.2392, 0.4696, 0.0912 ,0}, 
     {0,0,0,0}, 
    }; 

矩陣我不知道你的意思是什麼「RGB的效果。」也許你的意思是顏色矩陣的操縱,在這種情況下,上述情況也適用於你。

所有這些都是我的開源GPUImage框架內內置過濾器(見GPUImageBrightnessFilter,GPUImageContrastFilter,GPUImageSaturationFilter,GPUImageSepiaFilter和GPUImageColorMatrixFilter)。如果您真的是OpenGL ES的新手,那麼您將需要相當多的代碼來設置場景,將UIImage作爲紋理拉入,運行頂點和片段着色器,檢索該圖像並將其保存作爲UIImage退出。 GPUImage將爲您完成所有這些工作,只需幾行Objective-C代碼。