Как рассчитать инверсию в режиме комбинированного жесткого освещения? - PullRequest
0 голосов
/ 10 января 2020

У меня есть «старый» холст RGBA на клиенте и более новая версия того же изображения на сервере. Между ними есть небольшие визуальные различия.

Я хочу, чтобы сервер мог отправлять клиенту некоторую 'diff', чтобы иметь возможность обновить его изображение в соответствии с новой версией, не отправляя полностью снова данные изображения.

Идеальным будет двухкадровое прозрачное видео webm (ie. используйте webm для кодирования различий), но аппаратная поддержка webm с прозрачностью ужасна, а поддержка браузера для извлечения заданного c кадр из видео также очень плохой.

Вместо этого я использую режим смешивания hard light , который должен позволить мне отправить одно изображение клиенту, и преобразовать любой пиксель RGBA в любой другой (с погрешностью 1).

Как мне сгенерировать разностное изображение? Какая комбинация режимов наложения может генерировать diff, если new = hardlight(old, diff)

1 Ответ

0 голосов
/ 10 января 2020

Пусть Ch, Cw, Cd будет вашим значением, значением, которое вы хотите, и значением diff:

if (Cw > Ch)
    Cd = 1 - (1-Cw)/2(1-Ch)
else if (Cw < Ch)
    Cd = Cw/2Ch
else
    Cd = 0.5
...