Значок в трее выглядит нормально, но значок окна WPF выглядит ужасно

#c# #wpf #window #icons

#c# #wpf #окно #Значки

Вопрос:

Есть ли какой-либо способ заставить окно WPF уменьшить размер значка до размера с лучшим алгоритмом масштабирования или заставить его использовать лучшие разрешения для моего значка?

Я создал файл значка (формат ICO), в котором содержится 32-разрядное изображение PNG размером 256×256. Я установил значок моего проекта на этот в свойствах проекта. Он выглядит фантастически в трее Windows, когда я запускаю приложение.

Проблема в том, что я устанавливаю значок в соответствующее окно. Что происходит is…it изображение не уменьшено должным образом, и я получаю это уродливое изображение в верхнем левом углу моего окна с плохим сглаживанием. Он совсем не гладкий. Что я могу сделать?

Комментарии:

1. Вы пробовали меньший размер или другой формат? В проекте, над которым я сейчас работаю, формат .ico равен 32×32 8-битным BMP. Он выглядит нормально в обоих местах, хотя, конечно, это довольно простая графика.

2. Хм … я могу попробовать это, но я беспокоюсь, что он не будет правильно псевдонимирован в 32×32, поскольку он имеет красивые формы, такие как круги и т.д., Которые Требуют некоторой причудливой растеризации.

3. @AndrewStephens Похоже, что 64×64 выглядит намного лучше как для значков в трее, так и для значков в окне. Я хотел бы заставить GIMP экспортировать несколько разрешений, а затем заставить WPF выбирать, какое разрешение где использовать, но я не думаю, что у меня есть такая роскошь. Я должен отметить: я использовал изображение PNG вместо формата ICO…

Ответ №1:

У вас одна из двух проблем: WPF плохо масштабирует значки (неровные / перекошенные) или значки плохо отображаются (размытые)

Чтобы решить первую проблему, я бы не стал полагаться на WPF для уменьшения масштаба значков. Используйте GIMP или Photoshop, чтобы создать значок в размерах 16, 32, 64, 128 и 256 и сохранить их в отдельных папках:

 Icons
  16
    MyIcon.png
    AnotherIcon.png
  32
    MyIcon.png
    AnotherIcon.png
etc.
  

Большинство библиотек значков бывают разных размеров (IconExperience, Syncfuction и т.д.). Если вы создаете пользовательский значок, вам следует уменьшить его масштаб самостоятельно, чтобы иметь полный контроль.

Вы можете создавать пользовательские элементы управления, которые помогут вам найти нужный значок. Таким образом, вы можете определить в одном общем месте, значок какого размера вы хотите использовать, где:

 <CustomIcon Name="MyIcon.png" Location="Ribbon"/>
  

Где Name — это имя файла, а Location — это самоопределяющееся перечисление, которое позволяет вам определять размеры на основе их расположения в пользовательском интерфейсе. Пользовательский значок может наследоваться от изображения и внутренне устанавливать источник на основе этих двух свойств.

Если вы считаете, что столкнулись со второй проблемой, попробуйте установить UseLayoutRouding = «True» в вашем MainWindow, а также поэкспериментировать с вариантами отображения.Режим масштабирования растрового изображения (WPF4 и более поздние версии).