Is the font drawing using antialiasing? This would put some mid-valued
pixels around the outline, so the font looks more 'smooth'. In such a case,
those pixels would have a different color (or alpha?) than you set for the
font, and would leave the grey outline when you blend.

I think there is a setting DSRO_ANTIALIAS that allows font rendering to use
anti aliasing? You could check for this. Or, set to monochrome fonts (which
I think disallow anti aliasing).

Chris
===================
Chris Bore
BORES Signal Processing
www.bores.com

-----Original Message-----
From: directfb-users-boun...@directfb.org
[mailto:directfb-users-boun...@directfb.org] On Behalf Of Dave Craig
Sent: 23 October 2009 11:23
To: Niels Roest
Cc: directfb-users@directfb.org
Subject: [directfb-users] DrawString outline issue (Was RE: Fade out effect)

Hi Niels,

Thanks for the quick response. In this example case my background does have
color rgb 0x000000:

Background is alpha 0x00, rgb 0x000000
Text is alpha 0xff, rgb 0xffffff

The background is effectively pre-multiplied, but I get this thin grey
outline of the text. From your previous posts the maths is something like
this:

c_result = (((255 - a_source) / 255) * c_destination) + 
             (a_source / 255) * c_source

In the example case, the resultant color should always be rgb 0xfffff with
the resultant alpha varying from 0x00 to 0xff. Any pixel where the color is
not 0xffffff and the alpha is not 0x000000 there will be a grey pixel. I've
attached my test code which I'm using to help investigate this, it prints
out the alpha and a color value for drawing an 'O' to the screen.

I did try DSBLIT_DST_PREMULTIPLY does sound suitable, though I couldn't find
a way to set this flag for a DrawString blit. Some of the DrawingFlags
appear to apply to DrawString, but DSDRAW_DST_PREMULTIPLY isn't one of them,
so that had no effect. To test whether DSBLIT_DST_PREMULTIPLY is what I
required I changed fonts.c to add
DSBLIT_DST_PREMULTIPLY:

     font->blittingflags = DSBLIT_BLEND_ALPHACHANNEL | DSBLIT_COLORIZE |
DSBLIT_DST_PREMULTIPLY;

but the outline remained. I started looking at the pipeline code, but got
bogged down a bit - lots to understand there...

I'll continue to investigate, but let me know if you think I've got a basic
mis-understanding!

Thanks again,

DaveC

PS: I forgot to change the thread title on the initial post, my apologies.

........................................................................
Dave Craig
Senior Software Engineer
BrightSign

skype: davecraig

-----Original Message-----
From: Niels Roest [mailto:ni...@directfb.org]
Sent: 22 October 2009 19:21
To: Dave Craig
Cc: directfb-users@directfb.org
Subject: Re: [directfb-users] Fade out effect

You mean your background is something like alpha 0, and rgb 0xffffff?

This again has its roots in premultiplication. DirectFB assumes that your
destination surface is premultiplicated. This means that your colours will
always be relative to your alpha. The result is that your alpha is
"bounding" the colours, so the colours are always smaller (or
equal) than the alpha. With normal blitting situations this is not an issue,
since there DirectFB will handle premutiplication if the source surface is
not premultiplied (you need to specify this at surface creation). If you
work on the background surface yourself, you have to handle this yourself
too.

To sort this, make sure your background has colour rgb 0x000000, or specify
your destination as being non-premultiplied (but this is a costly
operation), I think *DSBLIT_DST_PREMULTIPLY *is the flag to use.

Hope this was clear also,
grts
Niels

Dave Craig wrote:
> Hi,
>
> Seeing as there have been some discussion on blitting modes here in 
> the last few days, I'd like to bring up an issue I had which I never 
> got to the bottom of.
>
> I've got an issue with DrawGlyph in 1.2.6 when I'm blitting to a 
> surface which is fully transparent. Though the destination alpha is 
> zero, some of the destination color seeps in during the blit of the 
> glyph. This is easiest seen where the background is fully transparent 
> black, the font color is fully opaque white and the background layer 
> is fully white. The result is white text on a white background but 
> with a light grey dotted outline of text. The light grey is the result

> of the transparent black background being blended in to the foreground
color.
>
> It may be that the destination alpha isn't being taken into account 
> during the blit. I've tried merging some blending changes from 1.4.x 
> but with no change in the net result. Is this a bug in the particular 
> blend implementation being called, or expected behaviour based on the 
> blitting flags being used (DSBLIT_BLEND_ALPHACHANNEL | DSBLIT_COLORIZE

> setup in fonts.c). Any suggestions about what might be the issue and 
> how to proceed would be gratefully received.
>
> Hope I've been clear,
>
> Thanks!
>
> Dave.
>
>
........................................................................
> Dave Craig
> Senior Software Engineer
> BrightSign
> _______________________________________________
> directfb-users mailing list
> directfb-users@directfb.org
> http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users
>
>   


-- 

.------------------------------------------.
| DirectFB - Hardware accelerated graphics |
| http://www.directfb.org/                 |
"------------------------------------------" 


_______________________________________________
directfb-users mailing list
directfb-users@directfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users

Reply via email to