【问题标题】:Resize image for Live Tile - WriteableBitmapEx调整动态磁贴的图像大小 - WriteableBitmapEx
【发布时间】:2011-12-30 21:58:37
【问题描述】:

**
找到了解决方案
因为这是一个图块,所以图像将始终被拉伸到 173 x 173!
为了避免这种情况,首先创建一个 173 x 173 的虚拟对象,并将其与调整大小的对象合并!

Rect rect = new Rect(0.0, 0.0, width, height);
WriteableBitmap bitmapDummy = new WriteableBitmap(173, 173);
bitmapDummy.Blit(rect, resized, rect, WriteableBitmapExtensions.BlendMode.None);

**

我已经创建了一个后台代理来更新我的 WP7 应用程序的动态磁贴。 但无论我尝试调整它的大小,我都没有得到好的结果!

有什么建议吗?目前我有以下代码,但我也尝试了 135 x 173 以及其他插值。

WriteableBitmap writeableBitmap = new WriteableBitmap(bitmapImage);
var resized = writeableBitmap.Resize(173, 173, System.Windows.Media.Imaging.WriteableBitmapExtensions.Interpolation.Bilinear);

下面还添加了一个小矩形来显示应用程序的标题!它的高度为 40 像素,如果图像可以在上面裁剪,那就太好了。 实际图像始终为 250 x 321 像素

【问题讨论】:

    标签: windows-phone-7 background-agents writeablebitmapex


    【解决方案1】:

    您的问题是您没有将宽度/高度计算为正确的Aspect ratio

    因此,要获得 1:1 的比例,您需要 134.735 像素的宽度和 173 像素的高度。

    这可以通过首先确定哪一边最大

    var aspect = Math.Max(bitmapImage.Width, bitmapImage.Height)
    var ratio = largest / 173;
    var width = width / ratio;
    var height = height / ratio;
    
    var resizedImage = writeableBitmap.Resize(width, height, System.Windows.Media.Imaging.WriteableBitmapExtensions.Interpolation.Bilinear);
    

    并记得设置Stretch="Uniform" 以避免将图像拉伸到不必要的比例。

    要创建一个 173x173 像素的图像,并在顶部应用其他图像,请使用 WriteableBitmapEx 中的 Blit 函数

    var tileImage = new WriteableBitmap(173, 173, ...)
    tileImage.Blit(new Rect(width, height), resizedImage, new Rect(width, height), BlendMode.None);
    

    【讨论】:

    • 克劳斯,感谢您的见解!我马上去测试!再次感谢 ;)
    • 克劳斯,不行不行!我无法设置任何 Stretch 道具,因为我只是保存图像并将 uri 用于 Live Tile。
    • 我的猜测是我需要创建一个 173 x 173 的虚拟对象并将其与新调整大小的对象合并,以避免拉伸...现在来了解如何执行此操作
    • 是的,如果不是 173x173,动态磁贴当然会尝试拉伸图像。但是无论如何,您都必须计算比率:p
    • 找到了 :) 我会将我的解决方案添加到问题中,并且确实比例必须正确;)
    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    相关资源
    最近更新 更多