public static Color[] createBlurredGrayscaleTexture( Color[] srcData, int width, int height, double deviation = 1 )
{
var destData = new Color[width * height];
var matrix = new double[width, height];
// first we calculate the grayscale and store it in matrix
for( var i = 0; i < width; i++ )
{
for( var j = 0; j < height; j++ )
matrix[i, j] = srcData[i + j * width].grayscale().R;
}
matrix = GaussianBlur.gaussianConvolution( matrix, deviation );
for( var i = 0; i < width; i++ )
{
for( var j = 0; j < height; j++ )
{
var val = (int)Math.Min( 255, matrix[i, j] );
destData[i + j * width] = new Color( val, val, val, srcData[i + j * width].A );
}
}
return destData;
}