Здравствуйте, gok, Вы писали:
К>>Что это за мрачная формула: x*(2^8-1)/(2^16-1) — в чём её серемяжный смысл?
gok>Из либтифф-а, загоняет целые значения для цвета. gok>Спасибо большое за помощь!
Аааа. Я понял. Имеется в виду, что на входе 16 бит на цвет (или на градации серого), а в TIFF — только 8. И нужно сделать постеризацию.
Есть два способа сделать это:
1) просто выкинуть младший байт и расслабиться
2) выполнить пересчёт: [0..2^16-1] равномерно отобразить на [0..2^8-1] — что мы и наблюдаем в формуле
Здравствуйте, gok, Вы писали:
gok>Здравствуйте, Кодт, Вы писали:
К>>2) выполнить пересчёт: [0..2^16-1] равномерно отобразить на [0..2^8-1] — что мы и наблюдаем в формуле
gok>
gok>Вне темы, «спортивного ради…»: почему бы этот коэф не подсчитать один раз на всю жизнь? Или это выигрышь в вычислении целых?
А компилятор на что?? )) Тем более так, вроде, нагляднее чем МАГИЧЕСКИЕ числа. ))
Здравствуйте, Кодт, Вы писали:
К>2) выполнить пересчёт: [0..2^16-1] равномерно отобразить на [0..2^8-1] — что мы и наблюдаем в формуле
Нет, не наблюдаем. Только одно значение 0xFFFF отображается в 0xFF. Таким образом, скажем, значение 0xFFFE, в шестнадцатибитной кодировке по своей яркости максимально близкое к 0xFFFF, отобразится в 0xFE, восьмибитому коду, обозначающему уровень яркости, равный шестнадцатибитному 0xFEFE.
Здравствуйте, achp, Вы писали:
К>>2) выполнить пересчёт: [0..2^16-1] равномерно отобразить на [0..2^8-1] — что мы и наблюдаем в формуле
A>Нет, не наблюдаем. Только одно значение 0xFFFF отображается в 0xFF. Таким образом, скажем, значение 0xFFFE, в шестнадцатибитной кодировке по своей яркости максимально близкое к 0xFFFF, отобразится в 0xFE, восьмибитому коду, обозначающему уровень яркости, равный шестнадцатибитному 0xFEFE.
Ну естественно, что формула кривая. Правильная должна выглядеть так: round(x*nom/den), а с учётом целочисленности — это (x*nom+den/2)/den