Я думаю, что Вы ищете, RGB-> формула Luma преобразования.
Фотометрический/цифровой ITU, Купленный 709 :
Y = 0.2126 R + 0.7152 G + 0.0722 B
Цифровой ITU, Купленный 601 (дает больше веса R и компонентам B):
Y = 0.299 R + 0.587 G + 0.114 B
, Если Вы готовы обменять точность на производительность, существует две формулы приближения для этого:
Y = 0.33 R + 0.5 G + 0.16 B
Y = 0.375 R + 0.5 G + 0.125 B
Они могут быть вычислены быстро как [1 111]
Y = (R+R+B+G+G+G)/6
Y = (R+R+R+B+G+G+G+G)>>3
Интерпретация 1 верна. Если бы Интерпретация 2 была задумана, в исходном тексте использовалось бы « или , которые были изменены» вместо «и».
setjmp / longjmp реализуется путем сохранения регистров (включая указатели стека, кода и т. Д.) При первом прохождении и их восстановления при переходе.
Автоматически (также «локально», с выделением в стеке) ) переменные, которые не являются «изменчивыми» , могут храниться в регистрах, а не в стеке.
В этих обстоятельствах longjmp восстановит эти регистровые переменные до их значений в момент, когда setjmp () был впервые вызван.
Кроме того, особенно умный компилятор может избегать переменных, которые могут быть выведены из состояния другой переменной, и вычислять их по запросу.
Однако, если переменная является автоматической, но не имеет регистр, его можно изменить с помощью кода между setjmp и longjmp ..
Volatile явно указывает компилятору не хранить переменную в регистре.
Поэтому, если вы явно не указали, что переменная является изменчивой, если вы изменили переменную между setjmp / longjmp, ее значение будет зависеть от выбора компилятор делает, и поэтому вы не должны полагаться на него («неопределенный»).