¿Cuál es la mejor manera de dibujar la cadena en el centro de un rectánguloF? El tamaño de la fuente de texto puede reducirse para adaptarse. En la mayoría de los casos, el texto es demasiado grande para caber con una fuente determinada, por lo que debe reducir la fuente.Dibujar texto en el centro
Respuesta
Se está trabajando para mí sé. Esto es lo que hice
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);
Determine el tamaño del texto que se dibujará y luego determine el desplazamiento para el inicio de la cadena desde el centro del rectánguloF y sáquelo.
Obtenga width/2 y height/2 del rectángulo, luego use System.Graphics.MeasureString para obtener las dimensiones de su cadena, de nuevo la mitad y reste de sus valores anteriores de ancho/alto y termine con la X , Coordenada Y para dibujar la cuerda a fin de que esté centrada.
Este código centra el texto en horizontal y en vertical:
stringFormat sf;
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
grp.DrawString(text, font, Brushes.Black, rectf, sf);
¿qué tal reducir el tamaño de la fuente? – Prithis
He jugado un poco con él un poco y encontré esta solución (suponiendo que el RectangleF rect
y string text
ya están definidos):
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);
}
}
Fácil de usar :)
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. Delphi - Dibujar texto multilínea en el centro de una rect
- 2. Android dibujar texto en un rectángulo en el centro y recortarlo si es necesario
- 3. Dibujar texto en ángulo
- 4. Dibujar texto sobre lienzo en el ángulo
- 5. Dibujar arco con 2 puntos y el centro del círculo
- 6. ¿Cómo centro verticalmente el texto de UITextField?
- 7. ¿Cómo dibujar texto en lienzo?
- 8. ¿Dibujar texto en vista circular?
- 9. qt dibujar texto colorido
- 10. iPhone: ¿Dibujar texto girado?
- 11. UILabel Alinear texto al centro
- 12. Centro de texto en un UILabel
- 13. centro documentView en el centro de NSScrollView
- 14. ¿Cómo alinear verticalmente el texto al centro en HTML?
- 15. Cómo colocar texto en el centro de una ruta svg
- 16. dibujar texto usando CGContextShowTextAtPoint pero el texto mostrado es invertida,
- 17. Dibujar texto en forma en ActionScript 3
- 18. Dibujar un texto girado en una imagen en C#
- 19. Dibujar texto con gráficos básicos
- 20. Dibujar texto multilingüe usando PIL
- 21. Dibujar texto girado en un lienzo HTML5
- 22. Dibujar texto en superposición de círculo
- 23. ¿Cómo dibujar texto en cuadro de imagen?
- 24. dibujar texto "ellipsized" en un lienzo
- 25. iPhone: cómo dibujar texto en una ventana?
- 26. Android: escalado de texto incorrecto al dibujar texto en lienzo
- 27. Centro de texto, botón de Android
- 28. Salida de texto del centro de Graphics.DrawString()
- 29. centro de texto se alinean con Android
- 30. Cómo dibujar la imagen en el centro del botón de radio
Vi que había publicado su solución de trabajo cuando publiqué mi versión, pero dejo la mía porque es más eficiente (obtiene el tamaño de fuente sin bucles) y también creo que su código puede perder memoria, creando muchos objetos de fuentes pero no llamando Dispose en ellos. –
¿Cuál es el valor del parámetro 'textBoundary'? Por favor, declarar e inicializarlo. –
OK, LO CONSEGUÍ. textBoundary se crea como se ve a continuación String imgsrc = "RUTA DE ARCHIVO DE IMAGEN EN DISCO"; Bitmap bmp = new Mapa de bits (System.Drawing.Image.FromFile (imgsrc)); RectangleF textBoundary = new Rectangle (0, 0, bmp.Width, bmp.Height - 30); –