यदि आप एफपी 10 को लक्षित कर रहे हैं, और आप रंगीन ट्रांसफॉर्म के साथ जो कुछ भी कोशिश करते हैं, तो आप एक साधारण फ़िल्टर चाहते हैं, तो आप रंगों के 2 तर्क (स्रोत के लिए एक, गंतव्य के लिए एक) लेने के लिए पिक्सेलब्लेंडर कर्नेल लिख सकते हैं, पिक्सेल से मेल खाते हैं स्रोत रंग, और गंतव्य के लिए उन्हें स्वैप; कुछ इस तरह:
//I release this under the MIT License. Use it to your heart's content.
<languageVersion : 1.0;>
kernel ReplaceColor
< namespace : "PIPEEP";
vendor : "PiPeep";
version : 1;
description : "Replace color";
>
{
input image4 src;
output pixel4 dst;
parameter pixel4 sColor
<
minValue:pixel4(0.);
maxValue:pixel4(255.);
>;
parameter pixel4 dColor;
parameter float tolerance;
void
evaluatePixel()
{
dst = sampleNearest(src,outCoord());
pixel4 sColorAdjusted = abs((sColor/pixel4(255.)) - dst);
if(sColorAdjusted.r < tolerance && sColorAdjusted.g < tolerance && sColorAdjusted.b < tolerance && sColorAdjusted.a < tolerance) {
dst = dColor;
}
}
}
याद क्यों वह PixelBlender आईडीई नफरत करता है
संपादित करें: याद रखें कि यह विरोधी aliasing के साथ अच्छी तरह से नहीं खेलेंगे, लेकिन अगर आप stage.quality उपयोग कर रहे हैं = " कम ", इससे कोई फर्क नहीं पड़ता।
AS3 में उपयोग के लिए इसे जोड़ने के लिए, इस (, http://scriptplayground.com/tutorials/as/Flash-CS4-and-Pixel-Bender-Overview/ से चोरी हो ताकि आप कोड की कुछ लाइनें बदलने के लिए की आवश्यकता होगी) की कोशिश:
कोड के पहले भाग कुछ चर को परिभाषित किया जाता है तो बाद में। केवल दो जो नए दिख सकते हैं शेडर और शेडरफ़िल्टर हैं। ये फ़्लैश प्लेयर 10 के लिए नए हैं और कक्षा पिक्सेल बेंडर फ़िल्टर डेटा को संभालने के लिए ज़िम्मेदार हैं।
var loader:URLLoader;
var shader:Shader;
var shaderFilter:ShaderFilter;
var image:MovieClip;
var timer:Timer;
var timerInt:uint = 40;
कोड में अगला कदम चरण के लिए छवि को लोड करने, कि आप पिछले चरणों में जोड़ा है।
image = new SampleImage(); image.y =
20; image.x = 25;
addChild(image);
पहले दो तरीकों PBJ फ़ाइल लोड और फिल्टर निर्माण आरंभ प्रक्रिया के लिए बनाया जाना जाता है
function startEffect() { loader = new
URLLoader(); loader.dataFormat =
URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE,
loadComplete); loader.load(new
URLRequest("sample.pbj")); }
function loadComplete(e:Event):void {
shader = new Shader(loader.data);
initFilter(); }
अगले समारोह initFilter()
एक बार PBJ फ़ाइल कहा जाता है सफलतापूर्वक है लोड किया गया, इसलिए फ़िल्टर बनाया जा सकता है। यह फ़िल्टर छवि के आर, जी, बी रंग मान सेट करता है, जो अनिवार्य रूप से छवि से विस्तार को उड़ाता है। "shader.data.red.value
" के लिए उदाहरण पिक्सेल Bender कोड कि शुरुआत में लिखा गया था, यदि आप उस कोड एक "पैरामीटर नाव लाल" जो लाल के स्तर सेट करने के लिए नाव चर रहा है है नोटिस संदर्भित कर रहा है। इस मामले में मान 20 पर सेट किया जा रहा है। इस प्रक्रिया को अन्य 2 रंगों के लिए दोहराया गया है, और उसके बाद छवि उदाहरण में पास किया गया है।
इस समारोह के अंतिम भाग टाइमर है कि इसके सामान्य नज़र
function initFilter() {
shader.data.red.value = [20];
shader.data.green.value = [20];
shader.data.blue.value = [20];
shaderFilter = new
ShaderFilter(shader); image.filters =
[shaderFilter];
timer = new Timer(timerInt, 0);
timer.addEventListener(TimerEvent.TIMER,
timerHit); timer.start(); }
अंतिम समारोह फिल्टर लागू करने की प्रक्रिया दोहराता करने के लिए छवि रिटर्न जब तक इस फिल्टर लागू करने के लिए चलेंगे सेट , लेकिन पहले वर्तमान फ़िल्टर मानों को पकड़ता है और प्रत्येक पास पर मान से 0.1 घटा देता है। यह प्रक्रिया धीरे-धीरे छवि से फिल्टर तीव्रता को तक हटा देती है, यह पूरी तरह से समाप्त हो जाती है। यह timerHit()
समारोह टाइमर कि initFilter()
समारोह में बनाया गया था से कहा जाता है।
function timerHit(e:TimerEvent):void
{
if(shader.data.red.value == 1)
{
timer.stop();
return;
}
var r:uint = shader.data.red.value - 0.1;
var g:uint = shader.data.green.value - 0.1;
var b:uint = shader.data.blue.value - 0.1;
shader.data.red.value = [r];
shader.data.green.value = [g];
shader.data.blue.value = [b];
shaderFilter = new ShaderFilter(shader);
image.filters = [shaderFilter];
}
कोड में अंतिम चरण, प्रक्रिया है, जो इस आवेदन में startEffect()
समारोह बुला द्वारा किया जाता है शुरू करने के लिए है ताकि है हम क्या करेंगे
startEffect();
अपनी आंखें खून बहने के लिए खेद है! मुझे लगता है कि यह अभी तक मेरा सबसे लंबा जवाब है!
हाँ, मुझे पहले समाधान, थेंक्स पहले से ही पता चला है;) – Dungeo