[cairo] Re: Using ADD operator to prevent seams
Owen Taylor
otaylor at redhat.com
Fri Mar 18 10:43:18 PST 2005
Here's a fully automatic, though perhaps computationally infeasible
algorithm. :-)
The basic idea is to split the image into non-overlapping components,
draw each individually and then ADD them together.
Say, that the image we want to draw is constructed as:
initialize dest to fully transparent
for i (1...N):
fill(dest, path[i], source[i])
We iterate over all combinations of the N objects:
initialize dest to fully transparent
for s (subsets([1...N])):
initialize mask to fully opaque
for i (1...N):
if i in S:
fill(path[i]) operator = IN_REVERSE
else:
fill(path[i]) operator = OUT_REVERSE
initialize tmp to fully transparent
for i (1...n):
if i in S:
paint(tmp,source[i])
mask(dest,tmp,source[i])
Given a efficient means of computing the subsets where mask
is non-empty, it might even be feasible, at least for
non-pathological images.
Regards,
Owen
More information about the cairo
mailing list