2012-03-14 11 views
5

पर सेपिया, आरजीबी, ग्रेस्केल प्रभाव लागू करना मैं अपने ऐप में छवि पर फ़िल्टर प्रभाव लागू करना चाहता हूं। मैं ओपन जीएल & में नया हूं, सेपिया, आरजीबी, ग्रेस्केल प्रभाव पर मेरे ऐप में लागू करना चाहता हूं। मेरे पास लागू ब्राइटनेस, कंट्रास्ट, संतृप्ति प्रभाव, लेकिन ग्रेस्केल, आरजीबी & सेपिया प्रभाव पर कोई समाधान नहीं मिला।यूआईएममेज

अग्रिम धन्यवाद।

+0

एक नज़र डालें http://stackoverflow.com/questions/3549396/image-processing-glamour-filter-in-iphone – janusbalatbat

+0

@niks क्या आप चमक, विपरीतता और संतृप्ति के लिए कोड प्रदान कर सकते हैं – Nassif

उत्तर

5

आप यह निर्दिष्ट नहीं करते कि आप ओपनजीएल ES 1.1 या 2.0 में ऐसा करना चाहते हैं, तो मुझे लगता है कि आप नए 2.0 का जिक्र कर रहे हैं। यदि 1.1 वास्तव में आपका लक्ष्य है, तो आपको अपने GLImageProcessing example में ऐप्पल की तरह मिश्रण मोड के साथ खेलना होगा।

ओपनजीएल ईएस 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}, 
    }; 

के एक मैट्रिक्स के साथ मुझे नहीं पता कि आप द्वारा क्या मतलब है "आरजीबी प्रभाव।" शायद आपका मतलब रंग मैट्रिक्स हेरफेर है, इस मामले में उपरोक्त मामले में भी आपके लिए काम करेगा।

ये सब मेरी खुला स्रोत GPUImage ढांचे के भीतर निर्मित फिल्टर (देखें GPUImageBrightnessFilter, GPUImageContrastFilter, GPUImageSaturationFilter, GPUImageSepiaFilter, और GPUImageColorMatrixFilter) कर रहे हैं। यदि आप ओपनजीएल ईएस के लिए वास्तव में एक नवागंतुक हैं, तो यह आपको अपना दृश्य सेट अप करने के लिए थोड़ा सा कोड ले जाएगा, अपने यूआईएममेज को एक बनावट के रूप में खींचें, इसके खिलाफ एक कशेरुका और टुकड़ा शेडर चलाएं, उस छवि को पुनः प्राप्त करें, और इसे सहेजें UIImage के रूप में वापस बाहर। GPUImage उद्देश्य-सी कोड की कुछ पंक्तियों के साथ आपके लिए यह सब कुछ करेगा।

संबंधित मुद्दे