2013-04-04 48 views
8

Tôi đang sử dụng hàm GraphicsPath.AddString(), nhưng nó vẽ văn bản có một khoảng trống nhỏ xung quanh văn bản. Bất kỳ ý tưởng làm thế nào để vẽ chuỗi mà không có đệm đó, chỉ có các đường dẫn của văn bản?Cách vẽ một chuỗi không có đệm

Mã của tôi là như thế này:

GraphicsPath gp = new GraphicsPath(); 

gp.AddString(text, font.FontFamily, (int)font.Style, font.Size, 
    boundsRectangle, format); 

g.DrawPath(pen, gp); 
+2

Bạn đã đặt gì trong FormatFlags trong tham số StringFormat? – plinth

+0

nhờ dấu chân cho câu trả lời, StringFromat là _format = StringFormat.GenericDefault; là có một số điều có thể giải quyết vấn đề trong cờ? – MHMr

+0

http://stackoverflow.com/questions/118686/measurestring-pads-the-text-on-the-left-and-the-right –

Trả lời

2

gì đang xảy ra là dưới mui xe nó có lẽ là sử dụng Graphics.MeasureString(), từ các tài liệu:

GDI + thêm một lượng nhỏ (1/6 em) cho mỗi đầu của mỗi chuỗi được hiển thị. 1/6 em này cho phép> cho glyphs với kết thúc nhô ra (chẳng hạn như nghiêng 'f'), và cũng cung cấp cho GDI + một số lượng nhỏ> của leeway để giúp đỡ với việc mở rộng phù hợp lưới.

Hành động mặc định của Drawstring sẽ làm việc chống lại bạn trong việc hiển thị chạy liền kề:

Thứ nhất StringFormat mặc định bổ sung thêm một 1/6 em tại mỗi đầu của mỗi đầu ra; Thứ hai, khi lưới được trang bị chiều rộng nhỏ hơn thiết kế, chuỗi được phép ký hợp đồng bằng cách tối đa một em. Để tránh những vấn đề này:

Luôn vượt qua MeasureString và DrawString một StringFormat dựa trên typographic> StringFormat (GenericTypographic). Đặt Graphics TextRenderingHint thành TextRenderingHintAntiAlias. Phương thức kết xuất này sử dụng định vị glyph chống răng cưa và pixel phụ để tránh sự cần thiết phải phù hợp với lưới và> do đó có độ phân giải vốn độc lập.

Vì vậy, có vẻ như bạn sẽ có thể khắc phục điều này bằng cách sử dụng đúng StringFormat.