Dato che ho provato a disegnare stringhe con ogni combinazione di levigatura e rendering con Graphics.DrawString()
, pensavo che il renderer di testo avrebbe fatto un lavoro migliore disegnando le stringhe, ma penso che fosse sbagliato.ASP.NET TextRenderer.DrawText Immagini di testo terribili
Questo è come si suppone per assomigliare:
E questo è come sembra:
Ecco il mio codice:
Graphics objGraphics2 = Graphics.FromImage(objBitmap);
objGraphics2.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
objGraphics2.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
objGraphics2.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
objGraphics2.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
Font textFont = new Font(textFontFamily, PxtoEm(textSize));
SolidBrush b = new SolidBrush(textColor);
TextRenderer.DrawText(objGraphics2, textValue, textFont, new Rectangle(0, 0, Width, Height), textColor);
È il mio PxtoEm
metodo sbagliato?
public float PxtoEm(int px)
{
float em = (float)(Convert.ToDouble(Convert.ToDouble(px) * Convert.ToDouble(72)/Convert.ToDouble(objBitmap.HorizontalResolution)));
return em;
}
Ho bisogno di alcuni suggerimenti perché questo è davvero terribile, c'è di peggio con caratteri più grandi e le immagini non vengono ridotti.
UPDATE: ottenuto che funziona con i font più grandi (cioè 20 px.), Ma con caratteri più piccoli si ottiene tipo di cancellati su alcune lettere:
Ecco come si suppone sia con font Arial 10px:
Questo è risultato con Graphics.DrawString()
Come potete vedere, non è molto buono ma più vicino ho ottenuto. Ho fatto alcune modifiche al codice e ottenuto risultati migliori con carattere più grande:
Ecco come si suppone sia con font 20px Arial:
Questo risultato è il disegno:
E qui è il codice modificato (ho eliminato il metodo em e pixel utilizzati direttamente, passati a Graphics.DrawString() anziché TextRenderer.DrawText()
Se qualcuno ha qualche suggerimento di scrivere un metodo diverso per le dimensioni del testo più piccole e utilizzare il codice sopra per ingrandirlo, come funziona bene, postarlo e ci proverò!
UPDATE 3: Finalmente ho trovato la soluzione per tutto, e la soluzione è stata piuttosto semplice: NON UTILIZZARE sfondo trasparente!
e le impostazioni sono:
objGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
objGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; // <-- important!
objGraphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
objGraphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
objGraphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
objGraphics.TextContrast = 0;
Qui è un'immagine finale con queste impostazioni su sfondo bianco:
Esattamente lo stesso, grazie per i suggerimenti e le risposte.
In quale formato grafico viene riprodotto l'immagine? –
Il formato è Png perché e lo sfondo è trasparente. Sto attualmente provando tutte le altre proposte suggerite di seguito finora non è cambiato nulla quando si utilizza TextRenderer invece sono tornato a Graphics.DrawString e i risultati sono un po 'migliori. Pubblicherò agian quando avrò la combo giusta. – formatc
Fantastico, è sufficiente verificare che non si stia tentando di utilizzare GIF, in quanto ciò perderebbe il canale alfa e offrirà risultati brutti simili. –