Плоская проекция и масштаб, вызывающие размытие в silverlight
-
20-09-2019 - |
Вопрос
ОК,
Итак, я попытался создать приложение, которое полагается на масштабирование изображений с учетом индивидуального фактора.Затем эти изображения можно перевернуть, но при использовании анимации, работающей на повороте проекционной плоскости.
Проблема возникает, когда изображение одновременно масштабируется и поворачивается.По какой-то причине он начинает размываться, тогда как немасштабированное изображение не размывается.
Кроме того, если вы посмотрите на пример изображения ниже (верх масштабируется и поворачивается, низ поворачивается), проекция верхнего изображения даже не кажется правильной.Это слишком горизонтально.
Это это код для тестового приложения:
<UserControl x:Class="SilverlightApplication1.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<Canvas x:Name="LayoutRoot" Background="White">
<Border Canvas.Top="25" Canvas.Left="50">
<Border.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="3" ScaleY="3" />
</TransformGroup>
</Border.RenderTransform>
<Border.Projection>
<PlaneProjection RotationY="45"/>
</Border.Projection>
<Image Source="bw-test-pattern.jpg" Width="50" Height="40"/>
</Border>
<Border Canvas.Top="150" Canvas.Left="50">
<Border.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="1" />
</TransformGroup>
</Border.RenderTransform>
<Border.Projection>
<PlaneProjection RotationY="45"/>
</Border.Projection>
<Image Source="bw-test-pattern.jpg" Width="150" Height="120"/>
</Border>
</Canvas>
</UserControl>
Так что, если бы кто-нибудь мог пролить какой-либо свет на то, почему это может происходить, я был бы очень признателен.Предложения также приветствуются!:)
** Обновление **
Просто чтобы уточнить, если поворот плоскости проекции равен 0, изображение становится нерезким, поэтому размытое изображение получается только во время поворота.
Решение
Ширина верхнего изображения установлена равной 50, а высота - 40.Таким образом, он уменьшен в масштабе.После этого вы масштабируете его до нужного размера 150, 120.Я предполагаю, что Silverlight уменьшает масштаб изображения и не сохраняет исходный размер из-за оптимизации производительности.Оставьте масштаб без изменения и установите правильную ширину и высоту для первого изображения.
Другие советы
Похоже, что верхнее изображение фильтруется по мере его отрисовки.Из вашего кода у вас есть:
<Image Source="bw-test-pattern.jpg" Width="50" Height="40"/>
для верхнего изображения и
<Image Source="bw-test-pattern.jpg" Width="150" Height="120"/>
для самого нижнего.У вас разные размеры изображения, поэтому верхнее может быть увеличено и, следовательно, размыто при интерполяции недостающих пикселей.
Я не знаком с silverlight, поэтому не знаю, как вы будете управлять параметрами фильтрации, но если установить верхнюю строку выше такой же, как и нижнюю, это может исправить.