调整Live Tile的图像 - WriteableBitmapEx

时间:2011-12-30 21:58:38

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

**
找到了解决方案
由于这是一块瓷砖,因此图像总是会被173扩展到173!
为了避免这种情况,首先要通过173创建一个虚拟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乘173和其他Interpolation。

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

下面还添加了一个小矩形来显示应用程序的标题!它的高度为40像素,如果将图像裁剪在上面会很棒。 实际图像总是250 x 321px

Current Tile

Actual image

1 个答案:

答案 0 :(得分:5)

您的问题是,您没有将宽度/高度计算为正确的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);