在我的灰度图片中,我需要找到特定的值并用一些颜色替换它,例如黄色。这是我现在的代码,但它并不像我需要的那么快。有没有更有效的方法来实现这一目标?关于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);
}
答案 0 :(得分:1)
对于4通道图像,每个像素为4个字节(每个通道8位),您可以使用由row[0]
索引的256个条目查找表,同时将所有四个通道分配为单个32位int
。