2010-11-30 12 views
5

Lo que intento hacer es utilizar el método DrawString() para dibujar una cadena en un mapa de bits. Para hacer esto, necesito crear un mapa de bits y obtener un objeto Graphics del mapa de bits, luego llamar DrawString() en ese objeto Graphics.Determinación del tamaño del mapa de bits para contener la cadena de texto

El problema es, ¿cómo sé, de antemano, cuando creo mi mapa de bits inicial, cuántos píxeles de ancho y largo para hacer mi mapa de bits?

Sé que esto tiene algo que ver con MeasureString(), pero para usar MeasureString(), necesito obtener el objeto Graphics del mapa de bits. No puedo obtener eso hasta que haya creado el mapa de bits, lo que no puedo hacer hasta que sepa el tamaño. ¡Parece una paradoja circular!

¿Alguien me ayuda por favor en esto?

Respuesta

6

Puede crear un pequeño mapa de bits estática para medir el

private static Bitmap measureBmp = new Bitmap(1, 1); 

A continuación, medir como de costumbre

using (var measureGraphics = Graphics.FromImage(measureBmp)) 
{ 
    var stringSize = measureGraphics.MeasureString("measureString", this.Font); 
} 

El tamaño de la imagen no afecta a la medición

+0

Sí, pero creó un mapa de bits de 1x1. Mi mapa de bits obviamente tendrá que ser más grande que eso. – Icemanind

+0

icemanind: el mapa de bits 1x1 es solo para medir. Una vez que obtienes 'stringSize', puedes crear el mapa de bits de tamaño adecuado. – Gabe

+0

@icemanind, el tamaño del mapa de bits no afecta a MeasureString, incluso si el mapa de bits es 1x1, esto devuelve 'stringSize: {Width = 77.4010315 Height = 13.8251925}' en mi computadora. –

0

que tenía que hacer esto en Java, en el que creé un elemento de gráficos no asociado para acceder a la estructura que necesitaba. Es posible que pueda salirse con la suya creando un mapa de bits 1x1 solo para obtener acceso al objeto Graphics. Entonces, déjalo ser coleccionado.

La esperanza aquí es que las dimensiones del elemento gráfico no afectarán el resultado de MeasureString.

Cuestiones relacionadas