首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用.NET ColorMatrix更改颜色?

如何使用.NET ColorMatrix更改颜色?
EN

Stack Overflow用户
提问于 2010-11-28 17:07:15
回答 2查看 1.7K关注 0票数 4

我有一个图像,如果像素(x,y).R < 165,我想将像素设置为白色。

之后,我想将所有不是白色的像素设置为黑色。

我可以使用ColorMatrix来做这件事吗?

EN

回答 2

Stack Overflow用户

发布于 2010-11-28 17:10:12

你不能用colormatrix做到这一点。colormatrix适用于从一种颜色到另一种颜色的线性变换。你需要的不是线性的。

票数 3
EN

Stack Overflow用户

发布于 2010-11-28 21:18:40

完成这些相对简单的图像操作的一个好方法是自己直接获取位图数据。鲍勃·鲍威尔在https://web.archive.org/web/20141229164101/http://bobpowell.net/lockingbits.aspx上写了一篇关于这方面的文章。它解释了如何锁定位图并通过Marshal类访问它的数据。

有这样一个结构是很好的:

代码语言:javascript
复制
[StructLayout(LayoutKind.Explicit)]
public struct Pixel
{
    // These fields provide access to the individual
    // components (A, R, G, and B), or the data as
    // a whole in the form of a 32-bit integer
    // (signed or unsigned). Raw fields are used
    // instead of properties for performance considerations.
    [FieldOffset(0)]
    public int Int32;
    [FieldOffset(0)]
    public uint UInt32;
    [FieldOffset(0)]
    public byte Blue;
    [FieldOffset(1)]
    public byte Green;
    [FieldOffset(2)]
    public byte Red;
    [FieldOffset(3)]
    public byte Alpha;


    // Converts this object to/from a System.Drawing.Color object.
    public Color Color {
        get {
            return Color.FromArgb(Int32);
        }
        set {
            Int32 = Color.ToArgb();
        }
    }
}

只需创建一个新的像素对象,您就可以通过Int32字段设置它的数据,并读取/修改各个颜色分量。

代码语言:javascript
复制
Pixel p = new Pixel();
p.Int32 = pixelData[pixelIndex]; // index = x + y * stride
if(p.Red < 165) {
    p.Int32 = 0; // Reset pixel
    p.Alpha = 255; // Make opaque
    pixelData[pixelIndex] = p.Int32;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4296107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档