在位图/图像中替换特定颜色的有效方法

本文关键字:颜色 有效 方法 替换 位图 图像 | 更新日期: 2023-09-27 18:03:37

在我的灰度图中,我需要找到特定的值并将其替换为一些颜色,例如黄色。这是我现在的代码,但它没有我需要的那么快。有什么更有效的方法来实现这一点吗?我已经红色关于ColorMatrix类,但无法找到方法来取代单一值而不影响整个图像。

unsafe
{
    byte stlThres = 115;
    int bytePerPixel = Image.GetPixelFormatSize(kpImageViewer1.Image.PixelFormat) / 8;
    var data = kpImageViewer1.Image.LockBits(new Rectangle(0, 0, kpImageViewer1.Image.Width, kpImageViewer1.Image.Height), ImageLockMode.WriteOnly, kpImageViewer1.Image.PixelFormat);
    for (int y = 0; y < data.Height; y++)
    {
        byte* row = (byte*)data.Scan0 + (y * data.Stride);
        for (int x = 0; x < data.Width; x++, row += bytePerPixel)
        {
            if (row[0] == stlThres)
            {
                row[0] = 0; //b
                row[1] = 255; //g
                row[2] = 255; //r
                if (bytePerPixel == 4)
                {
                    row[3] = 255; //a
                }
            }
        }
    }
    kpImageViewer1.Image.UnlockBits(data);
}

在位图/图像中替换特定颜色的有效方法

对于4通道图像,其中每个像素是4字节(每个通道8位),您可以使用由row[0]索引的256项查找表,并将所有四个通道同时分配为单个32位int