Как то возникла необходимость сохранить изображение в формате .ico. Казалось бы все просто. Но не тут то было.
Используя метод Icon.Save() мы получали файл в формате .ico, но с весьма урезанной цветовой палитрой, что не хорошо. Это проблема в .NET платформе, так что стандартными средствами полноцветный значок вам не получить.
Начал ковыряться и искать другие пути решения.
Самым распространенным оказлася предложенный метод Image.Save(fileName, Imaging.ImageFormat.Icon). Все с радостью благодарили о таком сообщении, сохраняли изображение с расширением .ico в полноцветном режиме и казалось бы все, ура, работает. Я такому положению рад особо не был, потому что еще раньше пробовал, нужного эффекта он не дал.
Немного покопавшись, выяснил, что при таком сохранении мы получаем обычный .png формат, и при попытке использования его в качестве значка мы получим исключение. Копая далее набрел наконец-то на нормальное объяснение этого дефекта.
Оказывается GDI+ компонент .NET Framework имеет встроенные кодеры и декодеры, которые поддерживают чтение и запись следующих типов файлов: BMP, GIF, JPEG, PNG и TIFF. И умеет только читать следующие форматы: WMF, EMF, ICON.
Вот и все, GDI+ не умеет записывать ico формат. Поэтому не тратьте свое время, чтобы разобраться в чем проблема.
Данную информацию нашел на английском языке на сайте Microsoft.