public static Color[] createBlurredTexture( Color[] srcData, int width, int height, double deviation = 1 )
{
var matrixR = new double[width, height];
var matrixG = new double[width, height];
var matrixB = new double[width, height];
var matrixA = new double[width, height];
var destData = new Color[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++ )
{
matrixR[i, j] = srcData[i + j * width].R;
matrixG[i, j] = srcData[i + j * width].G;
matrixB[i, j] = srcData[i + j * width].B;
matrixA[i, j] = srcData[i + j * width].A;
}
}
matrixR = GaussianBlur.gaussianConvolution( matrixR, deviation );
matrixG = GaussianBlur.gaussianConvolution( matrixG, deviation );
matrixB = GaussianBlur.gaussianConvolution( matrixB, deviation );
matrixA = GaussianBlur.gaussianConvolution( matrixA, deviation );
for( var i = 0; i < width; i++ )
{
for( var j = 0; j < height; j++ )
{
var r = (int)Math.Min( 255, matrixR[i, j] );
var g = (int)Math.Min( 255, matrixG[i, j] );
var b = (int)Math.Min( 255, matrixB[i, j] );
var a = (int)Math.Min( 255, matrixA[i, j] );
destData[i + j * width] = new Color( r, g, b, a );
}
}
return destData;
}