Мульти-размерная иконка в проекте

273
19 марта 2017, 03:08

Есть иконка (файл .ico), с мульти-размерностью. То есть она имеет N "кадров" внутри, и каждый "кадр" под определенное разрешение. Как мне добавить его в проект, чтобы он сам выбирал нужный размер. Читал что нужно просто в свойствах проекта, как обычно, добавить иконку, при этом когда запускаешь проект, дебаг или релиз, в шапке она не выбирает нужный "кадр"

Answer 1

Если вы устанавливаете значек приложения в свойствах проекта, то Windows, несомненно, выбирает размер значка автоматически в зависимости от разрешения (DPI). Я протестировал на Win7 и результаты такие:

  • 96 DPI

В панели задач: 32x32

В заголовке окна: 16x16

В экране ALT-TAB: 32x32

  • 120 DPI

В панели задач: 32x32

В заголовке окна: 24x24

В экране ALT-TAB: 32x32

(Обратите внимание, что статьи в MSDN на тему значков могут давать устаревшую информацию, так как никто похоже не позаботился обновить их со времен ХР.)

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

using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.IO;
void SetIcon()
{
        using (Stream iconStream = new FileStream(@"file.ico", FileMode.Open))
            {
                using (System.Drawing.Icon icon = new System.Drawing.Icon(iconStream, 64, 64))
                {
                    using (System.Drawing.Bitmap bitmap = icon.ToBitmap())
                    {
                        MemoryStream memoryStream = new MemoryStream();
                        bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
                        memoryStream.Seek(0, SeekOrigin.Begin);
                        PngBitmapDecoder pbd = new PngBitmapDecoder(memoryStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
                        // Отобразить элемент в окне в натуральную величину (для проверки размера)                        
                        myImage1.Source = pbd.Frames[0];
                        myImage1.Stretch = Stretch.None;
                        //Задать значек окна
                        this.Icon = pbd.Frames[0];
                    }
                }
            }
}
READ ALSO
Пытаюсь соединиться в Google Drive

Пытаюсь соединиться в Google Drive

Создал Google Drive открыл папку для общего пользованияСоздал ключ клиента вот тут подгрузил нужные библиотеки

266
Запись значении нескольких combobox в файл

Запись значении нескольких combobox в файл

Добрый деньПробую написать программу, которая бы сохраняла данные из двух combobox и одного textbox в один файл

381
C# таблица EXCEL добавить данные с html

C# таблица EXCEL добавить данные с html

Добрый день дорогие друзья! Есть задачка не большой сложности, хотелось бы реализовать красиво) Хочу узнать, сталкивался ли кто нибудь с подобным...

339
Вызов метода из UserControl

Вызов метода из UserControl

День добрый! Мучаюсь который день, может подскажите?

280