Am Mittwoch, den 29.09.2010, 15:15 +0200 schrieb Rob Kendrick
<[email protected]>:

> I doubt it; I suspect colour-reducing FreeType's 256-shades-of-gray
> output to nearest colour in your colour set will still be quicker than
> the second pass.  I suspect removing this option rather than fixing any
> possible problem with it would be a better choice.

I got it working, but I'm not sure if it really renders 100% correct...
the output is really not that pretty at many font sizes, it's even so
buggy that the C looks more like an O... so I expect there is some error
in my code..., or maybe it is caused by the hinting settings...? Here is
an screenshot:

http://img545.imageshack.us/img545/2453/nsscreenmonorendering.png

and this is the glyph1 routine that I use:

static bool
glyph1(nsfb_t *nsfb,
       nsfb_bbox_t *loc,
       const uint8_t *pixel,
       int pitch,
       nsfb_colour_t c)
{
        PLOT_TYPE *pvideo;
        PLOT_TYPE fgcol;
        int xloop, yloop;
        int xoff, yoff; /* x and y offset into image */
        int x = loc->x0;
        int y = loc->y0;
        int width = loc->x1 - loc->x0;
        int height = loc->y1 - loc->y0;
                uint8_t bitm;
        const uint8_t *fntd;

        if (!nsfb_plot_clip_ctx(nsfb, loc))
                return true;

        if (height > (loc->y1 - loc->y0))
                height = (loc->y1 - loc->y0);

        if (width > (loc->x1 - loc->x0))
                width = (loc->x1 - loc->x0);

        xoff = loc->x0 - x;
        yoff = loc->y0 - y;

        fgcol = colour_to_pixel(nsfb, c);
                for (yloop = yoff; yloop <height; yloop++) {
                        fntd = pixel + (pitch * yloop);
                        for ( xloop = xoff, bitm = 128; xloop < width; xloop++, 
bitm =
bitm>>1 ) {
                                pvideo = get_xy_loc(nsfb, loc->x0 + xloop, 
loc->y0 + yloop);
                                if( *fntd & bitm )
                                        *pvideo =  fgcol;
                                if( bitm == 1 ) {
                                        fntd++;
                                        bitm = 128;
                                }
                                
                        }
                }
        return true;
}


Btw.: I'm just posting because I'm interested in this, I know it's not
urgent. Maybe someone also is interested in this. I don't have attitude
like: "could you fix this fast,..." ;) 

Greets,
m


Reply via email to