@@ -45,17 +45,19 @@ pub fn start_websocket(canvas_id: &str, host: &str) -> Result<WebSocket, JsValue
4545 let ( fw, fh) = ( Rc :: new ( RwLock :: new ( 0u32 ) ) , Rc :: new ( RwLock :: new ( 0u32 ) ) ) ;
4646 let canvas1 = canvas. clone ( ) ;
4747 let ( tfw, tfh) = ( fw. clone ( ) , fh. clone ( ) ) ;
48+ let mut bit_mask = 0u8 ;
4849 let onmessage_callback = Closure :: wrap ( Box :: new ( move |e : MessageEvent | {
4950 if let Ok ( abuf) = e. data ( ) . dyn_into :: < js_sys:: ArrayBuffer > ( ) {
5051 let array = js_sys:: Uint8Array :: new ( & abuf) ;
5152 let data = array. to_vec ( ) ;
5253 let len = array. byte_length ( ) as usize ;
53- if len == 8 {
54+ if len == 9 {
5455 // 初始化w, h
5556 let w = ( ( data[ 0 ] as u32 ) << 8 ) | ( data[ 1 ] as u32 ) ;
5657 let h = ( ( data[ 2 ] as u32 ) << 8 ) | ( data[ 3 ] as u32 ) ;
5758 sw = ( ( data[ 4 ] as u32 ) << 8 ) | ( data[ 5 ] as u32 ) ;
5859 sh = ( ( data[ 6 ] as u32 ) << 8 ) | ( data[ 7 ] as u32 ) ;
60+ bit_mask = data[ 8 ] ;
5961 srw = ( w / sw) + if w % sw == 0 { 0u32 } else { 1u32 } ;
6062 if let Ok ( mut tfw) = tfw. write ( ) {
6163 * tfw = w;
@@ -83,7 +85,7 @@ pub fn start_websocket(canvas_id: &str, host: &str) -> Result<WebSocket, JsValue
8385 . chunks_exact_mut ( 4 )
8486 . zip ( ( temp[ 2 ..] ) . chunks_exact ( 3 ) )
8587 . for_each ( |( c, b) | {
86- ( c[ 0 ] , c[ 1 ] , c[ 2 ] , c[ 3 ] ) = ( b[ 0 ] , b[ 1 ] , b[ 2 ] , 255u8 ) ;
88+ ( c[ 0 ] , c[ 1 ] , c[ 2 ] , c[ 3 ] ) = ( b[ 0 ] << bit_mask , b[ 1 ] << bit_mask , b[ 2 ] << bit_mask , 255u8 ) ;
8789 } ) ;
8890 let im = ImageData :: new_with_u8_clamped_array_and_sh ( Clamped ( & real_img) , sw, sh)
8991 . unwrap ( ) ;
0 commit comments