Размер значков не увеличивается при более высоком DPI

Я столкнулся с этой проблемой, когда DPI больше 100. Я изменил размер значков, таких как полужирный, курсив, и когда я запускаю программу с разрешением 100 dpi, размеры значков больше, но когда я запускаю программу после перехода на dpi больше 100 значки становятся меньше и не обновляются до любых значений размера. Я пробовал autosize = false, масштабирование изображений до нуля.


person keerthi vasan    schedule 12.09.2018    source источник
comment
Какой язык/фреймворк? Покажите нам код!   -  person Martin Prikryl    schedule 12.09.2018
comment
Вам нужно добавить больше деталей к вопросу, чтобы люди могли вам помочь.   -  person Zeeshan Adil    schedule 12.09.2018


Ответы (1)


При работе со значками "System.Drawing.Icon" следует иметь в виду, что размер значка должен быть больше, если вы используете DPI выше 100. Свойство autosize не помогите здесь.

Файл значка может содержать разные размеры, поэтому мы можем определить фактический коэффициент масштабирования DPI и с учетом этого фактора загрузить значок из файловой системы с правильным размером.

Код для определения фактора DPI может выглядеть так:

    using System;
    using System.Drawing;
    using System.Runtime.InteropServices;

    public static class DpiHelper
    {
        private static readonly double m_dpiKoef = Graphics.FromHdc(GetDC(IntPtr.Zero)).DpiX / 96f;

        public static double GetDpiFactor()
        {
            return m_dpiKoef;
        }

        [DllImport("User32.dll")]
        private static extern IntPtr GetDC(IntPtr hWnd);
    }

Теперь, используя Icon(string fileName, int width, int height) из System.Drawing.Icon, инициализация нового экземпляра значка может выглядеть так:

int size = 48;
int dpiSize = (int)(size * DpiHelper.GetDpiFactor());
Icon dpiIcon = new Icon(filename, new Size(dpiSize, dpiSize));
person Andrew Patynko    schedule 07.04.2019
comment
Фактор DPI больше не фиксируется в Windows 10. Он может меняться во время выполнения приложения. - person Martin Prikryl; 07.04.2019