Приложение Windows Phone 8.1 всегда масштабирует изображения

Я преобразовал одно из своих приложений Магазина Windows в универсальное приложение и добавил к нему проект Windows Phone.

При рендеринге графики (изображение и прямоугольники с помощью ImageBrushes) графика всегда масштабируется, даже если я установил для нее значение «не масштабировать», что не соответствует ожидаемому результату.

Пример: у меня есть изображение с именем test.scale-100.png размером 27*27 пикселей. Одно и то же изображение существует как изображение размером 32*32 пикселя с именем test.scale-140.png и другое с именем test.scale-240.png размером 59*59 пикселей.

Я использую это изображение в макете по умолчанию следующим образом:

<Image x:Name="imgTest" Source="/Assets/test.png" Stretch="None"/>

Когда я запускаю свое приложение с эмулятором Windows Phone 8.1 WVGA 4 дюйма, изображение 32 * 32 отображается с правильными границами, но фактическое изображение масштабируется (я вижу это довольно просто, потому что содержимое становится размытым).

То же самое происходит, когда я запускаю приложение с эмулятором Windows Phone 8.1 1080p 6 дюймов; Изображение 59*59 пикселей, но изображение немного размыто.

Как я могу заставить масштабирование не выполняться?

Заранее благодарю за любую помощь!


person Mikael    schedule 04.05.2014    source источник
comment
Вы не указываете явный размер изображения в пикселях, так почему бы его не масштабировать? Вы должны использовать изображения с более высоким разрешением во всех случаях и позволять ОС уменьшать масштаб по мере необходимости.   -  person Claus Jørgensen    schedule 06.05.2014
comment
Спасибо за ваш ответ, но даже когда я указываю точную ширину, как показано ниже: ‹Источник изображения=Assets/ch2.png Ширина=53 Высота=53 Растяжение=Нет/› Изображение не масштабируется должным образом при работе в WVGA. Фактическое изображение масштабируется до 55 * 55 пикселей, но если его поместить в тег ‹border› с шириной и высотой, установленными следующим образом: ‹Border Width=53 Height=53 Background=Lime› я вижу, что граница масштабируется до точных 64 * 64 пикселей, но изображение внутри с теми же размерами по-прежнему масштабируется до 55 * 55 пикселей. Я хотел бы использовать необработанный образ и избежать масштабирования ОС.   -  person Mikael    schedule 06.05.2014
comment
Вам не нужно явно указывать размер пикселя, единственная причина, по которой вы получаете немного размытое изображение для WVGA и 1080p, заключается в том, что WVGA масштабируется на 120%, поэтому он будет проверять масштаб test.scale-120.png и 1080p на 220%, поэтому ОС проверит наличие test.scale-220.png, но вы не передаете эти изображения, поэтому она захватит ближайшее масштабированное изображение, т. е. для WVGA она захватит test.scale-100.png, а для 1080p — test.scale. -240.png. Просто добавьте изображения с соответствующим масштабированием, и все готово.   -  person Vyas    schedule 10.05.2014
comment
Спасибо за ответ. Это почти сработало для меня. Странная вещь, которую я обнаружил, заключалась в том, что добавление нескольких десятичных знаков для размера 100% ширины, например. 35,555556 дал гораздо лучший результат (почти без размытия) вместо использования целого числа (35). Странно, но похоже решает проблему.   -  person Mikael    schedule 15.05.2014


Ответы (3)


Я не уверена. Я тоже сейчас ищу решение. Но я обнаружил, что масштабирование не поддерживается в Windows Phone 8.1. Только приложения Магазина Windows работают с масштабированием. Взгляните на ссылку ниже.

http://msdn.microsoft.com/en-us/library/windows/apps/dn263244.aspx

Таким образом, способ масштабирования изображений заключается в использовании свойств высоты/ширины для принудительного размера изображения, или вы можете использовать BitmapImage и его свойство DecodePixelHeight/DecodePixelWidth вместе со свойствами Height/Width для декодирования изображения.

Надеюсь, поможет ;)

person user3817173    schedule 08.07.2014
comment
Вопрос в том, как отключить масштабирование, а не в том, как вручную обеспечить масштабирование - person Sebastian Lange; 08.07.2014

У меня такая же проблема, я думаю, что это ошибка ОС:

Тест 1

test.scale-100.png + 
test.scale-140.png +
test.scale-240.png 
= Blurry result

Тест 2

test.scale-240.png 
= Blurry result, again

Тест 3

test.scale-240.png renamed to test.png
= Sharp result!

Проблема возникает только с некоторыми активами, а не со всеми. В моем случае только в некоторых DataTemplates. Я думаю, что в некоторых ситуациях система неправильно масштабирует изображение, что приводит к ужасному размытию. Если оставить только изображение "масштаб-240", оно будет размытым. Если вы переименуете его, удалив «масштаб-240», он станет резким!

Таким образом, назовите изображение как test.png и остановитесь.

person marcob    schedule 25.11.2014

Как говорит MSDN:

Не используйте изображения, размер которых не кратен 5 пикселям. Единицы, не кратные 5 пикселям, могут испытывать смещение пикселей при масштабировании до 140 %, 180 % и 240 %.

https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh465362.aspx

Ваша Ширина = "53" Высота = "53" может быть проблемой неправильного поведения

person AlptraumNas    schedule 14.04.2015