मैं 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
Alex Fallenstedt 7 पद 2020, 00:39

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);
}
2
Ibraheem Ahmed 7 पद 2020, 01:09