feat(main): 添加摄像头和彩色视频输出窗口, 同时支持灰度和RGB图像显示

This commit is contained in:
conglinyizhi 2024-12-07 10:50:29 +08:00
parent 478eaf29be
commit 3e12d0bd6d
1 changed files with 20 additions and 11 deletions

View File

@ -14,10 +14,14 @@ use rscam::{Camera, Config};
fn main() { fn main() {
let mut camera_open = false; let mut camera_open = false;
let app = App::default(); let app = App::default();
let mut wind = Window::new(100, 100, 400, 300, "Hello from rust"); let mut camera_window = Window::new(100, 100, 400, 300, "Camera Video Output Window");
let mut frame = Frame::default_fill(); let mut camera_frame = Frame::default_fill();
wind.end(); camera_window.end();
wind.show(); camera_window.show();
let mut color_window = Window::new(100, 600, 400, 300, "Video Output Window");
let mut color_frame = Frame::default_fill();
color_window.end();
color_window.show();
// app.run().unwrap(); // app.run().unwrap();
// 打开摄像头设备 // 打开摄像头设备
let mut camera = Camera::new("/dev/video0").unwrap(); let mut camera = Camera::new("/dev/video0").unwrap();
@ -44,15 +48,20 @@ fn main() {
Ok(data) => { Ok(data) => {
let start = Instant::now(); let start = Instant::now();
let img = image::load_from_memory(&data).unwrap(); let img = image::load_from_memory(&data).unwrap();
let rgb_data = img.to_luma8(); let l_data = img.to_luma8();
let rgb_data = img.to_rgb8();
if w == 0 { if w == 0 {
w = rgb_data.width() as i32; w = l_data.width() as i32;
h = rgb_data.height() as i32; h = l_data.height() as i32;
} }
let fltk_image = let fltk_l_image =
RgbImage::new(&rgb_data.as_raw(), w, h, ColorDepth::L8).unwrap(); RgbImage::new(&l_data.as_raw(), w, h, ColorDepth::L8).unwrap();
frame.set_image(Some(fltk_image)); let fltk_rgb_image =
frame.redraw(); RgbImage::new(&rgb_data.as_raw(), w, h, ColorDepth::Rgb8).unwrap();
camera_frame.set_image(Some(fltk_l_image));
color_frame.set_image(Some(fltk_rgb_image));
camera_frame.redraw();
color_frame.redraw();
let duration = start.elapsed(); let duration = start.elapsed();
println!("Time elapsed in DrawImage is: {:?}", duration); println!("Time elapsed in DrawImage is: {:?}", duration);
} }