The fixed code you provided outputs a single dot (you forgot the Paint() call, but I extrapolated), which appears fine when you look at it at face value, but again, if you re-add that loop I had in the first place you see the transparency around the corners of the circle creating black streaks. This is the problem.<br>

<br>If you weren&#39;t able to see the output, here it is:<br><a href="http://alteredsoftworks.com/cairo/output.png">http://alteredsoftworks.com/cairo/output.png</a><br><br>Here&#39;s a slightly modified version with no y modification. This shows you the clear black outline when the brush is continuously drawn in one spot:<br>

<a href="http://alteredsoftworks.com/cairo/output_red.png">http://alteredsoftworks.com/cairo/output_red.png</a><br><br>I don&#39;t entirely understand your explanation; the only time you can really tell that it&#39;s happening is when you are drawing a bunch of lines around, hence why in the example I drew a capsule shape. <br>

<br><blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote">...which replaces the PaintWithAlpha operation with a<br>
multiplication of the source alpha<br><br></blockquote><div><br>Actually, PaintWithAlpha was my second attempt at fixing the original code, which DID multiply the source alpha. I thought maybe the problem was because I was not using PaintWithAlpha, which appeared not to be the case.<br>

<br>-P<br><br> </div><div class="gmail_quote">On Fri, Nov 12, 2010 at 5:20 AM, Andrea Canciani <span dir="ltr">&lt;<a href="mailto:ranma42@gmail.com">ranma42@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div class="im">On Fri, Nov 12, 2010 at 10:46 AM, Paril &lt;<a href="mailto:paril@alteredsoftworks.com">paril@alteredsoftworks.com</a>&gt; wrote:<br>
&gt; Here, I just threw this together very very quickly in C#; it CLEARLY shows<br>
&gt; the output &quot;streaking&quot; black transparent pixels down the purple brush<br>
&gt; stroke, when the expected output should show a complete purple circle with<br>
&gt; the same color on the inside of the capsule-like shape.<br>
&gt;<br>
&gt; <a href="http://alteredsoftworks.com/cairo/streaking.txt" target="_blank">http://alteredsoftworks.com/cairo/streaking.txt</a><br>
&gt;<br>
&gt; It should be rather easy to convert to C/C++. I used no .NET-specific<br>
&gt; classes; DevIL for the image loading and Cairo for the drawing, just as I<br>
&gt; use in the actual program.<br>
&gt;<br>
&gt; The reason I suspect premultiplication is because the only time these<br>
&gt; streaks can be created is when the background transparency is turned from<br>
&gt; white to black - which is done by multiplying the color values by their<br>
&gt; alpha. If all of the images&#39; alpha and color values remain, when they are<br>
&gt; blended they should not create any streaks at all.<br>
<br>
</div>Observation: your code is (should be, as I&#39;m unable to test it) equivalent<br>
to the attached one, which replaces the PaintWithAlpha operation with a<br>
multiplication of the source alpha<br>
<br>
The problem is caused by color quantization (and amplified by<br>
premultiplication).<br>
<br>
In your case:<br>
Brush color: ARGB = (0.16, 0.42, 0.7, 1) -&gt; [40, 17, 28, 40] premultiplied 8bit<br>
<br>
Where the brush image is opaque, you actually get this values, but where it<br>
is not, you end up with smaller values, for example:<br>
<br>
Image alpha: 15 (in 8 bit integer) -&gt; [2, 1, 1, 2] (or something like that)<br>
When you composite multiple times this pixel over itself you would expect<br>
the original color, you obviously will get something very different<br>
(something like: 40, 20, 20, 40, if my example computations were correct).<br>
<br>
I think that integer formats are not well suited for repeated compositing of the<br>
same image as they obviously break the assumption:<br>
<br>
n*color OVER clear == color OVER^n clear<br>
<br>
which you seem to rely on.<br>
<br>
NB: this would be a problem with nonpremultiplied as well, but it would be much<br>
harder to notice (because it would only affect alpha, instead of both alpha and<br>
color).<br>
Example: (assuming 8-bit nonpremultiplied compositing)<br>
Start color: opaque red (1, 0, 0, 1) = [255, 0, 0, 255]<br>
Use it with a very light brush (1/1000), so that the color becomes [0,<br>
0, 0, 255]<br>
Even if you composite it 1000 times, you don&#39;t get opaque red.<br>
<br>
I hope I managed to guess what is the real issue.<br>
I&#39;m not sure as I&#39;m unable to test it, but it would be be confirmed if<br>
the attachment streaking-working.txt (or something along that lines) worked<br>
(or at least showed much less artifacts).<br>
<font color="#888888"><br>
Andrea<br>
</font></blockquote></div><br>