Cách tốt nhất để drawString ở giữa hình chữ nhật là gì? Kích thước phông chữ văn bản có thể được giảm để phù hợp với nó. Trong hầu hết trường hợp, Văn bản quá lớn để vừa với phông chữ đã cho nên phải giảm phông chữ.Vẽ văn bản ở giữa
Trả lời
Nó đang làm việc cho tôi biết. Đây là những gì tôi đã làm
Size textSize = TextRenderer.MeasureText(Text, Font);
float presentFontSize = Font.Size;
Font newFont = new Font(Font.FontFamily, presentFontSize, Font.Style);
while ((textSize.Width>textBoundary.Width || textSize.Height > textBoundary.Height) && presentFontSize-0.2F>0)
{
presentFontSize -= 0.2F;
newFont = new Font(Font.FontFamily,presentFontSize,Font.Style);
textSize = TextRenderer.MeasureText(ButtonText, newFont);
}
stringFormat sf;
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
e.Graphics.DrawString(Text,newFont,Brushes.Black,textBoundary, sf);
Xác định kích thước của văn bản sẽ được vẽ và sau đó xác định độ lệch cho phần bắt đầu của chuỗi từ tâm của hình chữ nhật và vẽ nó.
Nhận chiều rộng/2 và chiều cao/2 của hình chữ nhật, sau đó sử dụng System.Graphics.MeasureString để lấy kích thước của chuỗi của bạn, một nửa nữa và trừ các giá trị chiều rộng/chiều cao trước đó của bạn và bạn kết thúc bằng X , Y phối hợp để vẽ chuỗi của bạn theo thứ tự để nó được căn giữa.
Mã này tập trung các văn bản ngang và dọc:
stringFormat sf;
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
grp.DrawString(text, font, Brushes.Black, rectf, sf);
điều gì về việc giảm kích thước phông chữ? – Prithis
tôi đã chơi đùa với nó một chút và tìm thấy giải pháp này (giả định rằng RectangleF rect
và string text
được đã được xác định):
StringFormat stringFormat = new StringFormat()
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
using (Graphics g = this.CreateGraphics())
{
SizeF s = g.MeasureString(text, this.Font);
float fontScale = Math.Max(s.Width/rect.Width, s.Height/rect.Height);
using (Font font = new Font(this.Font.FontFamily, this.Font.SizeInPoints/fontScale, GraphicsUnit.Point))
{
g.DrawString(text, font, Brushes.Black, rect, stringFormat);
}
}
Dễ sử dụng :)
public static void DrawStringCenter(Image image, string s, Font font, Color color, RectangleF layoutRectangle)
{
var graphics = Graphics.FromImage(image);
var brush = new SolidBrush(color);
var format = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
graphics.DrawString(s, font, brush, layoutRectangle, format);
}
- 1. iPhone - Cách vẽ văn bản ở giữa một hình vuông
- 2. Vẽ văn bản trên Canvas ở góc
- 3. Vẽ văn bản ở dạng xem tròn?
- 4. Vẽ Văn bản ở Góc An
- 5. Chèn một nút ở giữa văn bản
- 6. Bufferedwriter dừng ở giữa văn bản
- 7. Delphi - Vẽ văn bản nhiều dòng ở chính giữa của một rect
- 8. Rgooglemaps vẽ văn bản
- 9. Vẽ văn bản trong canvas
- 10. văn bản phù hợp với RegEx ở giữa delimiters
- 11. tự động điền ở giữa văn bản (như Google Plus)
- 12. cách đặt văn bản ở giữa hình ảnh
- 13. CSS toàn màn hình div với văn bản ở giữa
- 14. Nút có hình ảnh và văn bản ở giữa
- 15. Căn giữa văn bản trong một ô Multirow ở LaTex
- 16. Android - hiển thị văn bản ở giữa thanh tiến trình
- 17. vẽ văn bản "ellipsized" vào canvas
- 18. drawRect vẽ văn bản 'trong suốt'?
- 19. qt vẽ văn bản đầy màu sắc
- 20. Vẽ xoay văn bản với NSString drawInRect
- 21. cách đặt văn bản ở biên giới
- 22. Văn bản có dạng thức ở dạng xem văn bản
- 23. Delphi: Vẽ một văn bản ở dạng phụ đề cho vista với aero như windows 7
- 24. vẽ văn bản sử dụng CGContextShowTextAtPoint nhưng văn bản thể hiện được đảo ngược,
- 25. Tại sao vẽ bản vẽ vim ở vị trí các tab và cách tránh điều này?
- 26. Làm thế nào để vẽ hình ảnh giữa các văn bản đa dạng với CoreText? (iOS)
- 27. Cách vẽ hình ảnh ở giữa nút Radio
- 28. Làm cách nào để căn chỉnh văn bản sao cho văn bản nằm ở giữa nút trong Silverlight?
- 29. Cách căn giữa văn bản trong danh sách chọn
- 30. Tính kích thước văn bản trước khi vẽ lên canvas
Tôi thấy rằng bạn đã đăng giải pháp làm việc của mình khi đăng phiên bản nhưng tôi để tôi ở lại vì nó hiệu quả hơn (kích thước phông chữ không lặp) và tôi nghĩ rằng mã của bạn có thể bị rò rỉ bộ nhớ, tạo nhiều đối tượng phông chữ không gọi Dispose lên chúng. –
Giá trị của tham số 'textBoundary' là gì? Vui lòng khai báo và khởi tạo nó. –
OKAY TÔI ĐÃ NÓ. textBoundary được tạo như sau String imgsrc = "PATH OF IMAGE FILE ON DISK"; Bitmap bmp = bitmap mới (System.Drawing.Image.FromFile (imgsrc)); RectangleF textBoundary = Hình chữ nhật mới (0, 0, bmp.Width, bmp.Height - 30); –