On Oct 20, 2009, at 1:39 PM, Sven Neumann wrote:

> Hi,
> On Tue, 2009-10-20 at 12:22 -0800, Christopher Howard wrote:
>> Though having a far from sufficient understanding of how the GIMP  
>> brush
>> painting process works, it seems to me like this is the fundamental
>> problem: In making black-and-white brushes semi-transparent, GIMP
>> somehow "levels out" the grey-scale, so that certain ranges of  
>> darkness
>> become the same. On a fuzzy brush, the result is that the fine
>> graduation is changed to appear stepped or banded.
> The problem here is that the brush masks are 8bit only. With such a
> limited set of values to start with, banding is basically unavoidable.
> Sven

You should be able to get rid of most of the banding by performing  
error diffusion when multiplying the opacity into the brush mask.  I  
suspect that a simple 1d error diffusion algorithm will be sufficient  
and I wouldn't bother with a Floyd-Steinberg type algorithm unless you  
could come up with an example where the simpler algorithm showed  
visible artifacts.

I believe the function that introduces the banding is  
apply_mask_to_sub_region in paint-funcs.c or in the function  
apply_mask_to_alpha_channel depending on your point of view.  I have  
not worked with that code in a long time and I could be wrong about  

You will need to make the starting error term  effectively random or  
you run the risk of letting the upper-left pixel in each tile get  
special treatment.

Good luck,
Jay Cox
Gimp-developer mailing list

Reply via email to