BlurBuffer and BlurBufferMask in src/u_dzGraphicsUtils.pas, used by TBitmap_BlurRect and TBitmap_BlurEllipse, average a 3x3 neighbourhood with div 9 on byte values. That rounds down, and every step loses about 0.4 brightness levels on average wherever the picture is not uniform. Measured on a 4096x2304 photo: a licence plate area with mean brightness 80 went to 60 / 17 / 4 after 50 / 200 / 800 passes, a face from 135 to 1 at 800 passes.
Just rounding instead ((Sum + 4) div 9) is not enough: with byte intermediate values the blur then stalls once a gradient is smooth, and a plate stayed readable at 800 passes.
Fix: keep the intermediate values with more precision, e.g. Integer buffers holding the values x256, and round only when writing back. Tested that way, there was no drift and the blur kept going.
Details in [features:#15].
Fixed in revision #2376.