Rust 如何转换夹紧<;Vec<;u8>&燃气轮机;夹紧<&;mut[u8]>;带着锈和网?

Rust 如何转换夹紧<;Vec<;u8>&燃气轮机;夹紧<&;mut[u8]>;带着锈和网?,rust,webassembly,wasm-bindgen,Rust,Webassembly,Wasm Bindgen,我正在使用Rust和WebAssembly处理像素数据,并且正在努力用处理过的像素创建新的ImageData 当我得到我的数据时,它返回一个 fn获取缓冲区图像数据(&self)->{ 让image\u data=match self.buffer\u ctx.get\u image\u data(0.0,0.0640.0480.0){ Ok(d)=>d, Err(_Err)=>panic!(“无法获取缓冲区映像数据”) }; image_data.data() } 我在另一个函数中操纵像素数

我正在使用Rust和WebAssembly处理像素数据,并且正在努力用处理过的像素创建新的ImageData

当我得到我的数据时,它返回一个

fn获取缓冲区图像数据(&self)->{
让image\u data=match self.buffer\u ctx.get\u image\u data(0.0,0.0640.0480.0){
Ok(d)=>d,
Err(_Err)=>panic!(“无法获取缓冲区映像数据”)
};
image_data.data()
}
我在另一个函数中操纵像素数据,然后尝试使用这些操纵的像素创建新的ImageData。问题是我只能用

fn创建图像数据(&self,数据:钳制){
设imageData=imageData::新的_与_u8_夹紧的_数组_和_sh(数据,640480);
}
但是,我收到的错误是:

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>>`
不匹配的类型
应为“&mut[u8]”,找到结构“std::vec::vec”`
注意:应为结构'wasm_bindgen::clipped`
找到结构'wasm_bindgen::钳制`

我想我需要把一种类型转换成另一种类型。如何有效地转换?我已经尝试了一段时间,我被卡住了。我唯一的解决方案是从我的JS将整个Uint8ClampedArray发送到wasm。下面是一个可以使用的代码示例。注意,如果克隆此回购,请检查分支
问题

如果查看源代码,您将看到它只是
T
的包装

pub结构夹紧(pub T);
由于内部
T
是公共的,因此可以对其执行任何操作,例如将
Vec
转换为切片:

let slice_data:&mut[u8]=&mut t t[…];
然后,您可以将
slice_data
包装到
clipped
的新实例中,并将其传递给
ImageData

fn创建图像数据(&self,数据:钳制){
设slice_data=clipped(&mut t t[…]);
设imageData=imageData::新的_与_u8_夹紧的_数组_和_sh(切片_数据,640480);
}

让x:&[u8]=&data.0[…]
钳制的
内部是公共的,它只是一个包装器,所以您可以自己进行转换啊,这是正确的。我可以使用“as_mut_slice”。生锈对我来说是相当新鲜的。非常感谢。
    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>>`