在我的灰度图片中,我需要找到特定的值并用一些颜色替换它,例如黄色.这是我现在的代码,但它并不像我需要的那么快.有没有更有效的方法来实现这一目标?我对
ColorMatrix Class有所了解,但是没有找到替换单个值而不影响整个图像的方法.
unsafe { byte stlThres = 115; int bytePerPixel = Image.GetPixelFormatSize(kpImageViewer1.Image.PixelFormat) / 8; var data = kpImageViewer1.Image.LockBits(new Rectangle(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位),您可以使用由行[0]索引的256个条目查找表,并将所有四个通道同时分配为单个32位INT.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。