static private gaussianConvolution ( double matrix, double deviation ) : ].double[ | ||
matrix | double | |
deviation | double | |
Résultat | ].double[ |
static double[,] gaussianConvolution( double[,] matrix, double deviation )
{
var kernel = calculateNormalized1DSampleKernel( deviation );
var res1 = new double[matrix.GetLength( 0 ), matrix.GetLength( 1 )];
var res2 = new double[matrix.GetLength( 0 ), matrix.GetLength( 1 )];
// x-direction
for( var i = 0; i < matrix.GetLength( 0 ); i++ )
{
for( var j = 0; j < matrix.GetLength( 1 ); j++ )
res1[i, j] = processPoint( matrix, i, j, kernel, 0 );
}
// y-direction
for( var i = 0; i < matrix.GetLength( 0 ); i++ )
{
for( var j = 0; j < matrix.GetLength( 1 ); j++ )
res2[i, j] = processPoint( res1, i, j, kernel, 1 );
}
return res2;
}
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); }