2010-02-18 26 views
5

Đối với một số lý do nếu tôi thêm một chuỗi để GraphicsPath sử dụng AddClosedCurve font sẽ là nhỏ hơn nó trông giống như trong Font Dialog.Font trong 'GraphicsPath.AddString' là nhỏ hơn so với phông chữ thông thường

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); 

Có ai biết tại sao nó có thể làm điều đó không?

Trả lời

19

Giả sử đơn vị phông chữ của bạn.Size là Point, bạn nên chuyển đổi kích thước mà bạn đã chuyển đến AddString để emSize (Chiều cao của ô vuông em gắn với ký tự).

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

Tại sao giả định đơn vị điểm khi có 'Font.SizeInPoints'? Ngoài ra, "convert to emSize" có nghĩa là gì? Kích thước em không phải là một đơn vị. Tại sao không nói với mọi người rằng 'AddString' hy vọng đơn vị pixel (mà tôi giả định vì công thức của bạn chuyển đổi điểm thành pixel)? – user764754

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

Bạn có thể giải thích thêm một chút về cách mã của bạn trả lời câu hỏi không? – brodoll

Các vấn đề liên quan