/ / Зміна розміру System.Controls.Image з режимом зміни розміру найближчого сусіда - c #, wpf, зображення, розмір, елементи керування

Зміна розміру System.Controls.Image з режимом зміни розміру найближчого сусіда - c #, wpf, зображення, розмір, елементи керування

Я намагаюся створити гру, в якій використовується стиль піксельного мистецтва. Я створив свої активи та використовував їх як ресурси, які додаються до вікна як об'єкти System.Controls.Image.

У дизайнера вони завжди виявляються занадто малими. В результаті, коли я змінюю їх розмір, вони стають дещо розмитими через те, що на них застосовується якась двокубічна інтерполяція.

Я встиг уникнути цього, уникаючизміна розміру; Я змінюю розмір у дизайнера, щоб дізнатись, який розмір є доречним, а потім використовувати найближчий сусід, змінюючи розмір оригінального зображення (за допомогою зовнішньої програми), щоб отримати вихідний файл до такого розміру. Тоді я оновлю зображення у проекті та видалив будь-яку зміну розміру, тому залишив його в оригінальному розмірі, тобто без інтерполяції.

Як ви можете собі уявити, це досить втомлюєпроцес Я розглянув варіанти інтерполяції під час зміни розміру, але більшість відповідей я можу знайти відносно System.Drawing.Image, а не System.Controls.Image. Я відчуваю, що будь-яке таке рішення (якщо це буде адаптовано) було б жахливо брудним і пов'язане з кількома (і, можливо, невиправданими) переходами / видами.

Чи є спосіб отримати зміну розміру найближчого сусіда на System.Controls.Image?

Відповіді:

1 для відповіді № 1

Щоб встановити режим зміни розміру, вам потрібно встановити RenderOptions.BitmapScalingMode="NearestNeighbor" варіант для візуального дерева. Ви можете встановити це на рівні вікна.

Щоб вирішити більшу проблему, здається, що щось спричиняє масштабування ваших зображень у першу чергу:

  • Переконайтеся, що ви встановили Stretch="None" опція у вікні керування зображеннями,
  • Переконайтеся, що ви використовуєте SnapsToDeveicePixels або округлення макета
  • Нарешті, якщо все інше не вдається, явно встановлювати ширину та висоту зображення.

Я також потрапляю в випадки, коли DPI зображення файлу не встановлюється (я вважаю) 90, тому рендеринг застосував масштабування.