[prev in list] [next in list] [prev in thread] [next in thread]
List: freetype
Subject: Re: [ft] Using different loading and render modes, plus LCD example
From: Aekold Helbrass <helbrass () gmail ! com>
Date: 2011-06-16 15:34:32
Message-ID: BANLkTi=UV3fwPMZeLmtXbX1k=wpakdsOQQ () mail ! gmail ! com
[Download RAW message or body]
Thank you, finally figured out how to use LCD bitmap with QImage.
Small piece of source code below. But still have a problem: there is a
lot of noise on rendering, and that noise is jumping on repainting of
component. So it looks like I've done something wrong with color
transformations. Basically I am filtering out white pixels, but there
are a lot of "almost white" ones. Please see attachment.
source code (cut out error handling to show only logic part):
error = FT_Load_Glyph( m_face, glyph_index, FT_LOAD_TARGET_LCD);
error = FT_Library_SetLcdFilter(m_library, FT_LCD_FILTER_DEFAULT);
error = FT_Render_Glyph( m_face->glyph, FT_RENDER_MODE_LCD );
int _h = m_face->glyph->bitmap.rows;
int _w = m_face->glyph->bitmap.width/3;
int _p = m_face->glyph->bitmap.pitch;
uchar *src = m_face->glyph->bitmap.buffer;
glyphImage = new QImage(_w, _h, QImage::Format_ARGB32);
int bit = 0; // address in buffer
for (int y = 0; y < _h; y++) {
for (int x = 0; x < _w; x++) {
uchar r = 0xff - src[bit++];
uchar g = 0xff - src[bit++];
uchar b = 0xff - src[bit++];
// filtering out any whites:
if (r + g + b >= 3 * 0xff) {
continue;
}
glyphImage->setPixel(x, y, qRgb(r, g, b)); //
pixel coordinates to color value
}
bit = _p * (y + 1); // go to next line, start from 0
}
On Wed, Jun 15, 2011 at 7:20 PM, Collyer, Oliver, SI
<oliver.collyer@sigames.com> wrote:
> The light hinting more or less just hints in the vertical direction, so this is \
> compatible with LCD rendering which deals with the horizontal (assuming your LCD \
> display is a regular one and your text is horizontal). IMO it's a pretty good \
> combination.
> To display an LCD-rendered source bitmap on the screen you basically use each \
> triplet of values in the source as the respective intensity/alpha values of the RGB \
> components of your destination pixel.
> i.e:
>
> - the first (left) value in the source triplet gives how much of the R of your text \
> colour to use when blending (so a value of 255 means use all of the text colour R \
> and don't mix it with any of the background bitmap R, whereas a value of 128 would \
> mean mix them 50-50, etc)
> - the second (middle) value in the source triplet gives how much of the G of your \
> text colour to use when blending
> - the third (right) value in the source triplet gives how much of the B of your \
> text colour to use when blending
> This assumes you have already filtered your LCD bitmap first. FreeType has \
> functionality for doing this, and this basically reduces a problem known as 'colour \
> fringing' by mixing together neighbouring pixels in the bitmap.
> Here is a decent resource that describes the basics:
>
> http://www.grc.com/ctwhat.htm
>
> Hope this helps.
>
> On 15 Jun 2011, at 18:58, Aekold Helbrass wrote:
>
> > Good day All!
> >
> > I've read the note to
> > http://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html#FT_LOAD_TARGET_XXX
> > and now I have a question: what will I get in case of using LIGHT for
> > loading and LCD for rendering? Is it considered bad practice, or it
> > may be used to achieve some special results?
> >
> > And the second question - the reason why I can't check the first one
> > for myself. I am using that awesome Qt example (example4.cpp) to see
> > how freetype works in general, but I can't get proper LCD modes. I see
> > that image is 3 times wider and divide it, but it's still crippled
> > when rendered. I suppose I should use some other color table or some
> > smart pixel filtering methods that are used in openjdk or qt, but I am
> > not familiar with freetype enough to figure it out myself. So, if
> > there are some LCD rendering examples or guides - please give me some
> > links.
> >
> > Thanx!
> >
> > _______________________________________________
> > Freetype mailing list
> > Freetype@nongnu.org
> > https://lists.nongnu.org/mailman/listinfo/freetype
>
>
["snapshot04.png" (image/png)]
_______________________________________________
Freetype mailing list
Freetype@nongnu.org
https://lists.nongnu.org/mailman/listinfo/freetype
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic