Я не могу найти никаких доказательств в поддержку моей теории, но, похоже, ImageList не знает о выборе значков разных размеров.Я догадываюсь, что он просто преобразует значки в растровые изображения и сохраняет эти данные.
На форумах MSDN я нашел этот фрагмент от пользователя MVP nobugz:
Iдумаю, я могу воспроизвести вашу проблему.Когда я использую MicroAngelo (утилита редактирования значков), чтобы извлечь значок № 5 из shell32.dll, сохранить его на диск, а затем добавить значок в 16x16 ImageList, я вижу плохо интерполированную версию значка.Когда я редактирую значок и удаляю все форматы, кроме 16x16x256 цветов, я получаю красивую четкую версию значка.
Похоже, ImageList недостаточно умен, чтобы выбрать значок, который лучше всего соответствует изображению из Списка изображений.Свойство ImageSize и ColorDepth.Это никогда не было особенно умным управлением.Это не совсем соответствует вашему сценарию, но результат тот же.Вид физического размера 32x32 намекает на то, что что-то пошло не так, когда вы извлекли значок.Я вижу 16x16 на отредактированном значке, но 32x32 на неотредактированном значке.
Кроме того, эта страница из CSharpKey показалась полезным ресурсом, работающим со списками изображений и значками.Вот выдержка:
Если вы создаете список значков, вы можете создать каждый из них с размером по умолчанию 16x16.В некоторых случаях (например, , если вы намереваетесь использовать изображения для представления списка ), вы можете создать или создать второй набор значков размером 32x32 (и / или 48x48).) каждый.
Кажется, что "чтение между строк", что ImageList просто хранит один размер и возвращает версии сохраненного изображения с передискретизацией.
Редактировать
Я нашел еще одну ссылку на CodeProject ( Встраивание иконок в ваше приложение VB.NET ), где говорится:
Ну, это выглядело довольнохорошее решение, пока я не понял, что ImageList хранит изображения только как растровые изображения с одним разрешением .Поэтому, если у меня есть все эти великолепные значки разных размеров, которые я хочу использовать в своем приложении, возможно, используя их разные размеры (поскольку значки имеют разные размеры, хранящиеся в одном файле), ImageList не собирался сокращать его.