Como usar ClearType com buffer duplo em Compact Framework?
-
19-09-2019 - |
Pergunta
Quando eu desenhar uma cadeia de caracteres em um buffer, a saída resultante não é anti-alias do jeito que eu esperaria. Este código ilustra o problema ... basta colocar isso em Form1.cs de um projeto de dispositivo inteligente padrão:
protected override void OnPaint(PaintEventArgs e)
{
Bitmap buffer = new Bitmap(Width, Height, PixelFormat.Format32bppRgb);
using(Graphics g = Graphics.FromImage(buffer))
{
g.Clear(Color.White);
g.DrawString("Hello, World", Font, new SolidBrush(Color.Black), 5, 5);
}
e.Graphics.DrawImage(buffer, 0, 0);
}
Por outro lado, se eu só puxar a corda para o objeto Graphics que foi passado com o PaintEventArgs
, ele processa em ClearType, assim como eu esperaria.
Eu acho que eu tenho que criar tampão meus gráficos de uma forma que torna utilizar a suavização de fontes, mas eu não vejo uma maneira de fazer isso.
Solução
acaba por ter sido um problema simples. Ao remover a PixelFormat.Format32bppRgb
ele funcionou bem. Parece que você precisa ter certeza de seus buffers têm os formatos mesmo pixel ...
Outras dicas
Defina a propriedade SmoothingMode do seu objeto Graphics:
g.SmoothingMode = SmoothingMode.AntiAlias;
Você terá que usar gdiplus.dll (existe alguns wrappers para isso), mas só está disponível em Windows Mobile 6 Professional (não padrão).