Изменить размер изображения для Live Tile - 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, а также другой интерполяции.

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

Существует также небольшой прямоугольник, добавленный ниже, чтобы показать название приложения! Это 40px в высоту, было бы здорово, если изображение будет обрезано выше. Фактическое изображение всегда 250 на 321 пикселей

Текущая плитка

Фактическое изображение

1 ответ

Решение

Ваша проблема в том, что вы не рассчитываете ширину / высоту для правильного соотношения сторон.

Таким образом, чтобы получить пропорции 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 пикселей с другим изображением, примененным сверху, используйте функцию Blit из WriteableBitmapEx.

var tileImage = new WriteableBitmap(173, 173, ...)
tileImage.Blit(new Rect(width, height), resizedImage, new Rect(width, height), BlendMode.None);
Другие вопросы по тегам