比較 GDI+ 使用的 GetPixel/SetPixel,讓你立馬感覺這世界多美妙。
再來一個中值濾波操作:
/// 中值濾波
///
public void MedianFilter(int dgGrayValue)
{
byte s;
byte[] p = new byte[9];
int i, j, x, y, Stride;
unsafe
{
byte* point = (byte*)this.ImageData.Scan0;
Stride = this.ImageData.Stride;
point = point + 3 + this.ImageData.Stride;
for (i = 0; i < this.ImageData.Height - 1; i++)
{
for (j = 0; j < this.ImageData.Width - 1; j++)
{
p[0] = *(point - Stride - 1);
p[1] = *(point - Stride + 2);
p[2] = *(point - Stride + 5);
p[3] = *(point - 1);
p[4] = *(point + 2);
p[5] = *(point + 5);
p[6] = *(point + Stride - 1);
p[7] = *(point + Stride + 2);
p[8] = *(point + Stride + 5);
for (x = 0; x < 5; x++)
{
for (y = x + 1; y < 9; y++)
{
if (p[x] > p[y])
{
s = p[x]; p[x] = p[y]; p[y] = s;
}
}
}
*point = p[4];
*(point - 1) = p[4];
*(point - 2) = p[4];
point += 3;
}
point += Stride - this.ImageData.Width * 3;
}
}
}