2010-11-17 3 views
12

J'ai le code suivant. Y at-il un moyen facile de mettre un aperçu sur le texte que j'écris?Décrivez le texte avec System.Drawing?

var imageEncoder = Encoder.Quality; 
var imageEncoderParameters = new EncoderParameters(1); 
imageEncoderParameters.Param[0] = new EncoderParameter(imageEncoder, 100L); 

var productImage = GetImageFromByteArray(myViewModel.ProductImage.DatabaseFile.FileContents); 
var graphics = Graphics.FromImage(productImage); 

var font = new Font("Segoe Script", 24); 
var brush = Brushes.Orange; 

var container = new Rectangle(myViewModel.ContainerX, myViewModel.ContainerY,          myViewModel.ContainerWidth,            myViewModel.ContainerHeight); 

var stringFormat = new StringFormat {Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center}; 

graphics.DrawString(customizationText, font, brush, container, stringFormat); 

Répondre

23

Oui. Au lieu de DrawString, utilisez la séquence suivante d'appels:

Si vous devez utiliser GraphicsPath.AddString aux côtés Graphics.DrawString, vous devez convertir les tailles de police, becau se Graphics.DrawString s'attend à "taille de point" tandis que GraphicsPath.AddString attend "taille em". La formule de conversion est simplement emSize = g.DpiY * pointSize/72.

Voici un exemple de code:

// assuming g is the Graphics object on which you want to draw the text 
GraphicsPath p = new GraphicsPath(); 
p.AddString(
    "My Text String",    // text to draw 
    FontFamily.GenericSansSerif, // or any other font family 
    (int) FontStyle.Regular,  // font style (bold, italic, etc.) 
    g.DpiY * fontSize/72,  // em size 
    new Point(0, 0),    // location where to draw text 
    new StringFormat());   // set options here (e.g. center alignment) 
g.DrawPath(Pens.Black, p); 
// + g.FillPath if you want it filled as well 
+0

Merci beaucoup pour la réponse, mais je ne peux pas sembler obtenir ce travail. Je ne suis pas sûr quelle surcharge (s) à utiliser pour ces méthodes. Est-ce que la seule ligne que je retirerais de mon programme actuel serait la ligne graphics.DrawString()? –

+0

[Oui.] (Http://meta.stackexchange.com/questions/700/) – Timwi

+0

Merci pour cette info, j'ai fait exactement ce que vous avez dit ... Mais bien sûr, je me suis rendu compte qu'il n'y a pas d'anti-aliasing donc le texte a l'air horrible. :(Vous ne savez pas encore quoi faire à ce sujet –

Questions connexes