Ho un'applicazione C# che mostra l'ora corrente in un modulo .NET trasparente . Il modulo non ha controlli e nessun confine. La proprietà TransparencyKey è impostata sul colore di sfondo del modulo "grigio chiaro" per renderlo trasparente.
Quindi l'utente può vedere solo il testo (ora corrente).Testo anti-alias in un modulo .NET trasparente
Il testo è disegnato nella PaintEventHandler:
private void Display_Paint(object sender, PaintEventArgs e)
{
Graphics formGraphics = e.Graphics;
Font myFont = new Font("Microsoft Sans Serif", 24, FontStyle.Bold);
formGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
//formGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;
formGraphics.DrawString("00:00:00", myFont, Brushes.Green, 0.0F, 0.0F);
myFont.Dispose();
}
causa l'anti-aliasing del testo "00:00:00" viene mostrata sfilacciato quando il modulo è su uno sfondo scuro. Per gli sfondi chiari il testo è o.k.
Questa immagine mostra il problema e il buon esempio:
Ovviamente di Windows fa rendere il testo in modo che si adatti al proprio colore di sfondo del form e non in un modo che si adatti allo sfondo che si trova dietro il modulo trasparente.
È possibile consentire a Windows di prendere in carico lo sfondo dietro il modulo durante il rendering del testo in modo da ottenere il ridimensionamento delle frange da ?
Una "soluzione" potrebbe essere quella di disattivare l'anti-aliasing impostando TextRenderingHint di conseguenza. Ma fino ad ora questa non è la mia "soluzione" preferita.
Sistema:
Windows XP, SP 3, NET 3.5, VS 2008
Grazie per la punta, ma impostare lo stile non aiuta. – Habi
Mi piacerebbe saperne di più sulla parte di copiatura – pastapockets
In realtà ho fatto qualche ricerca, sembra stavo cercando CopyFromScreen, http://stackoverflow.com/questions/715094/how-do-i-capture-the-current screen-as-an-image – pastapockets