在 Rust 中确定 DynamicImage 的位深度

2024-02-08

如何确定一个位深度image::DynamicImage生锈了?我在用着fltk-rs https://docs.rs/fltk/0.11.6/fltk/ function https://docs.rs/fltk/0.11.6/fltk/image/struct.RgbImage.html用于创建一个RgbImageand RgbImage::new()要求我指定要从中创建的 Rgb 字节数据的位深度。我在程序中加载的图像具有各种位深度,因此我需要能够动态确定图像的位深度值。

impl RgbImage

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

这是一个典型的用例,我想知道 DynamicImage 的位深度:

image = "0.23.12"
fltk = "0.12.0"
use image::*;
use fltk::*;
//...
let img = image::open("my_img.png").unwrap(); //<---find the bit depth of this loaded image
let (imgx, imgy) = img.dimensions();
let fltk_rgb = RgbImage::new(&img.to_bytes(), imgx, imgy, 4).unwrap(); //<---then use bit depth value here
//...

正如@Ivan C 所说,最简单的方法是使用查找表match陈述。

use image::DynamicImage;

pub fn bit_depth(image: &image::DynamicImage) -> u32 {
    use DynamicImage::*;

    match image {
        ImageLuma8(_) => 1,
        ImageLumaA8(_) => 2,
        ImageRgb8(_) => 3,
        ImageRgba8(_) => 4,
        ImageBgr8(_) => 3,
        ImageBgra8(_) => 4,
        ImageLuma16(_) => 2,
        ImageLumaA16(_) => 4,
        ImageRgb16(_) => 6,
        ImageRgba16(_) => 8,
    }
}

也就是说,你必须要小心一点。 FLTK 对位深度对每个像素中颜色顺序的影响做出了一些假设(记录在案)here https://www.fltk.org/doc-1.3/classFl__RGB__Image.html,特别注意它假定 RGB 颜色顺序并将拒绝任何位深度 >4)。最好创建一个需要DynamicImage并在必要时将其转换为适当的 FLTK 兼容表示形式imagecrate(本质上是 ImageLuma8、ImageLumaA8、ImageRgb8 或 ImageRgba8 之一),然后对生成的图像类型的位深度进行硬编码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Rust 中确定 DynamicImage 的位深度 的相关文章

随机推荐

  • python 中的 Mechanizer - 选择没有名称的表单字段

    我有一个类似的问题选择机械化表单中的未命名文本字段 python https stackoverflow com questions 4787907 selecting an unnamed text field in a mechaniz
  • 使用 C++11 基于范围的正确方法是什么?

    使用 C 11 基于范围的正确方法是什么for 应该使用什么语法 for auto elem container or for auto elem container or for const auto elem container 或者其
  • SQL Server 不区分大小写的排序规则

    在 SQL Server 中使用不区分大小写的排序规则有哪些优点 缺点 就查询性能而言 我有一个数据库当前正在使用不区分大小写的排序规则 但我不太喜欢它 我非常想将其更改为区分大小写 更改排序规则时应该注意什么 如果更改数据库上的排序规则
  • 需要有关奇怪的 java.net.HttpURLConnection 行为的帮助

    我正在尝试使用 HttpURLConnection 下载 jpg 但遇到了一个非常奇怪的错误 这是网址 http www vh1 com sitewide promoimages shows m my antonio video super
  • 如何在 angularjs 中添加悬停元素的延迟?

    我有一个元素 span Hover Me span div class outerDiv p Some content p div class innerDiv p More Content p div div 这是JS mouseente
  • 即使安装包后,R 也找不到包

    我一直与zoo包 我很久以前就安装了 今天 我创建了一个新的 R 脚本 并运行library zoo 并得到以下错误 gt library zoo Error in library zoo there is no package calle
  • 暴力破解 PBKDF2 的速度大约有多快?

    在 linkedin 密码哈希泄露之后 我一直在研究我们的密码哈希 我们使用 Django 1 4 它使用 PBKDF2 这很棒 比之前的 SHA1 更进一步 然而我很好奇人们如何轻松地暴力破解这一点 我正在查看我们的密码复杂性规则 并且想
  • 使用 ES6 类的快速路由

    因此 以下代码在开发中有效 但在生产环境中运行时失败 并出现错误TypeError Router use requires middleware function but got a Object 到目前为止 我一定已经尝试了大约一百种不同
  • 从结构体数组中删除元素

    这可能是一个超级简单的问题 但它是 我有一个 结构数组 以及一个要删除的结构数组索引向量 例如 如果我有一个删除向量 2 6 这意味着我想删除数组中的第二个和第六个结构 并且数组将短 2 个元素 干净 简单的 matlab 方法是什么 如果
  • 在 JavaScript 中,如何在超时中包装承诺?

    使用 deferred promise 实现某些异步函数的超时是一种常见的模式 Create a Deferred and return its Promise function timeout funct args time var df
  • 如何在 geom_dotplot 中使用颜色?

    我有这个点图 ggplot mpg aes drv hwy geom dotplot binwidth 1 binaxis y stackdir center 呈现为 我想按制造商对点进行着色 如果我添加一个fill审美的 ggplot m
  • 在没有故事板的情况下创建和执行 Segue

    我有一个没有故事板的应用程序 所有 UI 创建都是用代码完成的 我得到了splitView我想让它在 iPhone 上使用 因为该应用程序最初是为 iPad 设计的 因此当您在主视图中选择列表中的一行时 它在 iPhone 上不会执行任何操
  • 为什么 Z3 中的运算符“/”和“div”给出不同的结果?

    我试图用两个整数来表示一个实数 并将它们用作实数的分子和分母 我写了以下程序 declare const a Int declare const b Int declare const f Real assert f a b assert
  • Visual Studio 2012 - 数据库项目 - 设置默认的发布配置文件

    只是想知道是否有人知道如何将保存的发布配置文件设置为默认配置文件 即当我选择发布时自动加载的配置文件 我喜欢新的配置文件方法 但在开发过程中我有点不愿意一遍又一遍地重新选择相同的配置文件 在 VS2012 及更高版本中 您可以通过右键单击
  • Tensorflow 模型导入到 Java

    我一直在尝试在 Java 中导入和使用我训练过的模型 Tensorflow Python 我能够在 Python 中保存模型 但当我尝试在 Java 中使用相同的模型进行预测时遇到问题 Here https gist github com
  • 在 IB 中使用自动布局,如何以编程方式将 UIView 放置在屏幕中央?

    我有一个 UIView 我想在主视图上水平居中 然后在主视图上垂直居中 减去大约 14 像素 如果我用 IB 设置它 它可以在 Retina 3 5 上运行 但在 Retina 4 上运行时 它当然会偏离大约 40 像素 我认为最好的解决方
  • 请求被中止:无法创建 SSL/TLS 安全通道。

    我想实现 Paypal dodirect 方法 让用户可以直接在我的网站上付款 而不是重定向到用户 因此我已将此 URL 添加为https www sandbox paypal com wsdl PayPalSvc wsdl https w
  • 安全注意事项 - ChromeDriver - Chrome 的 Webdriver

    我想知道是否有人了解有关此声明所涉及的使用 chromedriver 的具体风险的更多信息 如果可能 请使用无法访问敏感本地或网络数据的测试帐户运行 ChromeDriver ChromeDriver 永远不应该使用特权帐户运行 想知道使用
  • 如何开始使用 Delphi 创建我自己的类?

    我已经发布一个问题 https stackoverflow com questions 11270972 declare locally or globally in delphi几天前 答案告诉我创建自己的课程 我是一名来自 OOP 时代
  • 在 Rust 中确定 DynamicImage 的位深度

    如何确定一个位深度image DynamicImage生锈了 我在用着fltk rs https docs rs fltk 0 11 6 fltk function https docs rs fltk 0 11 6 fltk image