/// ColorBurn (a/aa, b/ba) =
/// 1. if (a==0 && b==ba): 1.
/// 2. if (a==0 && b!=ba): 0.
/// 3. if (a!=0): 1 - min (1, (1-b/ba) * (aa/a)).
///
/// color = a*(1-ba) + b*(1-aa) + aa*ba*ColorBurn(a/aa, b/ba) =
/// 1. a*(1-ba) + b*(1-aa) + aa*ba*1 = aa*(ba-b) + b.
/// 2. a*(1-ba) + b*(1-aa) + aa*ba*0 = b*(1-aa).
/// 3. a*(1-ba) + b*(1-aa) + aa*ba*(1 - min (1, (1-b/ba) * (aa/a))).
float
bm_color_burn (float a, float aa, float b, float ba)
{
if (a==0) {
if (b==ba)
return aa*(ba-b) + b;
else
return b*(1-aa);
} else
return a*(1-ba) + b*(1-aa) +
aa*ba * (1 - std::min (1.0f, (1 - b/ba)*(aa/a)));
}
Ly8vIENvbG9yQnVybiAoYS9hYSwgYi9iYSkgPQovLy8gMS4gaWYgKGE9PTAgJiYgYj09YmEpOiAxLgovLy8gMi4gaWYgKGE9PTAgJiYgYiE9YmEpOiAwLgovLy8gMy4gaWYgKGEhPTApOiAxIC0gbWluICgxLCAoMS1iL2JhKSAqIChhYS9hKSkuCi8vLwovLy8gY29sb3IgPSBhKigxLWJhKSArIGIqKDEtYWEpICsgYWEqYmEqQ29sb3JCdXJuKGEvYWEsIGIvYmEpID0KLy8vIDEuIGEqKDEtYmEpICsgYiooMS1hYSkgKyBhYSpiYSoxID0gYWEqKGJhLWIpICsgYi4KLy8vIDIuIGEqKDEtYmEpICsgYiooMS1hYSkgKyBhYSpiYSowID0gYiooMS1hYSkuCi8vLyAzLiBhKigxLWJhKSArIGIqKDEtYWEpICsgYWEqYmEqKDEgLSBtaW4gKDEsICgxLWIvYmEpICogKGFhL2EpKSkuCmZsb2F0CmJtX2NvbG9yX2J1cm4gKGZsb2F0IGEsIGZsb2F0IGFhLCBmbG9hdCBiLCBmbG9hdCBiYSkKewogICAgaWYgKGE9PTApIHsKICAgICAgICBpZiAoYj09YmEpCiAgICAgICAgICAgIHJldHVybiBhYSooYmEtYikgKyBiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGIqKDEtYWEpOwogICAgfSBlbHNlCiAgICAgICAgcmV0dXJuIGEqKDEtYmEpICsgYiooMS1hYSkgKwogICAgICAgICAgICAgICBhYSpiYSAqICgxIC0gc3RkOjptaW4gKDEuMGYsICgxIC0gYi9iYSkqKGFhL2EpKSk7Cn0=
prog.cpp: In function ‘float bm_color_burn(float, float, float, float)’:
prog.cpp:20: error: ‘min’ is not a member of ‘std’