Windows Phone 7 sdk ile uğraşıyorum ve ekranı eski moda bir dijital ekran gibi göstermeye çalışıyorum. Şu anda, bu güzel dijital saatlerden biri gibi metni "parıltı" yapmanın yollarını bulmaya çalışıyorum. Bu, shader'ları kullanmaya çalıştığınızı varsayardım, ama Windows Phone 7 işletim sisteminde kullanım için gölgelendiriciler devre dışı bırakılmış gibi görünüyor. Herhangi bir fikir? Daha spesifik olmak gerekirse, metnin bir ışık kaynağı gibi görünmesini ve gerçek fonttan rengin "boşa gitmesini" istiyorum.Bir parlama efekti elde etmenin en iyi yolu Windows Phone 7
cevap
Ben onun yazı tipi olarak bir resim veya WriteableBitmap ile bulanık arasında bir seçim diyebilirim. Önceden hazırlanmış bir yazı resmin kullanılması
istediğiniz gibi harfleri karmaşık hale getirmek ve iyi bir performans olmalıdır sağlar. SpriteFont2, SpriteSheet'i kızdırma, kontur, gölge gibi efektlerle oluşturabildiği ve harf konumlarını içeren bir xml dosyasını dışa aktardığı için kullanışlıdır. Oluşturulan png ve xml dosyalarını çözümünüze ekleyin ve İçeriği Oluştur eylemini de System.Xml.Linq.
Aşağıdaki sınıf kullanılabilir.
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();
}
}
Kullanımı
//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");
Bir BoxBlur uygulaması here bakın veya WriteableBitmapEx.Convolute kullanmak bulanıklık istiyorsanız.
Teşekkürler! SpriteFont2'yi kullanmak harika bir öneridir. – CoderDennis
Işığı vermek istediğiniz TextBlock'un bir kopyasını oluşturmalısınız. Yeni öğenin text özelliğini, orijinal öğenin text özelliğine (ElementName binding kullanarak) bağlayın. Orijinal öğe üzerinde değişeceğini düşündüğünüz konum/yükseklik/genişlik vb. Yeni öğenin yanı sıra bir Blur Efekti üzerinde bir saydamlık ayarlayın. Bu size istediğiniz serin bir parlama efekti verecektir.
Bu sorunun diğer yanıtı hakkındaki yorumlarda belirtildiği gibi, Etkiler kaldırıldı ve artık WP7'de desteklenmiyor. – CoderDennis
Düşüncenin yolu bana bir çözüm yol açtı, teşekkürler – CuiPengFei
İlk 2, şekillerde parıltı efektleridir. Bir yazı tahtası yazı karakterleri üzerinde çalışmak zor olurdu gibi görünüyor. 3. makalenizdeki canlı demo ve kaynak bağlantıları bozuldu. – CoderDennis
- 1. Perl'de UTC ofsetini elde etmenin en iyi yolu nedir?
- 2. R'nin grep sürümünde dönüşüm elde etmenin en iyi yolu?
- 3. Son eklenen satırın kimliğini elde etmenin en iyi yolu SQLite
- 4. Açıklamalarla @Outowired @Lazy @Components'ı elde etmenin en iyi yolu?
- 5. Firefox'ta metin alanında satır numaralarını elde etmenin en iyi yolu
- 6. Film dosyalarından kapalı altyazı elde etmenin en iyi yolu nedir?
- 7. Windows Phone 7 - sayfalarında
- 8. Windows Phone 7: SQLite
- 9. Windows Phone 7
- 10. Silverlight 2: Metin Parlama efekti?
- 11. Windows Phone 7 düğmeleri
- 12. Windows Phone 7
- 13. Windows Phone 7: URI'lerle Tombstone?
- 14. Bilgisayar adını bir IP adresine göre uzaktan elde etmenin en iyi yolu nedir?
- 15. MessageBox.Show Windows Phone 7 için
- 16. Windows Phone Masaüstünde 7 Stiller
- 17. Windows Phone 7 düğmesi "kenarlıklar"
- 18. Windows Phone 7 için Drag'n'Drop sortable Listbox
- 19. Gensim kullanarak LDA Modeli için en uygun konu sayısını elde etmenin en iyi yolu nedir?
- 20. Groovy'deki bir Set'ten tek bir değer elde etmenin en iyi yolu nedir?
- 21. Belirli bir CocoaPod sürümünü çalışma zamanında elde etmenin en iyi yolu nedir?
- 22. Geçerli Windows Phone 7 Cihazının Kimliğini Alın
- 23. conditional_back_inserter gibi bir şey taklit etmenin en iyi yolu?
- 24. Bir RedirectToAction'ı test etmenin en iyi yolu nedir?
- 25. Bir Yerel iOS Uygulamasını React etmenin en iyi yolu nedir?
- 26. Kilitlenme Oturum aç Windows Phone 7 aygıt
- 27. Temiz git sanal alanını elde etmenin en etkili yolu nedir?
- 28. Windows Phone 7 Uygulama Başlığı Kodunu Kullanın
- 29. ListBox.Itemtemplate nasıl oluşturulur, Windows Phone 7
- 30. Windows Phone Üzerinden Uygulamaların Dağıtımı 7
, bunların 4.0 sürümleri yerine silverlight ve C# olarak yeniden etiketlendi. winphone7 silverlight 4 kullanmaz, onun 3.custom gümüş versiyonu. –
Bazı Hazır Brek'e batırın :) –