C# - 如何将图像转换为 8 位彩色图像?

2023-12-13

我需要将从文件加载的 PNG 图像转换为另一个设备使用的每像素 8 位字节数组(嵌入式编程)。

我正在逐像素复制到使用 16 位颜色创建的新图像中 -Format16bppRgb565, 但是我需要Format8bpp,.NET Framework 中不存在。 (我不能使用Format8bppIndexed因为其他设备无法处理索引位图)

 Bitmap img = new Bitmap(imgPath);
 Bitmap img8 = new Bitmap(imgW, imgH, PixelFormat.Format16bppRgb565);
 for (int I = 0; I <= img.Width - 1; I++) {
     for (int J = 0; J <= img.Height - 1; J++) {
         img8.SetPixel(I, J, img.GetPixel(I, J));
     }
 }

那么如何将图像转换为每像素 8 位的字节数组呢?

  • 我可以使用 8 位索引格式并提取字节吗? -Format8bppIndexed
  • 我可以通过将 32 位颜色 R、G、B 值减少到 8 位来计算像素颜色吗?
  • 是否有 C# 库可以执行此操作?
  • “最简单的方法是创建一个新的 8 位位图,并在其上绘制 24 位图像。” - 如何?

虽然我不确定如何使用普通的 C# 来做到这一点,但你可以使用免费图像项目转换图像格式的库:

FreeImage 是一个开源库 适合想要的开发人员的项目 支持流行的图形图像 PNG、BMP、JPEG、TIFF 等格式 当今多媒体所需的其他内容 应用程序。 FreeImage 很容易 使用,快速,多线程安全, 与所有 32 位版本兼容 Windows 和跨平台(工作 适用于 Linux 和 Mac OS X)。

它是用 C++ 编写的,但有可供您使用的优秀 .NET 包装器。

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

C# - 如何将图像转换为 8 位彩色图像? 的相关文章

随机推荐

  • 更新推送证书并保持当前 App Store 应用程序正常运行

    我在应用程序商店中有一个应用程序 它使用的 iOS 配置文件 分发 已过期 此配置文件包含也已过期的推送证书 并且不再出现在门户中 问题1 有没有办法重新创建推送证书然后更新配置文件 我的钥匙串上仍然有推送证书 已过期 问题2 我是否需要使
  • 如何用 python 检测 firebase child 的变化?

    我在使用这个应用程序时遇到了一些问题 我需要的是 如果我检测到数据库 FIREBASE 中的更改 特别是 sala 和 ventilacion 节点中的更改 该函数就会执行它必须执行的操作 如果数据库中没有任何更改 它不会执行任何操作 我正
  • git 复制特定版本的存储库

    我是 git 新手 所以如果这是一个愚蠢的问题 请原谅我 我有一个 git 存储库 我需要将存储库的特定修订版复制到其自己的单独目录中 复制的版本本身不需要是 git 存储库 我不需要或想要历史记录或 git 文件夹 只是特定提交的存储库的
  • 从现有表中过滤 SQL DDL 语句的列名称

    是否可以在 psql 中过滤列名本身 我想在一个单独的模式 伪代码 中生成原始表的有限版本 具有数百列 create table why am i doing this select from original table where co
  • 在Python中检测白色背景上的物体

    我正在尝试使用 Python 来检测白色表面上有多少个物体 示例图像位于本文末尾 我想知道应该如何做到这一点 主要是因为背景是白色的 并且大多数时候它被检测为前景 基于本教程 我现在在 Python 中拥有的内容 http pythonvi
  • 在谷歌脚本中将谷歌电子表格转换为xls [重复]

    这个问题在这里已经有答案了 可能的重复 Google Apps 脚本通过电子邮件发送 Google 电子表格 Excel 版本 我到处寻找这个但无法让它工作 我正在发送一封电子邮件 其中包含谷歌应用程序脚本中的附件 该文档是一个谷歌电子表格
  • C 中的 FILE 关键字到底是什么?

    我已经开始学习一些 C 作为一种爱好 并且已经盲目地使用 FILE 作为文件指针的声明相当长一段时间了 我一直在想 这是 C 用来处理文件的关键字或特殊数据类型吗 它是否包含文件内的流和其他数据 为什么定义为指针呢 举一个例子来说明我的意思
  • jQuery - 在文本后添加元素

    我有一个带有一些链接的导航 ul class nav li a class active linkname a li li li ul 现在我需要直接在 linkname 之后添加额外的内容 如下所示 ul class nav li a c
  • 当我的应用程序被删除时呼叫状态更改网络服务

    在我的应用程序中 我使用网络服务 当用户登录到我的应用程序时 我的应用程序发送状态为 1 的请求意味着已登录 当单击注销按钮时 单击发送状态为 0 的请求 现在的问题是 当用户从设备中删除应用程序时 我的服务器中的状态保持为 1 登录 因此
  • 我创建了一个自定义 powershell .psm1 模块,但编辑后它不会更新

    我在中创建了一个自定义的powershell模块 C Program Files WindowsPowerShell Modules PennoniAppManagement目录 每当我对模块中的函数进行更改 然后将模块导入到脚本中时 更新
  • AllowHtml 不适用于 ASP.Net Mvc 3 站点

    我们尝试在 ViewModel 属性之一上使用 AllowHtml 装饰 以便避免 YSOD 从以下位置检测到潜在危险的 Request Form 值 客户端 请求文本 br 当我们尝试提交 html 文本时 例如 br 然后我们希望在控制
  • PushBots 应用程序崩溃

    我正在制作一个 Android 应用程序 它使用 PushBots 来使用推送通知服务 我想要做的是 当我收到推送通知时 我想将消息保存在 TextView 中 以便我可以拥有所有收到消息的历史记录 我做了 PushBots 网站上写的所有
  • 如何使用 Orion 在传出通知中添加自定义标头?

    我阅读了 自定义通知 部分NGSv2 规范我仍然对如何进行这项工作存有疑问 我是否必须将以下代码作为有效负载放入订阅 POST 中 httpCustom url http foo com entity id headers Content
  • 如何从文件中删除与正则表达式不匹配的行?

    我有一个大文件 如下所示 7f0c41d6 f9c6 47aa a034 d40bc629c973 csv 159890 159891 24faaed6 62ee 4175 8430 5d73b09911c8 csv 159907 5bad
  • 如何在后台启动 PhantomJS + Selenium 窗口?

    我在我的应用程序中使用 selenium phantomjs 但我想在后台启动我的应用程序 selenium 和 phantomjs 窗口 我该怎么做 I tried PhantomJSOptions options new Phantom
  • 从 S3 传输到 Google 存储 - 密钥不正确

    过去几个小时我一直在尝试设置从 S3 到我的谷歌存储桶的传输 创建传输时 我不断收到的错误是 访问密钥无效 请确保 S3 存储桶的访问密钥正确 或将存储桶权限设置为授予所有人 访问密钥和秘密都是正确的 因为它们当前在生产中用于 S3 完全访
  • 一组中的 d3 矩形干扰另一组中的矩形

    我有一个小组叫groove它有两个矩形 这些与数据无关 我也有一个群叫group其中有许多与数据绑定的矩形 在第二组中称为group只有三个数据点 但只显示两个 为什么第一个没有被渲染 我以前见过这个 但不记得如何解决 var margin
  • JavaScript 绑定问题

    这是让我感到困惑的代码片段 var timer start function var self this Why the code below doesn t write to this window setInterval self ti
  • 模板类的 CUDA 链接器错误

    在 ubuntu 上使用 CUDA 5 0 和 gcc g 4 6 在使用模板链接 CUDA 代码时遇到错误 cu array cu include cu array hpp template
  • C# - 如何将图像转换为 8 位彩色图像?

    我需要将从文件加载的 PNG 图像转换为另一个设备使用的每像素 8 位字节数组 嵌入式编程 我正在逐像素复制到使用 16 位颜色创建的新图像中 Format16bppRgb565 但是我需要Format8bpp NET Framework