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