Я немного смущен относительно того, как C# сохраняет растровые изображения. В настоящее время я использую этот оператор для сохранения растрового изображения (практически) любого расширения (.ico, .dds и т. Д.).Сохранить растровое изображение в любом формате
Bitmap.Save(FileName);
Это действительно работает для любого расширения, которое я выбираю, но у меня возникают сомнения в его сохранении в правильном формате. Причина сказала сомнение в том, что я нашел другую статью здесь, How to save Bitmap as icon?, который делает так, как:
// Create a Bitmap object from an image file.
Bitmap bmp = new Bitmap(sFn);
// Get an Hicon for myBitmap.
IntPtr Hicon = bmp.GetHicon();
// Create a new icon from the handle.
Icon newIcon = Icon.FromHandle(Hicon);
//Write Icon to File Stream
System.IO.FileStream fs = new System.IO.FileStream(destFileName, System.IO.FileMode.OpenOrCreate);
newIcon.Save(fs);
который, очевидно, способ отличается. Итак, два вопроса:
- Как может/работает первый подход, если второй является «правильным» способом?
- Должен ли я настраивать свойства сохранения для каждого отдельного расширения, которое я хочу поддержать, или это первый метод, достаточный для любого расширения?
Вы не указали формат изображения в вызове Save(). Таким образом, он сохраняется как PNG. Без неправильного расширения имени файла, без сомнения. Это не запускает слишком много программ, они смотрят в файл, чтобы узнать реальный формат изображения, их заголовок определяет реальный формат. PNG - очень хороший формат и тот, который вы должны одобрить. Нет никакого способа сохранить файл .ico или .dds, gdiplus не имеет кодеров для таких форматов. ImageFormat.Icon определен, но не реализован. –
Так что .ico. Я думаю, что .ico - это просто .png (или другой тип, насколько мне известно) с расширением .ico. И для поддержки таких файлов, как .dds (для которых у GDI + нет кодеров), я должен реализовать собственный кодер. Это имеет больше смысла. Спасибо за ответ! –