Jaki jest najlepszy sposób drawString na środku rectangleF? Rozmiar czcionki tekstu można zmniejszyć, aby pasował. W większości przypadków tekst jest zbyt duży, aby zmieścił się w danej czcionce, więc należy zmniejszyć czcionkę.Narysuj tekst w centrum
Odpowiedz
To działa dla mnie znać. To, co zrobiłem
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);
Określa rozmiar tekstu, który należy narysować, a następnie określa przesunięcie początku łańcucha od środka prostokąta F i narysuje go.
Pobierz szerokość/2 i wysokość/2 prostokąta, a następnie użyj System.Graphics.MeasureString, aby uzyskać wymiary ciągu, ponownie połowę ich i odejmij od swoich wcześniejszych wartości szerokości/wysokości, a skończysz z X , Współrzędna Y, aby narysować ciąg znaków w celu jego wyśrodkowania.
Kod ten centruje tekst w poziomie i pionie:
stringFormat sf;
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
grp.DrawString(text, font, Brushes.Black, rectf, sf);
co z redukcją rozmiaru czcionki? – Prithis
I bawił się z nim trochę i znalazłem to rozwiązanie (zakładając, że są już zdefiniowane tak RectangleF rect
i string text
):
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);
}
}
Łatwy do użycia :)
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. qt narysuj kolorowy tekst
- 2. Narysuj tekst w widoku okrągłym?
- 3. Tekst centrum wyrównanie - skrypt
- 4. Narysuj tekst na kształt w ActionScript 3
- 5. Narysuj tekst wewnątrz łuku używając płótna
- 6. Narysuj tekst sformatowany za pomocą QPaintera
- 7. centrum Pionowo obrócony tekst z CSS
- 8. Centrum tekst i pojemnik wewnątrz okręgu
- 9. Pionowo centrum tekst w wprowadzania tekstu w IE9 + IE10
- 10. Python, narysuj okrąg z PIL
- 11. Jak wyrównać tekst do centrum w etykiecie asp
- 12. Narysuj hiperpłaszczyznę w R?
- 13. Narysuj kwadrat ze współrzędnymi biegunowymi
- 14. Narysuj zespół muzyczny w C#
- 15. Narysuj dendrogram w pythonu ręcznie
- 16. Narysuj okrąg w Tkinter (Python)
- 17. Narysuj wygasły kształt w SVG
- 18. Pionowe centrum wyrównywania CSS w okręgach
- 19. Tło wideo w formacie HTML5, zachowaj centrum wideo w centrum
- 20. Początek centrum w matplotlib
- 21. Centrum div w CSS
- 22. Lokalizacja w centrum sceny
- 23. Zawartość centrum strony
- 24. narysuj linię pod TextView na Androidzie
- 25. narysuj pikselowaną teksturę
- 26. Narysuj część okręgu
- 27. Narysuj pół pierścień - JavaFX
- 28. Narysuj okrąg o ggplot2
- 29. Narysuj prostokąt ponad obrazkiem
- 30. IOS: narysuj linię palcem
Widziałem, że opublikowałeś swoje robocze rozwiązanie, kiedy opublikowałem moją wersję, ale pozwoliłem sobie na pozostanie, ponieważ jest bardziej wydajna (pobiera rozmiar czcionki bez pętli) i myślę, że twój kod może przeciekać pamięć, tworząc wiele obiektów czcionki, ale nie dzwonić Usuń je. –
Co to jest wartość parametru "textBoundary"? Proszę go zadeklarować i zainicjować. –
OK, JA DOSTAŁEM. textBoundary jest tworzony jak poniżej String imgsrc = "ŚCIEŻKA PLIKU OBRAZU NA DYSKU"; Bitmap bmp = new Bitmap (System.Drawing.Image.FromFile (imgsrc)); RectangleF textBoundary = new Rectangle (0, 0, bmp.Width, bmp.Height - 30); –