You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Rust实现多屏幕合并截图(替代分屏单独截图)

合并多屏幕截图为单张图片的Rust实现

要实现多屏幕截图合并,你需要借助image库处理图像拼接,步骤如下:

1. 添加依赖

在Cargo.toml中添加所需的crates:

[dependencies]
screenshots = "0.7.0"
image = "0.24.7"

2. 完整实现代码

use screenshots::Screen;
use image::{ImageBuffer, Rgba, Pixel};
use std::fs;

fn main() {
    // 获取所有屏幕信息
    let screens = Screen::all().expect("无法获取屏幕信息");

    // 计算合并后画布的边界:包含所有屏幕的最小/最大坐标
    let min_x = screens.iter().map(|s| s.x()).min().unwrap();
    let min_y = screens.iter().map(|s| s.y()).min().unwrap();
    let max_x = screens.iter().map(|s| s.x() + s.width()).max().unwrap();
    let max_y = screens.iter().map(|s| s.y() + s.height()).max().unwrap();

    // 计算画布总尺寸
    let total_width = (max_x - min_x) as u32;
    let total_height = (max_y - min_y) as u32;

    // 创建空白画布,RGBA格式
    let mut combined_image = ImageBuffer::from_pixel(total_width, total_height, Rgba([0, 0, 0, 0]));

    // 遍历每个屏幕,将截图绘制到对应位置
    for screen in screens {
        // 截取当前屏幕图像
        let capture = screen.capture().expect("无法截取屏幕");
        // 将截图转换为ImageBuffer(RGBA格式)
        let screen_image: ImageBuffer<Rgba<u8>, _> = ImageBuffer::from_raw(
            screen.width() as u32,
            screen.height() as u32,
            capture.buffer().to_vec()
        ).expect("图像格式转换失败");

        // 计算当前屏幕在画布中的起始坐标
        let start_x = (screen.x() - min_x) as u32;
        let start_y = (screen.y() - min_y) as u32;

        // 将屏幕图像的每个像素复制到画布对应位置
        for (x, y, pixel) in screen_image.enumerate_pixels() {
            combined_image.put_pixel(start_x + x, start_y + y, *pixel);
        }
    }

    // 保存合并后的图像
    combined_image.save("combined_screenshot.png").expect("无法保存图像");
    println!("合并截图已保存为combined_screenshot.png");
}

代码说明

  • 边界计算:通过获取所有屏幕的坐标极值,确保画布能完整容纳所有屏幕内容,即使屏幕排列不是从(0,0)开始(比如副屏在主屏左侧)。
  • 图像拼接:将每个屏幕的截图转换为image库的ImageBuffer,逐像素复制到画布对应位置,保证屏幕内容的位置和实际显示一致。
  • 错误处理:使用expect替代unwrap,在出现问题时给出更明确的错误提示,你也可以根据需求换成match进行更精细的错误处理。

内容的提问来源于stack exchange,提问作者Ali Awad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:15:51