private void Calculate ()
{
int multiply;
if (contrast < 0) {
multiply = contrast + 100;
divide = 100;
} else if (contrast > 0) {
multiply = 100;
divide = 100 - contrast;
} else {
multiply = 1;
divide = 1;
}
if (rgbTable == null)
rgbTable = new byte[65536];
if (divide == 0) {
for (var intensity = 0; intensity < 256; intensity++) {
if (intensity + brightness < 128)
rgbTable[intensity] = 0;
else
rgbTable[intensity] = 255;
}
} else if (divide == 100) {
for (var intensity = 0; intensity < 256; intensity++) {
var shift = (intensity - 127) * multiply / divide + 127 - intensity + brightness;
for (var col = 0; col < 256; ++col) {
var index = (intensity * 256) + col;
rgbTable[index] = Utility.ClampToByte (col + shift);
}
}
} else {
for (var intensity = 0; intensity < 256; ++intensity) {
var shift = (intensity - 127 + brightness) * multiply / divide + 127 - intensity;
for (var col = 0; col < 256; ++col) {
var index = (intensity * 256) + col;
rgbTable[index] = Utility.ClampToByte (col + shift);
}
}
}
}
#endregion