On 1/25/07, Boris Borcic <[EMAIL PROTECTED]> wrote:
> Chris Mellon wrote:
> > On 1/25/07, Boris Borcic <[EMAIL PROTECTED]> wrote:
> >> Chris Mellon wrote:
>
> >>>>>
> >>>>> Some quick & dirty wxPython code
> >>>>>
> >>>>> def getTextBitmap(text, font, fgcolor, bgcolor):
> >>>>>     dc = wx.MemoryDC()
> >>>>>     dc.SetFont(font)
> >>>>>     width, height= dc.GetTextExtent(text)
> >>>>>     bmp = wx.EmptyBitmap(width, height)
> >>>>>     dc.SelectObject(bmp)
> >>>>>     dc.SetBackground(wx.Brush(bgcolor))
> >>>>>     dc.Clear()
> >>>>>     dc.SetTextBackground(bgcolor)
> >>>>>     dc.SetTextForeground(fgcolor)
> >>>>>     dc.DrawText(text, 0, 0)
> >>>>>     dc.SelectObject(wx.NullBitmap)
> >>>>>     return bmp
> >>>>>
> >>>>>
> >>>>> Raw win32 code will look similar but will be much more verbose.
> >>>> Thx again for this base.
> >>>>
> >>>> Quickly testing this, it appears that the result is rendered half a 
> >>>> pixel off in
> >>>> the x-direction. Does this make sense ? Is it possible to position text 
> >>>> with
> >>>> subpixel accuracy ?
> <snip>
> >> In short, wx._gdi_ fights quite hard to enforce what I am trying to avoid 
> >> :( I
> >> might admire its consistency if it extended to treating both axes 
> >> similarly...
> >>
> >
> > I have not recently had a need to examine drawn text output this
> > closely, but I am familiar with the C++ code that implements the
> > drawing and it's a direct wrapping of win32 GDI calls. If it's not
> > matching your source text, then the source may be drawn using a
> > different method or using one of the alternate engines, like GDI+.
>
> Maybe. In any case, color separation solves my (sub)problem : the blue layer
> from the wx generated model matches the green layer from the app's window, 
> pixel
> for pixel (at least with antialiasing and cleartype on, while writing black on
> white).
>

That's... extremely interesting. If it works for you, go for it! If
you're interested in some other things to try, wx.EmptyBitmap takes a
depth parameter you can use to eliminate color.
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to