estoy jugando con el teléfono 7 SDK de Windows y estoy tratando de hacer que el aspecto de la pantalla como una pantalla digital manera antigua. En este momento estoy tratando de descubrir cómo hacer que el texto "brille" como uno de esos relojes digitales geniales. Este es el tipo de cosas que asumiría que usaría para sombreadores, pero parece que los sombreadores están deshabilitados para usar en el sistema operativo Windows Phone 7. ¿Algunas ideas? Para ser más específico, quiero que el texto se vea como si fuera una fuente de luz y que el color "sangra" ligeramente de la fuente real.mejor manera de conseguir un teléfono de Windows 7 efecto de brillo
Respuesta
Yo diría que es una elección entre usar una imagen como fuente o desenfoque con WriteableBitmap.
Usando una imagen de la fuente pre-hechos le permite hacer las letras a complejos como desee y debe funcionar bien. SpriteFont2 es conveniente, ya que puede generar el SpriteSheet con efectos como resplandor, trazo, sombra y exportar un archivo xml que contiene las posiciones de las letras. Agregue los archivos png y xml generados a su solución y cambie la acción de compilación al contenido, también compruebe que ha hecho referencia a System.Xml.Linq.
Se puede usar la siguiente clase.
public static class BitmapFont
{
private class FontInfo
{
public FontInfo(WriteableBitmap image, Dictionary<char, Rect> metrics)
{
this.Image = image;
this.Metrics = metrics;
}
public WriteableBitmap Image { get; private set; }
public Dictionary<char, Rect> Metrics { get; private set; }
}
private static Dictionary<string, FontInfo> fonts = new Dictionary<string, FontInfo>();
public static void RegisterFont(string fontFile, string fontMetricsFile)
{
string name = System.IO.Path.GetFileNameWithoutExtension(fontFile);
BitmapImage image = new BitmapImage();
image.SetSource(App.GetResourceStream(new Uri(fontFile,UriKind.Relative)).Stream);
var metrics = XDocument.Load(fontMetricsFile);
var dict = (from c in metrics.Root.Elements()
let key = (char)((int)c.Attribute("key"))
let rect = new Rect((int)c.Element("x"), (int)c.Element("y"), (int)c.Element("width"), (int)c.Element("height"))
select new { Char = key, Metrics = rect }).ToDictionary(x => x.Char, x => x.Metrics);
fonts.Add(name,new FontInfo(new WriteableBitmap(image),dict));
}
public static WriteableBitmap DrawFont(string text, string fontName)
{
var font = fonts[fontName];
var letters = text.Select(x => font.Metrics[x]).ToArray();
var height = (int)letters.Max(x => x.Height);
var width = (int)letters.Sum(x => x.Width);
WriteableBitmap bmp = new WriteableBitmap(width, height);
int[] source = font.Image.Pixels, dest = bmp.Pixels;
int sourceWidth = font.Image.PixelWidth;
int destX = 0;
foreach (var letter in letters)
{
for (int sourceY = (int)letter.Y, destY = 0; destY < letter.Height; sourceY++, destY++)
{
Array.Copy(source, (sourceY * sourceWidth) + (int)letter.X, dest, (destY * width) + destX, (int)letter.Width);
}
destX += (int)letter.Width;
}
return bmp;
}
public static Rectangle[] GetElements(string text, string fontName)
{
var font = fonts[fontName];
return (from c in text
let r = font.Metrics[c]
select new Rectangle
{
Width = r.Width,
Height = r.Height,
Fill = new ImageBrush {
ImageSource = font.Image,
AlignmentX=AlignmentX.Left,
AlignmentY=AlignmentY.Top,
Transform = new TranslateTransform { X = -r.X, Y = -r.Y },
Stretch=Stretch.None
},
}).ToArray();
}
}
Uso
//Register the font once.
BitmapFont.RegisterFont("Font.png", "Metrics.xml");
//Draws the text to a new bitmap, font name is image name without extension.
image.Source = BitmapFont.DrawFont(DateTime.Now.ToLongTimeString(), "Font");
//Alternatively put these elements in a horizontal StackPanel, or ItemsControl
//This doesn't create any new bitmaps and should be more efficient.
//You could alter the method to transform each letter too.
BitmapFont.GetElements(DateTime.Now.ToLongTimeString(), "Font");
Si desea difuminar ver una aplicación o uso BoxBlur hereWriteableBitmapEx.Convolute.
Gracias! Usar SpriteFont2 es una gran sugerencia. – CoderDennis
debe hacer una copia de la TextBlock se quiere dar el brillo a. Vincule la propiedad de texto del nuevo elemento con la propiedad de texto del elemento original (usando el enlace ElementName). Haz lo mismo para la ubicación/altura/ancho, etc. o cualquier otra propiedad que sientas que cambiará en el artículo original. Establezca una transparencia en el nuevo elemento, así como un efecto de desenfoque. Esto le dará un efecto de brillo fresco que desee.
Como se señala en los comentarios de la otra respuesta a esta pregunta, los efectos se eliminaron y ya no son compatibles con WP7. – CoderDennis
la forma de pensar me llevó a una solución, gracias – CuiPengFei
Varias maneras
Using a Border for a Glow Effect in Silverlight 3
Creating a Glowing effect in Silverlight
creo que todos ellos pueden ser utilizados en WP7 así.
Los primeros 2 son efectos de brillo en las formas. Parece que sería difícil hacer que un huésped trabaje en caracteres de fuente. La demostración en vivo y los enlaces de origen en su 3er artículo están rotos. – CoderDennis
- 1. C# configuración brillo de pantalla Windows 7
- 2. Efecto de sonido en Windows Phone 7
- 3. teléfono de Windows 7 Botón de búsqueda
- 4. Efecto de brillo interior en WPF
- 5. Efecto de brillo interior del botón
- 6. Efecto de brillo exterior en el borde
- 7. ORM asignador para Windows 7 teléfono
- 8. Cómo dibujar un borde iluminado (efecto de brillo exterior)?
- 9. Eliminación del efecto brillo de los botones en un UINavigationBar
- 10. Efecto de brillo de pantalla en WPF o Silverlight
- 11. pregunta de efecto de brillo de interfaz de iPhone
- 12. teléfono 7 Manejo de Windows retroceso KeyDown evento
- 13. Obtención de coordenadas GPS en el teléfono Windows 7
- 14. cómo deslizar el dedo en el teléfono de Windows 7
- 15. Cambiar la configuración del teléfono de Windows Phone 7 App
- 16. efecto de brillo de animación de Android en imageview
- 17. mejor manera de conseguir todos los dígitos de una cadena
- 18. ¿Cuál es una buena manera de diseñar un reproductor multimedia en un teléfono con Windows?
- 19. Cómo eliminar elementos de un cuadro de lista en el teléfono con Windows 7?
- 20. ¿De verdad necesitas un teléfono para desarrollar aplicaciones de Windows Phone 7?
- 21. Curl para conseguir una página web https en Windows 7
- 22. ¿Puede instalar sus propias aplicaciones en su teléfono Windows 7?
- 23. Cambiar brillo de la pantalla (C#)
- 24. ¿Cómo hacer efecto de brillo alrededor de un mapa de bits?
- 25. ¿Existe alguna manera de anular el efecto de brillo de sobrerrecorrido en la vista de lista en Gingerbread
- 26. Control de vibración para Windows Phone 7
- 27. Android: ¿Cómo lograr el efecto de brillo cuando se presiona largamente un elemento de la lista?
- 28. mejor manera de conseguir los archivos de un directorio filtrada por cierta extensión en php
- 29. Reproduzca un archivo de audio en Windows 7 Phone
- 30. Ayuda con el efecto Pixel Shader para brillo y contraste
reemplazado a Silverlight y C# en lugar de las versiones 4.0 de esos. winphone7 no usa Silverlight 4, es una versión 3.custom de Silverlight. –
Sumerja en algunos Ready Brek :) –