2010-09-03 4 views
2

Я пишу метод, который должен сохранить файл System.Drawing.Image в файл. Не зная исходного файла, был создан Image, есть ли способ определить, какое расширение файла должно иметь?Расширение файла из System.Drawing.Image

Лучшим решением, которое я придумал, является использование оператора Switch/Case со значением Image.RawFormat.

Неважно, что я сохраняю Image в оригинальном формате? Является ли Image, сгенерированным из PNG, отличным от того, который был создан из JPEG? Или данные, хранящиеся в объекте Image, полностью универсальны?

ответ

0

Да, это, безусловно, важно, поскольку различные Типовфайлов поддерживают различные функции, такие как сжатие, несколько кадров и т.д.

Я всегда использовал переключатель заявление, как вы, возможно, запеченные в метод расширения или что-то.

+0

Значит, класс Image учитывает это? Если я загружаю jpeg, который сжимается, в объект Image, объект сохраняет сжатие JPEG? Он не расширяет изображение в общую кодировку растрового изображения? –

+0

Я верю, что это правильно, Эрик. Я понимаю, что когда он находится в классе Image, он нейтрален по отношению к формату и может быть впоследствии сохранен в любом другом формате (с использованием ImageFormat). –

+1

Хотя это может быть справедливо для точки, вам всегда нужно учитывать, что изначально было загружено. Возьмите пример с несколькими кадрами. Если вы загрузили многостраничный tiff в объект изображения и сохранили как любой другой формат изображения, вы потеряете все кадры (страницы), кроме активного. –

1

Image.RawFormat имеет сокровища, держитесь подальше от него. Я видел несколько сообщений о том, что он не имеет юридической ценности без видимых причин. Пока не разобрался.

Вы совершенно правы, неважно, в каком формате вы его сохраните. После того, как вы загрузили файл, внутренний формат будет одинаковым для любого растрового изображения (не вектора) с тем же самым пиксельным форматом. Как правило, избегайте повторного сжатия файлов jpeg, они имеют тенденцию увеличиваться и приобретать больше артефактов. Стив упоминает многокадровые файлы, их нужно сохранить другим способом.

2

Хотя Стив Дэннер прав, поскольку изображение, созданное с помощью JPG, будет отличаться от изображения, созданного из PNG после его загрузки в память, это несжатый поток данных.

Это означает, что вы можете сохранить его в любом желаемом формате.

Однако, если вы загружаете JPG-изображение, а затем сохраняете его как другой JPG, вы выбрасываете большую информацию из-за алгоритма сжатия. Если вы это сделаете повторно, то будет в конечном итоге потерять изображение.

Если вы можете посоветовать всегда сохранять как PNG.

+0

Ahh ok, спасибо за подсказку. Это действительно то, что я пытался выяснить. Если это нормально, возьмите изображение, созданное из любого формата, и сохраните его в одном конкретном формате. Так кажется, что это нормально, если я использую несжатый формат, такой как PNG? –

+0

@ Эрик - PNG сжат - просто не потерял. Поэтому, если вы открываете изображение A.png, сохраните его как B.png, тогда откройте B.png и сохраните его как C.png и т. Д., Не будет потери качества. – ChrisF

+0

Ahh yeah well lossy - это то, что я имел в виду. Спасибо за разъяснения –

0

Чтобы ответить на ваш вопрос «Имеет ли значение, что я сохраняю изображение в оригинальном формате?»: Да, это так, но отрицательно.

При загрузке изображения он несжатый внутри растрового изображения (или как ChrisF вызывает его, несжатый поток данных). Поэтому, если исходное изображение использует сжатие с потерями (например, jpeg), сохранение его в том же формате снова приведет к потере информации (т. Е. К более артефактам, меньшим деталям, более низкому качеству). Особенно, если у вас есть повторяющиеся действия читать - изменить - сохранить, этого можно избежать.

(Обратите внимание, что это также следует избегать, если вы не изменяете изображение. Просто повторные сеансы сжатия - сжатие ухудшают качество изображения).

Так что если место на диске не является проблемой (и обычно это не в возрасте жестких дисков, достаточно больших для HD-видео), всегда сохраняйте любые промежуточные изображения в форматах сжатия без потерь или несжатыми. Вы можете рассмотреть возможность сохранения финального вывода в сжатом формате, в зависимости от того, для чего вы его используете. (Если вы хотите представить эти последние фотографии в Интернете, jpeg или png будут хорошим выбором).

Смежные вопросы