c# - Marshal.Copy() causes System.StackOverflowException -
मैं का सामना करना पड़ा एक System.StackOverflowException समस्या जब मैं Marshal.Copy करने की कोशिश कर रहा था ( )
यहां अपवाद होता है, जहां कोड का स्क्रीन शॉट है:
यहां समारोह है:
निजी स्थिर शून्य ImageUpdate (IntPtr returnArray, रेफरी पूर्णांक चैनल) {if (_prevTickCount = = 0) {_sumTickCount = 0; } अन्य {_sumTickCount = _sumTickCount * .75 + (पर्यावरण। टिकटिक - _prevTickCount) * .25; } // केवल बफर की नकल करें जब पिक्सेल डेटा नहीं पढ़ा जा रहा है (_pixelDataReady == गलत) {int width = 0; पूर्णांक ऊंचाई = 0; अगर (गलत == GetImageDimensions (रेफ़र्फ़ चौड़ाई, रिफ़ ऊंचाई)) {वापसी; } _dataLength = चौड़ाई * ऊंचाई; _colorChannels = चैनल; अगर ((_pixelData == नल) || (_pixelData.Length = (_dataLength * _colorChannels))!) {_pixelData = नई छोटी [_dataLength * _colorChannels]; // _ पिक्सेल डेटाहास्तोग्राम = नया इंट [_colorChannels] []; _pixelDataHistogram = नया इंटेल [MAX_CHANNELS] []; यदि (_colorChannels == 1) {_pixelDataByte = नया बाइट [_dataLength]; } और {_pixelDataByte = नया बाइट [_dataLength * 3]; } // के लिए (int i = 0; मैं & LT; _colorChannels; i ++) (आई इंट = 0; मैं & LT; MAX_CHANNELS; i ++) के लिए {_pixelDataHistogram [i] = new int [PIXEL_DATA_HISTOGRAM_SIZE]; }} // 2 ^ n == FULL_RANGE_NORMALIZATION_FACTOR const int SHIFT_VALUE = 6; स्विच (_colorChannels) {मामला 1: {Marshal.Copy (वापसीअरे, _pixelData, 0, _dataLength * _colorChannels); // का कारक CAMERA_MAX_INTENSITY_VALUE / 256 / कस्ट डबल FULL_RANGE_NORMALIZATION_FACTOR = 64.0; // हिस्टोग्राम स्पष्ट (आई इंट = 0; मैं & LT; PIXEL_DATA_HISTOGRAM_SIZE; i ++) के लिए {_pixelDataHistogram [0] [मैं] = 0; } के लिए (int i = 0; i & lt; _dataLength * _colorChannels; i ++) {डबल वैलहिस्ट; अगर (_ पिक्सलडेटा [i] & lt; 0) {valHist = (_pixelData [i] + 32768) & gt; & gt; SHIFT_VALUE; } अन्य {valHist = (_pixelData [i]) & gt; & gt; SHIFT_VALUE; } _ पिक्सेल डेटा हिस्टोग्राम [0] [(बाइट) valHist] ++; } } टूटना; डिफ़ॉल्ट: {मार्शल। कॉपी (वापसीअरे, _ पिक्सेलडेटा, 0, _dataLength * _colorChannels); } टूटना; } _dataWidth = चौड़ाई; _dataHeight = ऊँचाई; _pixelDataReady = सच; थोरॉग.इन्स्टेंस.ट्रेस एवेन्ट (ट्रेसइवेंट टाइप। वर्बोस, 1, "छवि अद्यतन पिक्सलडाटा अपडेट किया गया"); } और {थोर लॉग.इनस्ट्रेस। ट्रैविस एवेन्ट (ट्रेस एवेन्ट टाइप। वर्बोस, 1, "इमेजअपडेट पिक्सलडाटा तैयार नहीं है"); } _prevTickCount = पर्यावरण। टिकटिक; }
संपूर्ण विचार छवि बफर को मूल कोड से कॉपी करना है यह अपवाद तभी होता है जब छवि आकार बड़ा 4K X 4K होता है, लेकिन मेरे पास एक आकार की प्रक्रिया करने में कोई समस्या नहीं है।
मुझे नहीं पता कि मुझे यह कैसे सही करना चाहिए। शिक्षित करने के लिए कोई भी देखभाल करता है? धन्यवाद!
मैं इसे नीचे का पता लगाया है, अंत में, अगर returnArray
था जो इस समस्या का कारण बनने के लिए पर्याप्त नहीं है नया
Comments
Post a Comment