Изменить размер изображения для Live Tile - WriteableBitmapEx - PullRequest
3 голосов
/ 31 декабря 2011

**
Нашел решение
Из-за того, что это плитка, изображение всегда будет растягиваться до 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 на 321px

Current Tile

Actual image

1 Ответ

5 голосов
/ 05 января 2012

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

Таким образом, чтобы получить пропорции 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);
...