Non si specifica se si desidera eseguire questa operazione in OpenGL ES 1.1 o 2.0, quindi presumo che si stia facendo riferimento al 2.0 più recente. Se 1.1 è davvero il tuo obiettivo, dovrai giocare con le modalità di fusione come fa Apple nel loro GLImageProcessing example.
Per OpenGL ES 2.0, è possibile utilizzare gli ombreggiatori di frammenti per ottenere ciascuno di questi effetti. Per una versione in scala di grigi di un'immagine, è possibile estrarre solo la luminanza utilizzando il seguente frammento di shader:
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);
}
Per una tonalità seppia, è possibile utilizzare lo shader colore manipolazione matrice dimostro in 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);
}
con una matrice di
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},
};
: io non ho idea di che cosa si intende per "effetto RGB". Forse intendi la manipolazione della matrice di colori, nel qual caso anche in questo caso funzionerà anche per te.
Tutti questi sono filtri incorporati all'interno del mio framework open source GPUImage (vedi GPUImageBrightnessFilter, GPUImageContrastFilter, GPUImageSaturationFilter, GPUImageSepiaFilter, e GPUImageColorMatrixFilter). Se sei veramente un nuovo arrivato ad OpenGL ES, ti servirà un bel po 'di codice per configurare la tua scena, inserire la tua UIImage come una texture, eseguire un vertice e frammentare shader contro di esso, recuperare quell'immagine e salvarla torna indietro come un UIImmagine. GPUImage farà tutto questo per te con poche righe di codice Objective-C.
dai uno sguardo http://stackoverflow.com/questions/3549396/immagine-processo-grosso-filter-in-iphone – janusbalatbat
@niks puoi fornire il codice per luminosità, contrasto e saturazione – Nassif