【问题标题】:C# remove all but two least significant bits of colorC# 删除除两个最低有效位之外的所有颜色
【发布时间】:2011-08-13 19:53:05
【问题描述】:

this 页面上,查看树的图片及其标题。我正计划为Paint.NET 实现一个插件来做到这一点......但我不确定如何。

我已经以ColorBgra(可以转换为System.Drawing.Color)的形式循环遍历每个像素(对于那些想知道的人,Paint.NET API 可以提高效率),但现在我需要修改像素以删除“除了每种颜色的两个最低有效位之外的所有位。”

我该怎么做?

【问题讨论】:

    标签: c# math colors


    【解决方案1】:

    对于每个组件(R、G、B、A),您需要屏蔽掉不需要的位,如下所示:

    colour.R &= 3;
    colour.G &= 3;
    colour.B &= 3;
    colour.A &= 3;
    

    【讨论】:

    • 效果很好!虽然...您能否就 3 的含义提供更多解释...以及我将如何删除其他位?
    • 3 是两个最低有效位之和:0x00000011 == 3
    • 要删除其他位,您可以简单地打开或关闭它们:位 7 是 0x01000000,位 3 是 0x00000100,位 1,3,5,7 是 0x01010101
    • 小心;在 C# 中 0x... 表示十六进制,其中 3 == 0x03(和 15 == 0x0F 等)
    • 如果您需要在某个时间点对System.Drawing.Color 对象执行此操作,则需要执行Color NewColor = Color.FromArgb(baseColor.A & 3,baseColor.R & 3,baseColor.G & 3,baseColor.B & 3);,因为此处的 A、R、G 和 B 是只读属性。
    猜你喜欢
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 2010-09-13
    • 2011-04-13
    • 2015-09-24
    • 1970-01-01
    相关资源
    最近更新 更多