2010-02-09 11 views
5

En C# normal, es fácil dibujar en un mapa de bits utilizando el método Grpahics.DrawString(). Silverlight parece haber eliminado los objetos de mapa de bits y Graphics ya no está disponible. Entonces ... ¿Cómo tengo la intención de manipular/crear un mapa de bits al usar Silverlight? Si sirve, estoy usando Silverlight 3.¿Cómo se dibuja una cadena en un mapa de bits en Silverlight?

Déjame decirte lo que estoy haciendo. Me están dando una plantilla, básicamente una imagen renderizada previamente. El usuario puede seleccionar entre varias imágenes e ingresar el texto deseado. Luego lo renderizo en la imagen, ajustando el tamaño, etc. dentro de los límites y centrándolo en el área predefinida de la imagen. Si puedo calcular el tamaño (como en el método MeasureString) y luego dibujar la cadena (como en el método Graphics.DrawString) estaría bien. La verdadera pregunta, sin importar por qué quiero poder hacer esto, es ¿se puede hacer?

+2

Siempre hay una preocupación por parte de aquellos que dan consejos que es apropiado para el problema en cuestión. No saber por qué alguien quiere hacer algo (especialmente algo desacertado en la superficie) nos hace sentir incómodos.Proporcionar el motivo por el cual __why__ puede permitir que alguien brinde una solución más latteral que quizás aún no haya considerado. – AnthonyWJones

Respuesta

3

La pregunta es: ¿por qué quieres? ¿Por qué no usar un TextBlock?

Si está intentando generar dinámicamente una imagen, use los controles estándar de Silverlight/WPF (incluido TextBlock) y render en un WritableBitmap.

Editar:

Ok, que ha actualizado y ampliado, lo que me da más para seguir adelante. Lamentablemente, no te va a gustar la respuesta. En primer lugar, tenga en cuenta que Silverlight y WPF en general se basan en vectores y están destinados a ser utilizados como tales. Aunque el lienzo le permite realizar manipulaciones de pseudopíxeles, no puede ser tan preciso como el píxel de la vieja escuela. Este es un factor de tu medio. Si tiene que medir las cosas de la manera que desea medirlas, le sugiero que cree sus imágenes en un servidor remoto y las transmita a su aplicación Silverlight.

Puede calcular el tamaño en pantalla del texto representado mediante un TextBlock utilizando las propiedades ActualWidth y ActualHeight. Pero solo funciona en un control ya renderizado. Algo como MeasureString simplemente no está disponible en Silverlight. Según la descripción de su aplicación, parte de la interacción del usuario puede lograr lo que desea. El usuario selecciona la imagen, ingresa el texto y se muestra una vista previa. El usuario puede ajustar el ancho y el alto de las diversas áreas de texto hasta que esté satisfecho, momento en el que puede tomar una instantánea utilizando el método de renderizado que me gustaba anteriormente.

+0

OK ... Entonces, ¿cómo iba a hacer eso? Déjame decirte lo que estoy haciendo. Me dan una plantilla, básicamente una imagen renderizada previamente. El usuario puede seleccionar entre varias imágenes e ingresar el texto deseado. Luego lo renderizo en la imagen, ajustando el tamaño, etc. dentro de los límites y centrándolo en el área predefinida de la imagen. Si puedo calcular el tamaño (como en el método MeasureString) y luego dibujar la cadena dada (como en el método Graphics.DrawString) usando su técnica, entonces estaría bien. La verdadera pregunta, sin importar por qué quiero poder hacer esto, es ¿se puede hacer? – Spenduku

+0

@Spencer: debes mover ese comentario a tu pregunta. –

+0

La respuesta no es la que estaba esperando, pero parece ser la única forma de deshacerse. ¡Así que gracias! :) – Spenduku

3

Lo siguiente puede funcionar, es un poco nebuloso porque aún no lo he intentado.

El objeto que busca es el WritableBitmap.

Crea un árbol visual, por ejemplo, cree uno mismo como Grid o Canvas (no está agregando esto a la interfaz de usuario). Agregue a ella la imagen seleccionada y un TextBlock posicionado y dimensionado como prefiera.

Crea un nuevo WritableBitmap de un tamaño específico o usando la imagen seleccionada para inicializarlo.

Utilice el método WritableBitmapRender que pasa por encima de la raíz Grid o Canvas a ella.

Ahora tiene un mapa de bits que debería poder usar para hacer lo que fuera necesario para hacer todo lo que se necesita para saltar de este aro.

Cuestiones relacionadas