colorize-alpha: only recolor if source alpha is > 0 to avoid overpainted background - refs #1371
This commit is contained in:
parent
9284c6369d
commit
b43697fd5d
1 changed files with 30 additions and 23 deletions
53
deps/agg/include/agg_pixfmt_rgba.h
vendored
53
deps/agg/include/agg_pixfmt_rgba.h
vendored
|
@ -1468,31 +1468,38 @@ namespace agg
|
||||||
// source rgb
|
// source rgb
|
||||||
unsigned sr, unsigned sg, unsigned sb,
|
unsigned sr, unsigned sg, unsigned sb,
|
||||||
// source alpha and opacity
|
// source alpha and opacity
|
||||||
unsigned sa, unsigned cover) {
|
unsigned sa, unsigned cover)
|
||||||
if (cover < 255) {
|
{
|
||||||
|
if(cover < 255)
|
||||||
|
{
|
||||||
|
sr = (sr * cover + 255) >> 8;
|
||||||
|
sg = (sg * cover + 255) >> 8;
|
||||||
|
sb = (sb * cover + 255) >> 8;
|
||||||
sa = (sa * cover + 255) >> 8;
|
sa = (sa * cover + 255) >> 8;
|
||||||
}
|
}
|
||||||
p[Order::R] = (value_type)(((0 + base_mask) >> base_shift));
|
if (sa > 0)
|
||||||
p[Order::G] = (value_type)(((0 + base_mask) >> base_shift));
|
{
|
||||||
p[Order::B] = (value_type)(((0 + base_mask) >> base_shift));
|
p[Order::R] = (value_type)(((0 + base_mask) >> base_shift));
|
||||||
p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift));
|
p[Order::G] = (value_type)(((0 + base_mask) >> base_shift));
|
||||||
|
p[Order::B] = (value_type)(((0 + base_mask) >> base_shift));
|
||||||
// http://en.wikipedia.org/wiki/File:HSV-RGB-comparison.svg
|
p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift));
|
||||||
if (p[Order::A] < 64) {
|
// http://en.wikipedia.org/wiki/File:HSV-RGB-comparison.svg
|
||||||
p[Order::G] = ((p[Order::A] - 64) * 4);
|
if (p[Order::A] < 64) {
|
||||||
p[Order::B] = 255;
|
p[Order::G] = ((p[Order::A] - 64) * 4);
|
||||||
}
|
p[Order::B] = 255;
|
||||||
if (p[Order::A] >= 64 && p[Order::A] < 128) {
|
}
|
||||||
p[Order::G] = 255;
|
if (p[Order::A] >= 64 && p[Order::A] < 128) {
|
||||||
p[Order::B] = 255 - ((p[Order::A] - 64) * 4);
|
p[Order::G] = 255;
|
||||||
}
|
p[Order::B] = 255 - ((p[Order::A] - 64) * 4);
|
||||||
if (p[Order::A] >= 128 && p[Order::A] < 192) {
|
}
|
||||||
p[Order::R] = ((p[Order::A] - 128) * 4);
|
if (p[Order::A] >= 128 && p[Order::A] < 192) {
|
||||||
p[Order::G] = 255;
|
p[Order::R] = ((p[Order::A] - 128) * 4);
|
||||||
}
|
p[Order::G] = 255;
|
||||||
if (p[Order::A] >= 192) {
|
}
|
||||||
p[Order::R] = 255;
|
if (p[Order::A] >= 192) {
|
||||||
p[Order::G] = 255 - ((p[Order::A] - 192) * 4);
|
p[Order::R] = 255;
|
||||||
|
p[Order::G] = 255 - ((p[Order::A] - 192) * 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue