मैं एचटीएमएल 5 कैनवास 'पिक्सेल मैनिपुलेशन का उपयोग करके कुछ गतिशील दृश्य प्रभाव करने की कोशिश कर रहा हूं, लेकिन मैं एक समस्या में भाग रहा हूं जहां कैनवास पिक्सेलएरे में पिक्सेल सेट करना हास्यास्पद रूप से धीमा है।एचटीएमएल 5 के कैनवास पिक्सेलएरे मूल्यों को हास्यास्पद रूप से धीमा क्यों कर रहा है और मैं इसे तेज़ी से कैसे कर सकता हूं?
उदाहरण के लिए अगर मैं कोड की तरह है:
imageData = ctx.getImageData(0, 0, 500, 500);
for (var i = 0; i < imageData.length; i += 4){
imageData.data[i] = buffer[i];
imageData.data[i + 1] = buffer[i + 1];
imageData.data[i + 2] = buffer[i + 2];
}
ctx.putImageData(imageData, 0, 0);
रूपरेखा क्रोम के साथ का पता चलता है, यह 44% के लिए निम्न कोड जहां CanvasPixelArray नहीं किया जाता है की तुलना में धीमी चलाता है।
tempArray = new Array(500 * 500 * 4);
imageData = ctx.getImageData(0, 0, 500, 500);
for (var i = 0; i < imageData.length; i += 4){
tempArray[i] = buffer[i];
tempArray[i + 1] = buffer[i + 1];
tempArray[i + 2] = buffer[i + 2];
}
ctx.putImageData(imageData, 0, 0);
मेरा अनुमान है कि इस मंदी के लिए कारण जावास्क्रिप्ट डबल्स और आंतरिक अहस्ताक्षरित 8 बिट पूर्णांकों, CanvasPixelArray द्वारा प्रयोग किया जाता के बीच रूपांतरण की वजह से है।
- क्या यह अनुमान सही है?
- क्या कैनवास पिक्सेलएरे में मूल्य निर्धारित करने के समय को कम करने के लिए वैसे भी है? आप "blitting" किसी तरह का कर रहे हैं की तरह
पुराना सवाल और शायद पुराना है, आपके दूसरे उदाहरण में आप 'छवि डेटा' (उदाहरण के लिए कुछ भी नहीं कर रहे हैंआप 'tempArray' से' imageData' 'तक मान सेट नहीं कर रहे हैं? – ZachB
@ZachB उदाहरण सही है। यह कैनवास पिक्सेलएरे का उपयोग नहीं करता है जो उस समय बोतल की गर्दन लगती थी। समस्या को हल करने वाले कुछ महान प्रतिक्रियाओं के लिए नीचे देखें। – Nixuz
हां, मैंने आपके प्रश्न को गलत तरीके से पढ़ा है। :) – ZachB