Rust 确定锈蚀动态图像的钻头深度

Rust 确定锈蚀动态图像的钻头深度,rust,Rust,如何确定rust中image::DynamicImage的位深度?我正在使用创建一个RgbImage,RgbImage::new()要求我指定要从中创建的Rgb字节数据的位深度。我在程序中加载的图像具有不同的位深度,因此我需要能够动态地确定图像的位深度值 impl RgbImage pub fn new( data: &[u8], w: u32, h: u32, depth: u32 ) -> Result<RgbImage, FltkErr

如何确定rust中
image::DynamicImage
的位深度?我正在使用创建一个
RgbImage
RgbImage::new()
要求我指定要从中创建的Rgb字节数据的位深度。我在程序中加载的图像具有不同的位深度,因此我需要能够动态地确定图像的位深度值

impl RgbImage

pub fn new(
    data: &[u8],
    w: u32,
    h: u32,
    depth: u32
) -> Result<RgbImage, FltkError>

使用图像::*;
使用fltk::*;
//...

让img=image::open(“my_img.png”).unwrap()// 正如@Ivan C所说,最简单的方法是在
match
语句中使用查找表

使用image::DynamicImage;
发布fn位深度(图像:&图像::动态图像)->u32{
使用DynamicImage::*;
匹配图像{
ImageLuma8()=>1,
ImageLumaA8()=>2,
图像RGB8()=>3,
ImageRgba8()=>4,
ImageBgr8()=>3,
ImageBgra8()=>4,
ImageLuma16()=>2,
ImageLumaA16()=>4,
图像RGB16()=>6,
ImageRgba16()=>8,
}
}


也就是说,你得小心一点。FLTK对每个像素中的位深度表示的颜色顺序进行了一些假设(有文档记录,特别注意,它假设RGB颜色顺序,并将拒绝任何大于4的位深度)。最好创建一个函数,该函数采用
动态图像
,并在必要时将其转换为
图像
板条箱中适当的FLTK兼容表示形式(基本上是ImageLuma8、ImageLuma8、ImageRgb8或ImageRgba8中的一种),然后对结果图像类型的位深度进行硬编码。

DynamicImage
有一种获取颜色类型的方法,该方法本身有一种方法:


DynamicImage
是一个枚举,您可以对其进行
match
。@ivac按位深度匹配?
image = "0.23.12"
fltk = "0.12.0"
img.color().bytes_per_pixel()