The black halo isn&#39;t black in a colored image, I was talking about in the white image, which I understand because of how premultiplication works (1 1 1 1 * 1 1 1 0.5 = 0.5 0.5 0.5 0.5); with the different colors it changes around, but yes, you are right, it&#39;s more like a multicolored halo.<br>

<br>I get what you mean with the error accumulation, but what else can I do here? There&#39;s no Cairo function, that I can tell, to use SetSourceColor when SetSource on a pattern is used, hence why I do the color stuff manually, and I still have to multiply the values to get the bitmap together for Cairo to use properly. The _fixed.txt you had attached before seemed to just lighten the transparency and make it less visible, but the streaks are still definitely there.<br>

<br>Your explanation of errors makes complete sense to me because when I look at it, the streaks barely occur when the color values are 0, 0.5 or 1; any value in-between and you can see the streaks on a huge scale, but with those three values you see maybe one or two points off the color.<br>

<br>Cairo only supports integral colors, so there will be rounding errors with all of this multiplication... do you have any ideas on what I can do?<br><br>-P<br><br><div class="gmail_quote">On Fri, Nov 12, 2010 at 6:44 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 11:32 AM, Paril &lt;<a href="mailto:paril@alteredsoftworks.com">paril@alteredsoftworks.com</a>&gt; wrote:<br>


&gt; The fixed code you provided outputs a single dot (you forgot the Paint()<br>
&gt; call, but I extrapolated), which appears fine when you look at it at face<br>
&gt; value, but again, if you re-add that loop I had in the first place you see<br>
&gt; the transparency around the corners of the circle creating black streaks.<br>
&gt; This is the problem.<br>
&gt;<br>
&gt; If you weren&#39;t able to see the output, here it is:<br>
&gt; <a href="http://alteredsoftworks.com/cairo/output.png" target="_blank">http://alteredsoftworks.com/cairo/output.png</a><br>
<br>
</div>If you zoom in <a href="http://alteredsoftworks.com/cairo/output.png" target="_blank">http://alteredsoftworks.com/cairo/output.png</a> you will<br>
see that some &quot;incorrect&quot; pixels are more greenish than the expected<br>
color (in particular, the streaks are not just black, confirming that my<br>
explanation of the problem is probably correct).<br>
<div class="im"><br>
&gt;<br>
&gt; Here&#39;s a slightly modified version with no y modification. This shows you<br>
&gt; the clear black outline when the brush is continuously drawn in one spot:<br>
&gt; <a href="http://alteredsoftworks.com/cairo/output_red.png" target="_blank">http://alteredsoftworks.com/cairo/output_red.png</a><br>
<br>
</div>Actually if I zoom in I see clearly that there is *no* black outline.<br>
I see these shades: red, dark red, fuchsia, brown, purple, blue, green-blue<br>
(Uhm... I&#39;m not a native English speaker, so I might be misusing the color<br>
names... anyway my point is that I see no black).<br>
<div class="im"><br>
&gt;<br>
&gt; I don&#39;t entirely understand your explanation; the only time you can really<br>
&gt; tell that it&#39;s happening is when you are drawing a bunch of lines around,<br>
&gt; hence why in the example I drew a capsule shape.<br>
<br>
</div>A &quot;simpler&quot; (and much less detailed) explanation is:<br>
Premultiplication amplifies the quantization error of the color components<br>
Compositing multiple times pixels accumulates the error<br>
(so if you want to do it, you need to make sure that the error of the image<br>
you are compositing is small enough)<br>
<br>
On Fri, Nov 12, 2010 at 12:31 PM, Paril &lt;<a href="mailto:paril@alteredsoftworks.com">paril@alteredsoftworks.com</a>&gt; wrote:<br>
&gt; ...<br>
<div class="im">&gt; I expected that the data (as from my understanding with premultiplied alpha)<br>
&gt; would somehow be de-multiplied back into the original white-and-transparent<br>
&gt; one (which apparently.. makes it do less operations? I really don&#39;t<br>
&gt; understand the whole concept, and from my googling a lot of people come to<br>
&gt; the same conclusion, probably just due to lack of understanding why<br>
&gt; premultiplication is important). This was not the case, and what Cairo is<br>
&gt; showing ALSO contains the black outline, which leads me to concur that<br>
<br>
</div>Does the black outline appear in test.png even if you use cairo functions<br>
to save as png?<br>
<div class="im"><br>
&gt; Cairos&#39; usage of the premultiplication is causing the image to draw this<br>
&gt; black halo in the transparent portions of the image.<br>
<br>
</div>There is no black halo, the &quot;multicolor&quot; halo is caused by error accumulation.<br>
Premultiplication makes it more evident, but the problem is that you expect<br>
that compositing 100 times a 1% opaque image is the same as compositing<br>
the &quot;same&quot; image at 100% opacity. This assumption doesn&#39;t hold if you use<br>
integer components because of quantization errors.<br>
<font color="#888888"><br>
Andrea<br>
</font></blockquote></div><br>