2012-03-14 11 views
5

Uygulamamdaki görüntüye filtre efektleri uygulamak istiyorum. Ben Open GL & yeni duyuyorum Sepya, RGB, benim app görüntüye için GrayScale efekt uygulamak istiyoruz. Ben Parlaklık, Kontrast uygulanan Doygunluk etkileri var, ama Gri Tonlama üzerinde herhangi bir çözüm, RGB & sepya etkisi bulunan edemedi.Sepya, RGB, GrayScale efektini UIImage uygulatarak uygulama

Şimdiden teşekkürler.

+0

bir göz atın http://stackoverflow.com/questions/3549396/image-processing-glamour-filter-in-iphone – janusbalatbat

+0

@niks Parlaklık, kontrast ve doygunluk için kod sağlayabilir misiniz? – Nassif

cevap

5

Bunu OpenGL ES 1.1 veya 2.0'da yapmak isteyip istemediğinizi belirtmezsiniz, bu nedenle, daha yeni 2.0'a atıfta bulunduğunuzu varsayacağım. 1.1 gerçekten sizin hedefinizse, Apple'ın GLImageProcessing example numarasındaki karışım modlarıyla oynamanız gerekir.

OpenGL ES 2.0 için, bu efektlerin her birine ulaşmak için parça gölgelendiricileri kullanabilirsiniz. Bir resmin bir gri skala sürümü için, aşağıdaki fragman gölgelendirici ile sadece parlaklık özü:

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); 
} 
: Bir koyu kahverengi bir ton için

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); 
} 

, ne this answer gösteri renkli matris manipülasyon gölgelendirici kullanabilir

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}, 
    }; 

bir matris ile

ne demek hiçbir fikrim yok "RGB etkisi." Belki de renk matrisi manipülasyonunu kastediyorsunuz, bu durumda yukarıdaki durumda da sizin için çalışacaktır.

Bunların hepsi

benim açık kaynak GPUImage çerçevesinde yerleşik filtreler (GPUImageBrightnessFilter, GPUImageContrastFilter, GPUImageSaturationFilter, GPUImageSepiaFilter ve GPUImageColorMatrixFilter bakınız) bulunmaktadır. Eğer OpenGL ES için yeni biriyseniz, sahneyi kurmak, UIImage'ınızı doku olarak çekmek, bir köşe ve parça gölgelendirici kullanmak, bu görüntüyü almak ve kaydetmek için oldukça fazla kod alacaksınız. UIImage olarak geri çekil. GPUImage hepsini sizin için birkaç satır Objective-C koduyla yapacağız.