Skip to main content
Code Review

Return to Answer

replaced http://stackoverflow.com/ with https://stackoverflow.com/
Source Link
  • Use a Clr[][] instead of a Clr[,]. See Why are multi-dimensional arrays in .NET slower than normal arrays?
  • Doing the above will let you move sums[i + halfWindow] and sums[i - halfWindow - 1] into variables outside the inner loop.
  • Compute the first row of sums separately to remove the conditional in this line sums[i, j] = i > 0 ? sums[i - 1, j] + sum : sum;
  • Use a Clr[][] instead of a Clr[,]. See Why are multi-dimensional arrays in .NET slower than normal arrays?
  • Doing the above will let you move sums[i + halfWindow] and sums[i - halfWindow - 1] into variables outside the inner loop.
  • Compute the first row of sums separately to remove the conditional in this line sums[i, j] = i > 0 ? sums[i - 1, j] + sum : sum;
Add things to try to improve performance
Source Link
mjolka
  • 16.3k
  • 2
  • 30
  • 73

Other things to try that might improve performance:

  • Use a Clr[][] instead of a Clr[,]. See Why are multi-dimensional arrays in .NET slower than normal arrays?
  • Doing the above will let you move sums[i + halfWindow] and sums[i - halfWindow - 1] into variables outside the inner loop.
  • Compute the first row of sums separately to remove the conditional in this line sums[i, j] = i > 0 ? sums[i - 1, j] + sum : sum;

Other things to try that might improve performance:

  • Use a Clr[][] instead of a Clr[,]. See Why are multi-dimensional arrays in .NET slower than normal arrays?
  • Doing the above will let you move sums[i + halfWindow] and sums[i - halfWindow - 1] into variables outside the inner loop.
  • Compute the first row of sums separately to remove the conditional in this line sums[i, j] = i > 0 ? sums[i - 1, j] + sum : sum;
Clean up code
Source Link
mjolka
  • 16.3k
  • 2
  • 30
  • 73
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;
Source Link
mjolka
  • 16.3k
  • 2
  • 30
  • 73
Loading
lang-cs

AltStyle によって変換されたページ (->オリジナル) /