我正在编写一个应用程序,它的唯一目的是定期下载一些图像,并将它们显示在一个活瓷砖中。我希望能够每隔30分钟更新4-8张图片,所以我需要使用CycleTile。下载图片并将它们放入活瓷砖中是非常直接的。真正的刺激因素是在每个图像上添加文本。
如果只是两张图片,我会用一个翻转瓷砖,在前面显示一个,在背面显示一个。然后,我将添加文本,分配一个不同的瓷砖标题的正面和背面。但是,由于我需要显示两个以上的图像,我需要使用CycleTile。而且这种方法不适用于CycleTile。(但是,如果我错了,请纠正我!)
所以我的下一个想法是在一个TextBlock上覆盖一个WriteableBitmap。这可以工作,但我认为它会变得复杂,考虑到诸如:不同的图像分辨率,中/大型瓷砖布局,以及不同的屏幕PPI等因素。我肯定我能搞清楚,但看起来.凌乱。
有更好的方法吗?有什么我忽略的瓷砖特征吗?
总而言之,我的要求是:
发布于 2013-06-15 05:48:32
对于第一项,您应该能够使用来自WriteableBitmapEx项目的Blit方法合并尽可能多的图像。由于您可以合并您的图像以任何您想要的方式,您可以确保他们涵盖宽的瓷砖宽度和任何你需要的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;
}
}
当然,您也可以传递文本块,或者配置文本块的选项。但我想展示一下,你可以如何格式化文本,不管你想要什么。
背景任务涵盖了您的第三个请求。在您的电话解决方案中,添加一个新的项目,您可以选择背景任务。让这个调用(您的代码)来更新图像是相当简单的。诺基亚甚至创建了一个穿行,说明如何添加一个带有代码示例的例子。
https://stackoverflow.com/questions/15083325
复制相似问题