2012-11-14 11 views
7

में बहुत धीमी है मैं निम्नलिखित कोड चला रहा हूँ:ImageData को Uint8ClampedArray स्थापना फ़ायरफ़ॉक्स

ImageData imagedata = context.getImageData(0, 0, width, height); 
Uint8ClampedArray pixelArray; 
... 

imagedata.data.set(pixelArray); 

क्रोम में इस कोड को रन तेजी से लेकिन फ़ायरफ़ॉक्स में बहुत धीमी गति से। क्या छवि छवि में Uint8ClampedArray लिखने का कोई तेज़ तरीका है?

+0

चूंकि आप ऑफसेट पैरामीटर का उपयोग नहीं कर रहे हैं, तो क्या आपने imagedata.data पर सीधे pixelArray असाइन करने का प्रयास किया था? imagedata.data = pixelArray; .. सुनिश्चित नहीं है कि इससे कोई फर्क पड़ता है प्रदर्शन के अनुसार – lostsource

उत्तर

5

एक छविटाटा को Uint8ClampedArray लिखने का सबसे तेज़ तरीका एक Uint8ClampedArray लिखना है जिसे पहले IMageData द्वारा प्राप्त नहीं किया गया था। context.getImageData हास्यास्पद रूप से धीमा है। मैंने test on jsPerf बनाया है जो दर्शाता है कि आपके द्वारा पोस्ट किए गए कोड में समय कहां जा रहा है। पहला परीक्षण एक छवि सरटा में एक मौजूदा सरणी लिखता है, जबकि दूसरा परीक्षण किसी मौजूदा छवि डेटा से पढ़ता है। दूसरा परीक्षण 99% से अधिक समय लेता है।

तो, आप इसके बारे में क्या कर सकते हैं?

context.getImageData से अपना Uint8ClampedArray बनाने के बजाय, new Uint8ClampedArray(width*height) के माध्यम से इसे बनाने का प्रयास करें। वैकल्पिक रूप से, यदि आप छवि डेटा को कई बार लिखना चाहते हैं, लेकिन आप केवल एक बार इसे पढ़ने के साथ दूर हो सकते हैं, Uint8ClampedArray को कैश करें और इसे किसी भी छविडेटा से वापस न करें।

कुछ हफ्ते पहले मैं इस समस्या से खुद भाग गया। संदर्भ में कभी भी पढ़ने से बचने के लिए मैं वास्तव में कुछ कार्यक्रमों को फिर से शुरू कर देता हूं। यद्यपि क्रोम में इमेजडेटा बहुत तेज है, फिर भी जब भी मैं इसे हर फ्रेम चलाने की कोशिश करता हूं तब भी ब्राउजर के फ्रेम पर थोड़ा सा प्रभाव पड़ता था। मुझे प्रोजेक्ट dropbox पर मिला है, और जेएस अप्रचलित है ताकि आप इसे देख सकें यदि आप देखना चाहते हैं कि किसी और ने समस्या के साथ क्या किया है।

आशा है कि मदद करता है!

+0

क्या आपके परीक्षण पूरी तरह से अलग-अलग चीजें नहीं करते हैं? एक कैनवास से मौजूदा छवि को पढ़ता है, दूसरा एक नया "छवि" बनाता है। – notJim

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