Skip to content

Commit c652d82

Browse files
committed
减少压缩体积
1 parent 86c93c9 commit c652d82

File tree

4 files changed

+12
-9
lines changed

4 files changed

+12
-9
lines changed

dsweb-core/src/config.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// 传输像素保留位数(右边0越多压缩程度越大
2-
pub const BIT_MASK: u8 = 0b1111_1000;
1+
// 传输像素保留位数(0~8,越大压缩率越高,失真率越高
2+
pub const BIT_MASK: u8 = 4;
33

44
// 最小检测区域宽
55
pub const SW: usize = 100;

dsweb-core/src/imop.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ pub fn sub_areas_bgra(bgra: &[u8], recs: &mut Vec<Vec<u8>>, w: usize, h: usize,
1717
let g = bgra[index + 1];
1818
let b = bgra[index];
1919
let rec_index = (j*sw + k) * 3;
20-
rec[rec_index] = r & config::BIT_MASK;
21-
rec[rec_index+1] = g & config::BIT_MASK;
22-
rec[rec_index+2] = b & config::BIT_MASK;
20+
rec[rec_index] = r >> config::BIT_MASK;
21+
rec[rec_index+1] = g >> config::BIT_MASK;
22+
rec[rec_index+2] = b >> config::BIT_MASK;
2323
}
2424
}
2525
}

dsweb-core/src/server.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ fn screen_stream(mut stream: Writer<TcpStream>, running: Arc<AtomicBool>) {
138138
let (mut a, srw, srh) = get_rgb_block(w, h, sw, sh, 2);
139139
let block_len = srw * srh;
140140
let (mut b, _, _) = get_rgb_block(w, h, sw, sh, 2);
141-
// 发送w, h, sw, sh
142-
let mut meta = vec![0u8;8];
141+
// 发送w, h, sw, sh, mask
142+
let mut meta = vec![0u8;9];
143143
meta[0] = (w >> 8) as u8;
144144
meta[1] = w as u8;
145145
meta[2] = (h >> 8) as u8;
@@ -148,6 +148,7 @@ fn screen_stream(mut stream: Writer<TcpStream>, running: Arc<AtomicBool>) {
148148
meta[5] = sw as u8;
149149
meta[6] = (sh >> 8) as u8;
150150
meta[7] = sh as u8;
151+
meta[8] = config::BIT_MASK;
151152
(stream, _) = ws_send(stream, meta);
152153
let mut sendbuf = Vec::<u8>::with_capacity(1024 * 4);
153154
while running.load(Ordering::Relaxed) {

dsweb-front/src/lib.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)