2017-04-07 12 views
20

मैं कस्टम छवि फ़िल्टर प्रोजेक्ट पर काम कर रहा हूं। और मैं एक चुनौतीपूर्ण कार्य में आया, जिसमें मुझे विकृत फ़िल्टर लागू करना है जैसा कि Funny face effect app में देखा जा सकता है। मैं मजेदार फेस इफेक्ट्स में उपलब्ध पहले 3 फ़िल्टर विकसित करना चाहता हूं।एंड्रॉइड में ड्रैग विकृति छवि फ़िल्टर को कैसे कार्यान्वित करें?

तो इस तरह के प्रभाव को लागू करने के लिए मैंने GPUImageView GPUImage का उपयोग शुरू किया और इसमें, यह केंद्र से छवि विकृत करने के लिए तलाशबार का उपयोग कर रहा है। मैंने बल्गे इस से विरूपण हासिल किया है। लेकिन क्या कोई तरीका है कि मैं ड्रैग फ़िल्टर को कार्यान्वित कर सकता हूं, जहां मैं ड्रैग इशारा करके अपनी छवि विकृत कर सकता हूं?

हमने GPUImage के बाद किसी भी अन्य तृतीय पक्ष कक्षाओं की खोज करने की कोशिश की। लेकिन हमें उपयोगी सामान नहीं मिल सका।

हमारे प्रश्नों इस प्रकार हैं: -

1) यह खींचें जेस्चर का उपयोग करके खींचें फिल्टर लागू करना संभव है? (कोई भी कोड स्निपेट या संदर्भ सराहनीय)

2) GPU के अलावा कोई अन्य तृतीय पक्ष वर्ग जो हमें परिणामों से ऊपर उठने में मदद कर सकता है।

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

enter image description here

+0

कृपया कुछ कोड स्निपेट भी पोस्ट करें जो आपने पहले ही कोशिश की है या आप कौन सी लाइब्रेरी में आए हैं। – DroidDev

+0

@DroidDev, मैंने https://github.com/CyberAgent/android-gpuimage के साथ प्रयास किया है जिसमें प्रभाव फ़िल्टर हैं। यह ठीक काम कर रहा है जब एकल फ़िल्टर लागू होता है लेकिन जब मैं एकाधिक फ़िल्टर लागू करने का प्रयास करता हूं तो यह पूरी तरह से गलत हो जाता है। छवि यादृच्छिक बिंदु से विकृत हो रही है। – Maddy

+0

https://github.com/ragnraok/android-image-filter। आप गति धुंध सुविधा – Rndomcoder

उत्तर

5

एक तरह से इसे प्राप्त करने के टुकड़ा शेडर विरूपण लागू करने के लिए करने के लिए निर्दिष्ट करने के लिए एक अतिरिक्त बनावट का प्रयोग है। आप ऐप से उस बनावट सामग्री को संशोधित कर सकते हैं क्योंकि उपयोगकर्ता विकृतियों को लागू करने के लिए छवि को छूता है।

GPUImageBulgeDistortionFilterGPUImageFilter बढ़ाता है जिसे केवल एक बनावट का उपयोग करने के लिए डिज़ाइन किया गया है।

आपको बनावट बाध्यकारी (glbindTexture) को डुप्लिकेट करने और GPUImageFilter में खंड बनावट (glUniform1i) को नए बनावट (0 के बजाय) के लिए 1 का उपयोग करने की आवश्यकता होगी। आपको glGetUniformLocation को डुप्लिकेट करने और इनपुट इमेजटेक्चर के बजाय अन्य नाम का उपयोग करने की आवश्यकता होगी, उदाहरण के लिए inputImageTexture2।

GPUImageBulgeDistortionFilter पर टुकड़ा शेडर संशोधित करें या जोड़ने के लिए GPUImageBulgeDistortionFilter से ली गई एक नया वर्ग बनाने "वर्दी sampler2D inputImageTexture2; \ n" +

अंत में वही समान खंड शेडर में inputImageTexture पर डेटा से खंडित हो inputImageTexture2 texels उपयोग करने के लिए कोड जोड़ने ।

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