C #: использование ICO-файла с несколькими изображениями

Я пытаюсь установить изображения в TreeView на C # из файла .ico, содержащего два значка: версию 32x32 и версию 16x16. Изображения устанавливаются, но .Net выбирает версию 32x32 и уменьшает ее (что выглядит ужасно) вместо выбора готового изображения 16x16.

Соответствующий код:

ilTree.Images.Add(Properties.Resources.group);
ilTree.Images.Add(Properties.Resources.single);
ilTree.Images.Add(Properties.Resources.db);
treeStored.ImageList = ilTree;

Где я ошибаюсь?


Ответ:

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

В .NET Framework версии 1.1 или более поздней по умолчанию используется Depth8Bit.

... однако это не помешало ImageList удалить цвета с моего 8-битного значка. При внимательном рассмотрении у меня были иконки (их было три): 4bit, 4bit, 8bit. Два 4-битных значка имеют общие палитры, однако 8-битный значок имеет другую палитру. Всего между иконками было 257 цветов. Несмотря на небольшое переполнение, .Net сократил его до всего 20 цветов.


person Thanatos    schedule 08.06.2009    source источник


Ответы (2)


Вам нужно создать новый объект Icon. Существует перегрузка для конструктора, который принимает исходный объект Icon и размер. Я не знаю, будет ли новый объект Icon использовать тот же HIcon, но он будет правильно отрисовываться. На всякий случай я бы порекомендовал утилизировать и то, и другое.

person snarf    schedule 08.06.2009
comment
Что ж, работает. Хотя, конечно, было бы намного лучше, если бы TreeView просто выполнял The Right Thing ™ ... - person Thanatos; 09.06.2009
comment
На самом деле не совсем так. Это - ilTree.ColorDepth = ColorDepth.Depth24Bit; - тоже нужно. В противном случае он, кажется, принимает (ошибочно) 16-битный. - person Thanatos; 09.06.2009
comment
По умолчанию используется 8-битный формат, но он должен загружать изображения с любой ранее указанной вами глубиной цвета. - person snarf; 10.06.2009

Установите для свойства ImageSize ImageList новый размер (16, 16)

person rein    schedule 08.06.2009
comment
Это размер ImageList по умолчанию - установка его вручную не повлияет (и не даст, когда я добавлю) никакого эффекта. - person Thanatos; 09.06.2009
comment
хм, раньше это работало для меня. Вы устанавливаете его перед добавлением изображений или после? Не понимал, что это по умолчанию. - person rein; 09.06.2009