我正在编写一个应用程序,其唯一目的是定期下载一些图像并将它们显示在动态磁贴中。我希望能够每三十分钟左右用 4-8 张图像更新磁贴,因此我需要使用 CycleTile。下载图像并将它们放入动态磁贴中非常简单。真正的关键是在每张图片上添加文字。
如果只有两张图片,我会使用翻转图 block ,一张显示在正面,一张显示在背面。然后我会通过为正面和背面分配不同的图 block 标题来添加文本。但是,由于我需要显示 2 个以上的图像,因此我需要使用 CycleTile。而且这种方法不适用于 CycleTile。 (但是,如果我错了,请纠正我!)
所以我的下一个想法是在 WriteableBitmap 上叠加一个 TextBlock。这可能行得通,但我认为考虑到以下因素,它会很快变得复杂:不同的图像分辨率、中型/大型磁贴布局和不同的屏幕 PPI。我确定我能弄明白,但它看起来……很乱。
有更好的方法吗?我忽略了一些 Tile 功能吗?
总而言之,我的要求是:
- 使用动态磁贴显示 4-8 张图片。
- 每张图片都需要关联一些文字。
- 每三十分钟左右更新一次图片。
- 需要扩展到宽磁贴。
- 需要扩展到具有更高 PPI 屏幕的手机。
最佳答案
对于第一项,您应该能够使用 WriteableBitmapEx 中的 Blit 方法将尽可能多的图像合并在一起。项目。由于您可以以任何您想要的方式将图像合并在一起,因此您可以确保它们覆盖宽的图 block 宽度和您需要的任何 ppi。
为了覆盖第二个项目,以下将在图像上覆盖文本:
private static ImageSource createBitmapImageWithImage(string text, int x, int y, Color textColor, BitmapSource bitmapSource)
{
using(var mem = new MemoryStream())
{
//Create Formatted Text
var textBlock = new TextBlock
{
Text = text,
Foreground = new SolidColorBrush(textColor),
FontFamily = new FontFamily("Courier New"),
FontSize = 40
};
//Moves an object two dimensionally
var tf = new TranslateTransform
{
X = x,
Y = y
};
//Overlay text on existing image
var bmpImage = new WriteableBitmap(bitmapSource);
bmpImage.Render(textBlock, tf);
bmpImage.Invalidate();
//Convert back into bitmap
bmpImage.SaveJpeg(mem, bmpImage.PixelWidth, bmpImage.PixelHeight, 0, 100);
mem.Seek(0, SeekOrigin.Begin);
var image = new BitmapImage();
image.SetSource(mem);
return image;
}
}
当然你也可以传入文本 block ,或者配置文本 block 的选项。但我想展示如何根据需要设置文本格式。
您的第三个请求包含在 background tasks 中.在您的手机解决方案中,添加一个新项目,您可以选择后台任务。调用您的代码来更新图像非常简单。诺基亚甚至创造了一个 walk through关于如何添加代码示例。
关于windows-phone-7 - 向循环磁贴添加文本 (Windows Phone 8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15083325/