✨ feat(main): 使用 `crossbeam` 库优化图像处理流程,提升性能
This commit is contained in:
parent
16fdb77ee7
commit
06709c9fa5
|
@ -183,6 +183,19 @@ dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crossbeam"
|
||||||
|
version = "0.8.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8"
|
||||||
|
dependencies = [
|
||||||
|
"crossbeam-channel",
|
||||||
|
"crossbeam-deque",
|
||||||
|
"crossbeam-epoch",
|
||||||
|
"crossbeam-queue",
|
||||||
|
"crossbeam-utils",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-channel"
|
name = "crossbeam-channel"
|
||||||
version = "0.5.13"
|
version = "0.5.13"
|
||||||
|
@ -211,6 +224,15 @@ dependencies = [
|
||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crossbeam-queue"
|
||||||
|
version = "0.3.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"
|
||||||
|
dependencies = [
|
||||||
|
"crossbeam-utils",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-utils"
|
name = "crossbeam-utils"
|
||||||
version = "0.8.20"
|
version = "0.8.20"
|
||||||
|
@ -772,6 +794,8 @@ dependencies = [
|
||||||
name = "rust_v4l2"
|
name = "rust_v4l2"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"crossbeam",
|
||||||
|
"crossbeam-channel",
|
||||||
"fltk",
|
"fltk",
|
||||||
"image",
|
"image",
|
||||||
"rscam",
|
"rscam",
|
||||||
|
|
|
@ -4,6 +4,8 @@ version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
crossbeam = "0.8.4"
|
||||||
|
crossbeam-channel = "0.5.13"
|
||||||
fltk = "1.4.36"
|
fltk = "1.4.36"
|
||||||
image = "0.25.5"
|
image = "0.25.5"
|
||||||
rscam = "0.5.5"
|
rscam = "0.5.5"
|
||||||
|
|
40
src/main.rs
40
src/main.rs
|
@ -61,23 +61,31 @@ fn main() {
|
||||||
w = l_data.width() as i32;
|
w = l_data.width() as i32;
|
||||||
h = l_data.height() as i32;
|
h = l_data.height() as i32;
|
||||||
}
|
}
|
||||||
for tmp_x in 0..30 {
|
crossbeam::scope(|_| {
|
||||||
for tmp_y in 0..60 {
|
for tmp_x in 0..30 {
|
||||||
rgb_data.put_pixel(tmp_x, tmp_y, Rgb([102, 204, 255]));
|
for tmp_y in 0..60 {
|
||||||
|
rgb_data.put_pixel(tmp_x, tmp_y, Rgb([102, 204, 255]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
let fltk_rgb_image =
|
||||||
let fltk_l_image =
|
RgbImage::new(rgb_data.as_raw(), w, h, ColorDepth::Rgb8).unwrap();
|
||||||
RgbImage::new(l_data.as_raw(), w, h, ColorDepth::L8).unwrap();
|
color_frame.set_image(Some(fltk_rgb_image));
|
||||||
let fltk_rgb_image =
|
color_frame.set_size(w, h);
|
||||||
RgbImage::new(rgb_data.as_raw(), w, h, ColorDepth::Rgb8).unwrap();
|
color_frame.redraw();
|
||||||
camera_frame.set_image(Some(fltk_l_image));
|
let duration = start.elapsed();
|
||||||
color_frame.set_image(Some(fltk_rgb_image));
|
println!("L8 Frame Draw use time: {:?}", duration);
|
||||||
// 通过重新调整尺寸从而刷新图像
|
})
|
||||||
color_frame.set_size(w, h);
|
.unwrap();
|
||||||
camera_frame.redraw();
|
crossbeam::scope(|_| {
|
||||||
color_frame.redraw();
|
let fltk_l_image =
|
||||||
let duration = start.elapsed();
|
RgbImage::new(l_data.as_raw(), w, h, ColorDepth::L8).unwrap();
|
||||||
println!("Time elapsed in DrawImage is: {:?}", duration);
|
camera_frame.set_image(Some(fltk_l_image));
|
||||||
|
// 通过重新调整尺寸从而刷新图像
|
||||||
|
camera_frame.redraw();
|
||||||
|
let duration = start.elapsed();
|
||||||
|
println!("RGB8 Frame Draw use time: {:?}", duration);
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
eprintln!("捕获错误: {}", e);
|
eprintln!("捕获错误: {}", e);
|
||||||
|
|
Loading…
Reference in New Issue