- Use a
Clr[][]
instead of aClr[,]
. See Why are multi-dimensional arrays in .NET slower than normal arrays? Why are multi-dimensional arrays in .NET slower than normal arrays? - Doing the above will let you move
sums[i + halfWindow]
andsums[i - halfWindow - 1]
into variables outside the inner loop. - Compute the first row of
sums
separately to remove the conditional in this linesums[i, j] = i > 0 ? sums[i - 1, j] + sum : sum;
- Use a
Clr[][]
instead of aClr[,]
. See Why are multi-dimensional arrays in .NET slower than normal arrays? - Doing the above will let you move
sums[i + halfWindow]
andsums[i - halfWindow - 1]
into variables outside the inner loop. - Compute the first row of
sums
separately to remove the conditional in this linesums[i, j] = i > 0 ? sums[i - 1, j] + sum : sum;
- Use a
Clr[][]
instead of aClr[,]
. See Why are multi-dimensional arrays in .NET slower than normal arrays? - Doing the above will let you move
sums[i + halfWindow]
andsums[i - halfWindow - 1]
into variables outside the inner loop. - Compute the first row of
sums
separately to remove the conditional in this linesums[i, j] = i > 0 ? sums[i - 1, j] + sum : sum;
Other things to try that might improve performance:
- Use a
Clr[][]
instead of aClr[,]
. See Why are multi-dimensional arrays in .NET slower than normal arrays? - Doing the above will let you move
sums[i + halfWindow]
andsums[i - halfWindow - 1]
into variables outside the inner loop. - Compute the first row of
sums
separately to remove the conditional in this linesums[i, j] = i > 0 ? sums[i - 1, j] + sum : sum;
Other things to try that might improve performance:
- Use a
Clr[][]
instead of aClr[,]
. See Why are multi-dimensional arrays in .NET slower than normal arrays? - Doing the above will let you move
sums[i + halfWindow]
andsums[i - halfWindow - 1]
into variables outside the inner loop. - Compute the first row of
sums
separately to remove the conditional in this linesums[i, j] = i > 0 ? sums[i - 1, j] + sum : sum;
var output = new Bitmap(input);
var sums = new Clr[input.Height, input.Width];
for (var i = 0; i < input.Height; i++)
{
var sum = new Clr();
for (var j = 0; j < input.Width; j++)
{
sum += Clr.FromColor(outputinput.GetPixel(j, i));
sums[i, j] = i > 0 ? sums[i - 1, j] + sum : sum;
}
}
var denominatoroutput = new Bitmap(input);
var windowArea = windowSize * windowSize;
var halfWindow = (windowSize - 1) / 2;
for (var i = windowSize - 1; i < input.Height - windowSize; i++)
{
for (var j = windowSize - 1; j < input.Width - windowSize; j++)
{
var clr = sums[i + halfWindow, j + halfWindow] -
sums[i - halfWindow - 1, j + halfWindow] -
sums[i + halfWindow, j - halfWindow - 1] +
sums[i - halfWindow - 1, j - halfWindow - 1];
output.SetPixel(j, i, (clr / denominatorwindowArea).ToColor());
}
}
return output;
var output = new Bitmap(input);
var sums = new Clr[input.Height, input.Width];
for (var i = 0; i < input.Height; i++)
{
var sum = new Clr();
for (var j = 0; j < input.Width; j++)
{
sum += Clr.FromColor(output.GetPixel(j, i));
sums[i, j] = i > 0 ? sums[i - 1, j] + sum : sum;
}
}
var denominator = windowSize * windowSize;
var halfWindow = (windowSize - 1) / 2;
for (var i = windowSize - 1; i < input.Height - windowSize; i++)
{
for (var j = windowSize - 1; j < input.Width - windowSize; j++)
{
var clr = sums[i + halfWindow, j + halfWindow] -
sums[i - halfWindow - 1, j + halfWindow] -
sums[i + halfWindow, j - halfWindow - 1] +
sums[i - halfWindow - 1, j - halfWindow - 1];
output.SetPixel(j, i, (clr / denominator).ToColor());
}
}
return output;
var sums = new Clr[input.Height, input.Width];
for (var i = 0; i < input.Height; i++)
{
var sum = new Clr();
for (var j = 0; j < input.Width; j++)
{
sum += Clr.FromColor(input.GetPixel(j, i));
sums[i, j] = i > 0 ? sums[i - 1, j] + sum : sum;
}
}
var output = new Bitmap(input);
var windowArea = windowSize * windowSize;
var halfWindow = (windowSize - 1) / 2;
for (var i = windowSize - 1; i < input.Height - windowSize; i++)
{
for (var j = windowSize - 1; j < input.Width - windowSize; j++)
{
var clr = sums[i + halfWindow, j + halfWindow] -
sums[i - halfWindow - 1, j + halfWindow] -
sums[i + halfWindow, j - halfWindow - 1] +
sums[i - halfWindow - 1, j - halfWindow - 1];
output.SetPixel(j, i, (clr / windowArea).ToColor());
}
}
return output;
lang-cs