3

**
找到解决方案
因为这是一个图块,所以图像总是会被拉伸到 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 像素

当前瓷砖

实际图像

4

1 回答 1

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);
于 2012-01-05T13:56:45.723 回答