检查图像是否彩色

2023-12-20

我想弄清楚图像是否是彩色的。在this https://stackoverflow.com/questions/2150504/how-can-i-check-the-color-depth-of-a-bitmapStackOverflow问题,有一个回复说我应该检查PixelFormat的枚举Image。不幸的是,我的答复不是很清楚。检查是否安全image.PixelFormat不同于PixelFormat.Format16bppGrayScale考虑到它是彩色图像?枚举的其他值呢? MSDN文档不是很清楚...


您可以通过避免 Color.FromArgb 并迭代字节而不是整数来改进这一点,但我认为这对您来说更具可读性,并且作为一种方法更容易理解。

总体思路是将图像绘制为已知格式的位图(32bpp ARGB), 然后检查该位图是否包含任何颜色。

锁定位图的位允许您比使用 GetPixel(使用不安全代码)更快地迭代其颜色数据许多倍。

如果一个像素的 alpha 为 0,那么它显然是灰度的,因为 alpha 0 意味着它完全不透明。除此之外 - 如果 R = G = B,则它是灰色的(如果它们 = 255,则它是黑色)。

private static unsafe bool IsGrayScale(Image image)
{
    using (var bmp = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppArgb))
    {
        using (var g = Graphics.FromImage(bmp))
        {
            g.DrawImage(image, 0, 0);
        }

        var data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, bmp.PixelFormat);

        var pt = (int*)data.Scan0;
        var res = true;

        for (var i = 0; i < data.Height * data.Width; i++)
        {
            var color = Color.FromArgb(pt[i]);

            if (color.A != 0 && (color.R != color.G || color.G != color.B))
            {
                res = false;
                break;
            }
        }

        bmp.UnlockBits(data);

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

检查图像是否彩色 的相关文章

  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • 对于 C# Express 用户来说,有哪些好的工具可以识别可能重复的代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也可以看看 有什么工具可以检查重复的 VB NET 代码吗 https stackoverflow c
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • 构建 C# MVC 5 站点时项目之间的处理器架构不匹配

    我收到的错误如下 2017 年 4 月 20 日构建 13 23 38 C Windows Microsoft NET Framework v4 0 30319 Microsoft Common targets 1605 5 警告 MSB3
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • .Net Reactive Extensions Framework (Rx) 是否考虑拓扑顺序?

    Net 反应式扩展框架是否按拓扑顺序传播通知以最大限度地减少更新量 就像 Scala Rx 所做的那样 Net 反应式扩展 Rx 是否可以 https github com lihaoyi scala rx wiki How it Work
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调

随机推荐

  • 循环根据 R 中的其他情况创建一个新变量(非常基本)

    我有一个包含三个变量的数据框 ID group and nominated ID 我想知道group that nominated ID属于 我想象对于每种情况 我们都会采取nominated ID 找到它等于的情况ID 然后设置nomin
  • Grails 无法识别 Java 类

    我在 Windows 7 32 位 上使用 Groovy Grails Tool Suite 3 1 0 我一生都无法让 Grails 识别我在 Grails 应用程序的 src java 目录中创建的简单 Java 类 这是我的java类
  • React Native TextInput 不允许输入/文本更改

    我有一个带有 TextInput 和 2 个按钮的组件 1 个按钮递增 其他按钮递减 我在 TextInput 上有一个 onChange 和值 当单击按钮时 值会发生变化 输入中的文本增加或减少 但是通过 TextInput 输入值 它不
  • 在python中给定阈值时有效删除彼此接近的数组

    我使用 python 来完成这项工作 并且在这里非常客观 我想找到一种 pythonic 方法来从数组数组中删除距离阈值彼此接近的 重复项 例如 给出这个数组 5 024 1 559 0 281 6 198 4 827 1 653 6 19
  • 图表上“漂亮”网格线间隔的算法

    我需要一个相当智能的算法来为图形 图表 提供 漂亮的 网格线 例如 假设条形图的值为 10 30 72 和 60 您知道 最小值 10 最大值 72 范围 62 第一个问题是 从什么开始 在这种情况下 0 将是直观的值 但这不适用于其他数据
  • 什么是 Serilog 解构?

    Serilog的目的是什么 syntax 如果我运行以下命令 var dummy new Foo Bar Date DateTime Now Log Information Dummy object Dummy dummy 然后我得到控制台
  • 来自 nginx API 端点的响应“No Access-Control-Allow-Origin”

    我收到的错误似乎是 CORS 问题 我正在尝试通过以下方式向我的 RESTful API 发出 POST 请求HttpClient如下 import Component OnInit from angular core import Obs
  • ITMS-90429:无效的 Swift 支持 - 文件 libswiftDarwin.dylib、libswiftMetal.dylib、

    当我想在 Appstore Connect 上发布我的存档时 我遇到了 Xcode 12 3 swift 5 和 cocoapods 1 10 1 版本的问题 一切都很顺利 但是一旦应用程序发送 我就会收到一封来自 App Store Co
  • 如何初始化标头中的静态成员[重复]

    这个问题在这里已经有答案了 给定的是一个具有静态成员的类 class BaseClass public static std string bstring 字符串显然必须是默认初始化课堂之外 std string BaseClass bst
  • 在 Python pandas 中拆分和连接数据帧以使用 rpy2 进行绘图

    我有一个关于 Python 中的 pandas 数据框的问题 我有一个大数据框df我分成两个子集 df1 and df2 df1 and df2加在一起并不能构成全部df 它们只是它的两个互斥的子集 我想用 rpy2 在 ggplot 中绘
  • JavaScript 中的连接

    由于某种原因 当 keyText 变量应该连接关键字中的每个变量时 它没有显示任何值 当有人单击该按钮时 它会运行 addKeyword 并获取输入的值 尝试 Console Log keyText 变量 但根本不起作用 var keywo
  • SQLLocalDB.exe 信息 - 返回错误代码 15100 等

    我正在尝试解决 LocalDB 的版本问题 命令 sqllocaldb i 似乎有效 C WINDOWS system32 gt sqllocaldb i MSSQL本地数据库 项目V12 但是 当我要求特定的内容时 我只得到错误 我使用的
  • scipy-cluster 定制生成的树状图

    这是后续scipy cluster 生成的树状图不显示 https stackoverflow com q 2967858 188368 from matplotlib pyplot import show from scipy spati
  • 通过html和javascript将文件上传到远程服务器

    我正在尝试通过基于 UNIX 的服务器中的 html 页面上传文件 但我不知道如何在远程服务器上获取文件并在那里保存文件 我写了下面的代码请帮我连接它
  • Firebase 身份验证在 1 小时后过期

    我能够允许用户使用电子邮件和密码登录 Firebase 我按照以下说明进行操作 https firebase google com docs reference rest auth section sign in email passwor
  • 到底什么是“对齐指针”?

    有人可以告诉我什么是对齐指针实际上意味着什么 这意味着所指向的地址可以被某个因子整除 有时使用术语 自然对齐 这通常意味着具有自然对齐的对象需要放置在可被对象大小整除的地址处 对齐有时非常重要 因为许多与硬件相关的事物都对这种对齐设置了限制
  • 如何为不同的页面加载不同的css?

    我正在尝试为我的页面创建不同的样式表 我有一个设置的头文件 然后我就有了我的主体页面 我将有main html project html contact html etc php load different pages for my bo
  • 如何获取未保存的脚本选项卡

    我想知道是否可以在 R studio 中获取未保存的脚本选项卡 我不小心打开并切换到新项目 然后我未保存的脚本消失了 任何人都可以帮助获取我未保存的脚本选项卡 如果您使用的是 Windows 请转到文件夹 C Users your user
  • 使用 DBIx::Class::ResultSet 的 find_or_create 方法时如何避免竞争条件?

    从文档中find or create http search cpan org arodland DBIx Class 0 08196 lib DBIx Class ResultSet pm find or create 注意 因为find
  • 检查图像是否彩色

    我想弄清楚图像是否是彩色的 在this https stackoverflow com questions 2150504 how can i check the color depth of a bitmapStackOverflow问题