मैं Rust और WebAssembly का उपयोग करके पिक्सेल डेटा में हेरफेर कर रहा हूं, और हेरफेर किए गए पिक्सेल के साथ नया ImageData बनाने के लिए संघर्ष कर रहा हूं।
जब मुझे मेरा ImageData
' मिलता है डेटा, यह एक Clamped<Vec<u8>>
fn get_buffer_image_data(&self) -> Clamped<Vec<u8>> {
let image_data = match self.buffer_ctx.get_image_data(0.0, 0.0, 640.0, 480.0) {
Ok(d) => d,
Err(_err) => panic!("failed to fetch buffer image data")
};
image_data.data()
}
मैं किसी अन्य फ़ंक्शन में पिक्सेल डेटा में हेरफेर करता हूं, और फिर इन हेरफेर किए गए पिक्सेल के साथ नया इमेजडेटा बनाने का प्रयास करता हूं। समस्या यह है कि मैं केवल क्लैंप किया गया<&म्यूट [u8]>
fn create_image_data(&self, data: Clamped<Vec<u8>>) {
let imageData = ImageData::new_with_u8_clamped_array_and_sh(data, 640, 480);
}
हालांकि, मुझे प्राप्त त्रुटि है:
mismatched types
expected `&mut [u8]`, found struct `std::vec::Vec`
note: expected struct `wasm_bindgen::Clamped<&mut [u8]>`
found struct `wasm_bindgen::Clamped<std::vec::Vec<u8>>`
मुझे लगता है कि मुझे एक प्रकार को दूसरे में बदलने की जरूरत है। मैं कुशलता से कैसे परिवर्तित करूं? मैं थोड़ी देर के लिए यह कोशिश कर रहा हूं और मैं फंस गया हूं। मेरे पास एकमात्र उपाय है कि मैं अपने JS से पूरे Uint8ClampedArray को wasm में भेज दूं। यहां एक कोड उदाहरण है जिसका आप उपयोग कर सकते हैं। ध्यान दें, यदि आप इस रेपो को क्लोन करते हैं तो कृपया शाखा problem
https://github.com/Fallenstedt/rotated-pixels/blob/problem/src/pixel_rotator.rs#L42-L44
1 उत्तर
अगर आप क्लैंप किया हुआ
, आप देखेंगे कि यह T
के चारों ओर केवल एक आवरण है।
pub struct Clamped<T>(pub T);
क्योंकि आंतरिक T
सार्वजनिक है, आप इस पर कोई भी ऑपरेशन कर सकते हैं, जैसे Vec
को एक स्लाइस में बदलना:
let slice_data: &mut [u8] = &mut t[..];
फिर आप slice_data
को Clamped
के नए इंस्टेंस में लपेट सकते हैं, और इसे ImageData
को पास कर सकते हैं:
fn create_image_data(&self, data: Clamped<Vec<u8>>) {
let slice_data = Clamped(&mut t[..]);
let imageData = ImageData::new_with_u8_clamped_array_and_sh(slice_data, 640, 480);
}
संबंधित सवाल
नए सवाल
rust
Rust एक ऐसी सिस्टम प्रोग्रामिंग भाषा है, जिसमें बिना कचरा इकट्ठा किए तीन लक्ष्यों पर ध्यान केंद्रित किया जाता है: सुरक्षा, गति, और संगामिति। Rust में लिखे कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। उन प्रश्नों के लिए एक संस्करण विशिष्ट टैग का उपयोग करें, जो कोड का उल्लेख करते हैं, जिसके लिए एक विशेष संस्करण की आवश्यकता होती है, जैसे [जंग-2018]। [जंग-माल] और [जंग-मैक्रोज़] जैसे उप-क्षेत्रों के लिए अधिक विशिष्ट टैग का उपयोग करें।