Tôi đang rối tung xung quanh với Windows Phone 7 sdk và tôi đang cố gắng làm cho màn hình trông giống như một màn hình hiển thị kỹ thuật số thời trang cũ. Ngay bây giờ tôi đang cố gắng tìm ra cách làm cho văn bản "phát sáng" như một trong những đồng hồ kỹ thuật số tuyệt vời đó. Đây là loại điều tôi muốn giả sử bạn sẽ nhìn vào sử dụng shaders cho, nhưng có vẻ như là shaders bị vô hiệu hóa để sử dụng trên Windows Phone 7 OS. Bất kỳ ý tưởng? Để cụ thể hơn, tôi muốn văn bản trông như thể đó là nguồn sáng và có màu "chảy máu" ra một chút so với phông chữ thực tế.Cách tốt nhất để có được hiệu ứng ánh sáng cửa sổ điện thoại 7
Trả lời
Tôi muốn nói sự lựa chọn giữa việc sử dụng hình ảnh làm phông chữ hoặc làm mờ bằng WriteableBitmap.
Sử dụng hình ảnh phông chữ được tạo sẵn cho phép bạn tạo các chữ cái phức tạp như bạn muốn và sẽ hoạt động tốt. SpriteFont2 thuận tiện vì nó có thể tạo ra SpriteSheet với các hiệu ứng như phát sáng, đột quỵ, đổ bóng và xuất tệp xml chứa các vị trí chữ cái. Thêm tệp png và xml được tạo vào giải pháp của bạn và thay đổi Hành động Xây dựng thành nội dung cũng kiểm tra bạn đã tham chiếu System.Xml.Linq.
Lớp sau có thể được sử dụng.
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();
}
}
Cách sử dụng
//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");
Nếu bạn muốn làm mờ nhìn thấy một thi BoxBlur here hoặc sử dụng WriteableBitmapEx.Convolute.
Cảm ơn! Sử dụng SpriteFont2 là một gợi ý tuyệt vời. – CoderDennis
Bạn nên tạo một bản sao của TextBlock mà bạn muốn cung cấp ánh sáng. Liên kết thuộc tính văn bản của mục mới với thuộc tính văn bản của mục gốc (sử dụng liên kết ElementName). Làm tương tự cho vị trí/chiều cao/chiều rộng vv hoặc bất kỳ tài sản nào khác mà bạn cảm thấy sẽ thay đổi trên mục gốc. Đặt độ trong suốt trên mục mới cũng như Hiệu ứng mờ. Điều này sẽ cung cấp cho bạn một hiệu ứng ánh sáng mát mẻ mà bạn muốn.
Như đã lưu ý trong các nhận xét về câu trả lời khác cho câu hỏi này, Hiệu ứng đã bị xóa và không còn được hỗ trợ trong WP7 nữa. – CoderDennis
cách suy nghĩ đã dẫn tôi đến một giải pháp, cảm ơn – CuiPengFei
Một số cách
Using a Border for a Glow Effect in Silverlight 3
Creating a Glowing effect in Silverlight
Tôi tin rằng tất cả chúng có thể được sử dụng trong WP7 là tốt.
Đầu tiên 2 là hiệu ứng ánh sáng trên hình dạng. Có vẻ như sẽ khó khăn để làm một công việc nội trú trên các ký tự phông chữ. Các liên kết nguồn và demo trực tiếp trong bài viết thứ 3 của bạn bị hỏng. – CoderDennis
- 1. Hiệu ứng âm thanh trong cửa sổ điện thoại 7
- 2. cách tạo hộp thoại xác nhận trong cửa sổ điện thoại 7?
- 3. chủ đề trong cửa sổ điện thoại (sáng hoặc tối) bằng cách sử dụng C#
- 4. Cách duyệt nội dung của Tệp trong điện thoại cửa sổ 7?
- 5. Xóa cửa sổ bóng/ánh sáng khỏi Visual Studio 2012
- 6. Quảng cáo có thể cuộn trong cửa sổ điện thoại 7
- 7. Thực tiễn tốt nhất để mở một cửa sổ mới trong ánh sáng MVVM với thông số
- 8. cầm tay có cửa sổ nhúng 7
- 9. asp.net mvc, jquery điện thoại di động, thực hành tốt nhất về kiến trúc điện thoại
- 10. Mức độ tin cậy của GPS trên điện thoại cửa sổ 7
- 11. nơi để tìm các cửa sổ tiêu chuẩn điện thoại 8 biểu tượng thanh ứng dụng?
- 12. Làm cách nào để sử dụng chủ đề ánh sáng trong Windows Phone 7?
- 13. Quét mã vạch cửa sổ điện thoại 8
- 14. Cách tốt nhất để đăng ký người dùng từ ứng dụng điện thoại
- 15. cách phát âm thanh qua tai nghe chỉ trong cửa sổ điện thoại 8 ứng dụng
- 16. Xóa mục nhập trong cửa sổ xoài điện thoại
- 17. Vô hiệu hóa hành vi cuộn dọc của trình di chuyển trong cửa sổ điện thoại
- 18. giao diện iphone hiệu ứng ánh sáng câu hỏi
- 19. hiệu ứng ánh sáng động trên android trên imageview
- 20. tạo ứng dụng trò chuyện trên điện thoại di động với điện thoại - chiến lược tốt nhất?
- 21. Làm thế nào tôi có thể gỡ lỗi ứng dụng của mình trong cửa sổ điện thoại 8?
- 22. Phát tệp âm thanh trong Windows 7 Điện thoại
- 23. Cách bật FIPS trên cửa sổ 7
- 24. Plugin Chrome để có kích thước cửa sổ điện thoại thông minh
- 25. Bạn có cần giấy phép để phát triển điện thoại cửa sổ và ứng dụng blackberry không?
- 26. quảng cáo admob không làm mới trên điện thoại của cửa sổ
- 27. IDE tốt nhất cho điện thoại di động jquery?
- 28. Wintellect PowerCollections cho Windows 7 Điện thoại?
- 29. CollectionViewSource trong ứng dụng cửa sổ tàu điện ngầm
- 30. Ứng dụng SVN UI thân thiện với người dùng tốt nhất cho Cửa sổ 7 là gì?
được gắn thẻ lại thành đèn bạc và C# thay vì phiên bản 4.0 của các phiên bản đó. winphone7 không sử dụng Silverlight 4, phiên bản 3.custom của Silverlight. –
Nhúng nó vào một số Ready Brek :) –