图像过滤器可让您对图像中的像素执行操作。这是一个相当大的示例,因此您可能需要花一些时间浏览代码。
在一种图像滤镜中,您有一个称为滤镜内核的值数组。对于图像中的每个像素,您将内核置于该像素的中心。然后将内核下的每个像素的值乘以相应的内核值。将它们相加,除以“权重”值,并可选地添加偏移量以使结果看起来更好。(例如,浮雕滤镜往往会使结果非常暗。您可以添加 127 的偏移量以将结果移动到几乎中性的值。)这些计算的结果为您提供了中心像素的新值。
要处理颜色,只需分别处理红色、绿色和蓝色颜色成分。
此示例演示了几种滤镜。该程序基于示例使用 Bitmap32 类在 C# 中快速操作图像像素。该示例展示了如何构建 Bitmap32 类以快速操作位图。
此示例向Bitmap32类 添加了一些内容。首先,它添加了一个公共Filter类来表示过滤器。以下代码显示了该类的字段。
// A public class to represent filters.
public class Filter
{public float[,] Kernel;public float Weight, Offset;// Set the filter's weight equal to the sum// of the kernel's values.public void Normalize() ...// Set the value of the center kernel coefficient// so the kernel has a zero total.public void ZeroKernel() ...
}
Filter类提供了两种可用于构建某些类型的内核的方法:Normalize和ZeroKernel。Normalize方法将内核值相加,并将过滤器的权重设置为总和。ZeroKernel方法设置内核的中心条目,使所有内核值的总和为 0。这些方法很简单,因此这里就不展示了。下载示例以查看详细信息。
<