Я использую классы System.Drawing
для создания эскизов и изображений с водяными знаками из загруженных пользователем фотографий. Пользователи также могут обрезать изображения с помощью jCrop после загрузки оригинала. Я взял этот код у кого-то еще, и я хочу упростить и оптимизировать его (он используется на веб-сайте с высоким трафиком).Эффективное манипулирование изображениями в C#
Предыдущий парень имел статические методы, которые получили растровое изображение в качестве параметра и также возвратили его, внутренне выделяя и удаляя объект Graphics
. Я понимаю, что экземпляр Bitmap
содержит все изображение в памяти, а Graphics
- это, в основном, очередь операций рисования, и это идемпотент.
Процесс в настоящее время работает следующим образом:
- Получить изображение и сохранить его во временный файл.
- Получить координаты посева.
- Загрузите исходное растровое изображение в память.
- Создайте новое растровое изображение с оригинала, применяя обрезку.
- Сделайте немного сумасшедшей регулировки яркости на новом растровом изображении, возможно (?), Возвращающем новый растровый рисунок (я бы предпочел не трогать это, арифметика указателей изобилует!), Позволяет называть это A.
- Создайте еще одно растровое изображение с в результате один, применяя водяной знак (позволяет называть этот B1)
- Создание растрового изображения с 175x175 миниатюру из А.
- Создание растрового изображения 45x45 миниатюр из А.
Это кажется много выделения памяти; мой вопрос таков: есть ли хорошая идея переписать части кода и повторно использовать экземпляры Graphics
, фактически создавая конвейер? По сути, мне нужно только 1 изображение в памяти (исходная загрузка), а остальные могут быть записаны непосредственно на диск. Все сгенерированные изображения будут нуждаться в преобразованиях культур и яркости и единственном преобразовании, которое является уникальным для этой версии, эффективно создавая дерево операций.
Любые мысли или идеи?
О, и я должен, вероятно, упомянуть, что это первый раз, когда я действительно работаю с .NET, поэтому, если что-то, что я говорю, кажется смущенным, пожалуйста, несите меня и дайте мне несколько советов.
Очень печально, что это ваше первое взаимодействие с .NET. Образец IDisposable - это мое реальное единственное неудовлетворение фреймворком. Этот «используемый» бизнес является самой эзотерической регулярно используемой функцией - большинство вещей очень просты. – overslacked
Хороший вопрос, говорю! +1 – Cerebrus
Мне пришлось искать «идемпотент» ... доброе слово. – JasonRShaver