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