2010-02-18 5 views
5

habituelle Pour une raison si j'ajoute une chaîne à l'aide GraphicsPathAddString la police va être plus petit que cela ressemble à la boîte de dialogue Police.Font dans « GraphicsPath.AddString » est plus petite que la police

SizeF sz = g.MeasureString(Text, new Font(Font.FontFamily, (int)(Font.Size - (Font.Size/7)), Font.Style), new PointF(0, 0), StringFormat.GenericDefault); 

    this.Size = new Size((int)sz.Width, (int)sz.Height); 
    //These are not the same 
    fontpath.AddString(this.Text, this.Font.FontFamily,(int)this.Font.Style, this.Font.Size, new Point(0, 0),StringFormat.GenericDefault); 

Est-ce que quelqu'un sait pourquoi il pourrait faire cela?

Répondre

19

En supposant que votre unité de Font.Size est Point, vous devez convertir la taille que vous avez passé à AddString à emSize (La hauteur de la boîte carrée em qui limite le caractère).

float emSize = graphics.DpiY * font.Size/72; 
+1

Pourquoi supposer l'unité point quand il y a 'Font.SizeInPoints'? Que veut dire "convertir en emSize"? La taille Em n'est pas une unité. Pourquoi ne pas dire aux gens que 'AddString' attend l'unité de pixel (que je suppose à cause de votre formule qui convertit les points en pixels)? – user764754

2
float emSize = graphics.DpiY * font.SizeInPoints/72; 
+6

Pourriez-vous élaborer un peu plus sur la façon dont votre code répond à la question? – brodoll

Questions connexes