Искажение при изменении размера / масштаба изображения WPF - PullRequest
1 голос
/ 10 марта 2010

У меня есть программа, которая отображает изображение, и пользователь может изменить размер изображения в окне (например, вращая колесо мыши). Я масштабирую изображение с помощью RenderTransform, например так:

<Image x:Name="CurrentImage">
    <Image.RenderTransform>
        <TransformGroup>
            <TranslateTransform x:Name="Translate" X="0" Y="0"/>
            <ScaleTransform x:Name="Scale" ScaleX="1" ScaleY="1"/>
        </TransformGroup>
    </Image.RenderTransform>
</Image>

Тогда я просто изменяю свойства ScaleX и ScaleY. Размер изображения изменяется, как и ожидалось.

Однако в определенных масштабах изображение сильно искажается. Ниже около 20% и выше около 80% он отображается нормально, но для промежуточных разрешений некоторые или все изображения искажаются. Смотрите скриншоты ниже.

Пара других деталей:

  • 2 компьютера с Windows XP, на которых я пробовал это, имели такое же повреждение, но ноутбук с Windows 7 НЕ выявлял проблему.
  • Я также пытался заменить RenderTransform простым масштабированием изображения, используя свойства Height и Width, но это не имело значения.
  • Не все изображения имеют проблемы, и те, которые делают, иногда делают это с различными масштабными коэффициентами. Большие изображения кажутся хуже, но я не измерял систематически.
  • .NET 3.5 и .NET 4 RC оба демонстрируют поведение.

Кто-нибудь видел такое поведение раньше, и есть ли у вас мысли?

При 20% первоначального размера:

альтернативный текст http://maylark.com/Scale20.png

При 26% от исходного размера:

альтернативный текст http://maylark.com/Scale26.png

На 41% от исходного размера:

альтернативный текст http://maylark.com/Scale41.png

При 64% оригинального размера:

альтернативный текст http://maylark.com/Scale64.png

На 80% от исходного размера:

альтернативный текст http://maylark.com/Scale80.png

Ответы [ 3 ]

2 голосов
/ 11 марта 2010

Итак, после многих часов попыток изолировать проблему, я решил просто начать заново в новом решении Visual Studio и один за другим вернуть компоненты обратно.Все работало в новом решении, и, наконец, у меня были все классы обратно, и все еще работало!

Оказалось, что это настройка сборки: нефункциональная версия была многоцелевой для "Любого процессора", "но новое решение было нацелено на" x86 ".

По-видимому, в графической подсистеме Windows XP x64 для программ" Любой процессор "наблюдается сбой, потому что переключение на x86 или запуск на Vista / 7 решило проблему.проблема.

Я опубликовал это в надежде, что это спасет кого-то еще.

0 голосов
/ 11 марта 2010

Попробуйте исключить переменные. ОС, аппаратное обеспечение и драйверы (как указано в первом ответе), а также форматы изображений, которые вы используете. Вы упомянули, что не все изображения имеют проблему? Есть ли различия с этими форматами изображений? например. Битовая глубина, цвет и т. Д. Также вы можете изменить размер изображения в каком-либо другом инструменте, скажем, IrfanView, и создать те же проблемы. Это может помочь указать на проблему с драйвером.

То, как рендеринг изображений выглядит подозрительно, как если бы изображение затягивалось под капотом.

0 голосов
/ 11 марта 2010

Многие ошибки рендеринга WPF ошибок вызваны драйверами видео, особенно с картами nVidia Quadro. Вы пробовали обновить драйверы?

...