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