自学内容网 自学内容网

rust - 将bitmap位图文件另存为png格式

本文提供了一种将bitmap位图文件另存为png格式文件的方法。

添加依赖

cargo add image

转换函数

use image::{
    codecs::png::PngEncoder, GenericImageView, ImageEncoder, ImageFormat,
    ImageResult,
};
use std::{
    fs,
    io::{BufReader, BufWriter},
    path::Path,
};

/// 将bitmap位图转换为png格式
pub fn to_png(bitmap_path: &Path, png_path: &Path) -> ImageResult<()> {
    // 读取位图文件
    let bitmap_fs = fs::File::open(bitmap_path).expect("Read bitmap");
    let buf_reader = BufReader::new(bitmap_fs);
    let img = image::load(buf_reader, ImageFormat::Bmp).unwrap();

    // 创建png空文件
    let png_file = fs::File::create(png_path)?;
    let ref mut buff = BufWriter::new(png_file);
    let encoder = PngEncoder::new(buff);

    // 转换并写png文件
    encoder.write_image(
        &img.as_bytes().to_vec(),
        img.dimensions().0,
        img.dimensions().1,
        img.color().into(),
    )
}

单元测试

use core_utils::image::bitmap;
use std::env;

#[test]
fn test_to_png() {
    // 读取bitmpa文件
    let bitmap_path = env::current_dir().unwrap().join("tests/test-image.bmp");

    // 保存png文件
    let png_path = env::current_dir().unwrap().join("tests/test-image.png");
    bitmap::to_png(bitmap_path.as_path(), png_path.as_path()).unwrap();
}

原文地址:https://blog.csdn.net/liuyuan_jq/article/details/136996661

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!