【问题标题】:Adding Text to Cycle Tiles (Windows Phone 8)向循环图块添加文本 (Windows Phone 8)
【发布时间】:2013-02-26 07:08:18
【问题描述】:

我正在编写一个应用程序,其唯一目的是定期下载一些图像并将它们显示在动态磁贴中。我希望能够每三十分钟左右用 4-8 张图像更新磁贴,所以我需要使用 CycleTile。下载图像并将它们放入实时磁贴非常简单。真正的踢球者是在每个图像上添加文本。

如果只有两张图片,我会使用翻转图块,一张在正面,一张在背面。然后我会通过为正面和背面分配不同的磁贴标题来添加文本。但是,由于我需要显示 2 张以上的图像,因此我需要使用 CycleTile。这种方法不适用于 CycleTile。 (但如果我错了,请纠正我!)

所以我的下一个想法是在 WriteableBitmap 上覆盖一个 TextBlock。这可以工作,但我认为考虑到以下因素,它会很快变得复杂:不同的图像分辨率、中/大瓷砖布局和不同的屏幕 PPI。我敢肯定我能弄明白,但它似乎……很乱。

有没有更好的方法来做到这一点?我忽略了一些 Tile 功能吗?

总结一下我的要求是:

  1. 使用动态磁贴显示 4-8 张图片。
  2. 每个图像都需要有一些与之关联的文本。
  3. 每三十分钟左右更新一次图像。
  4. 需要扩展到宽图块。
  5. 需要扩展到具有更高 PPI 屏幕的手机。

【问题讨论】:

    标签: windows-phone-7 image-processing windows-phone-8 windows-phone live-tile


    【解决方案1】:

    对于第一项,您应该能够使用 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;
        }
    }
    

    当然你也可以传入文本块,或者配置文本块的选项。但我想展示如何根据需要设置文本格式。

    background tasks 涵盖了您的第三个请求。在您的手机解决方案中,添加一个新项目,您可以选择后台任务。让这个调用你的代码来更新图像是相当简单的。诺基亚甚至创建了一个walk through 来说明如何添加代码示例。

    【讨论】:

    • 这太棒了!看起来这正是我所需要的。谢谢卡施!随机问题...您知道函数名称“Invalidate”背后的词源吗? :)
    • 我能找到的最好的是msdn.microsoft.com/en-us/library/… 我不会这样命名它,但是当你想到它时它是有道理的,而不是当你第一次遇到它时。
    • 嗯,该链接实际上提供了非常好的描述!直到现在,这对我来说从来没有意义。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多