Изменить размер изображения для 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);