Подтвердить что ты не робот

Приложение WinForms использует низкокачественную иконку заголовка на 16-битном дисплее

На дисплеях с глубиной цвета 16 бит (включая сеансы удаленного рабочего стола, установленными на 16-битный цвет) приложения Windows Forms используют версию с низкой глубиной цвета назначенного значка заголовка (Form.Icon). Однако приложения WPF и проводник Windows используют 24-битную глубину цвета, если она существует.

Я впервые увидел это в приложении Windows Forms, над которым я сейчас работаю. Значок, который я использовал, имел 4-битные, 24-битные и 32-битные варианты. На 16-битных дисплеях Windows Forms использовала уродливую 4-битную версию в строке заголовка вместо симпатичной 24- или 32-разрядной версии.

Чтобы проверить и проиллюстрировать поведение, я создал тестовый значок с явно разными проектами для каждого размера и цветового формата. Я включил 4-битные, 8-битные, 24-битные и 32-битные варианты.

Ниже приведены результаты как на 32-битных, так и на 16-битных дисплеях:

На 32-битных дисплеях все хорошо:

Проводник Windows:

Windows Explorer, 32-bit display

Приложение WPF:

WPF Application, 32-bit display

Приложение Windows Forms:

Windows Forms Application, 32-bit display

В 16-битных дисплеях Windows Forms отображает вариант с более низкой глубиной цвета, чем WPF или проводник Windows:

Проводник Windows:

Windows Explorer, 16-bit display

Приложение WPF:

WPF Application, 16-bit display

Приложение Windows Forms:

Windows Forms Application, 16-bit display

На 16-разрядных дисплеях Windows Explorer и WPF используют 24-битный формат, но Windows Forms этого не делает. В этом случае он использовал 8-битный формат. Мой реальный значок приложения не имел 8-битного варианта (но я собираюсь сделать его сейчас!), Поэтому Windows Forms использовали 4-битный вариант.

Как я могу заставить приложение Windows Forms отображать 24-битную версию значка в строке заголовка на 16-битном дисплее?

4b9b3361

Ответ 1

К сожалению, нет способа отображения 24-битного изображения на 16-битных системах. Однако вы можете придумать трюк, который адаптирует ваше приложение к системе, в которой он работает.

Итак, вы можете попытаться подделать "бит" поле изображения (попробуйте использовать какое-то программное обеспечение для редактирования фотографий), считая его 16-битным, когда это на самом деле 24. Возможно, мне удалось это сделать несколько лет назад, но я не могу вспомнить, как (извините).

Я предполагаю, что вам следует попытаться решить вашу проблему.

Удачи!