Delphi. Уменьшение изображения. Обобщение и нюансы

Я уже писал об уменьшении изображения.  Здесь про true уменьшение изображений. То есть прямо, чтобы окрыл файл в проводнике, а оно там стало меньше))

Простой способ уменьшения изображения для UniGUI

Как уменьшить много картинок и сохранить их на диске?

По сути, у меня всего 2 способа, которые я для себя открыл и пытался использовать. Но сегодня я узнал об их нюансах.

Способ №1 – через GDI+ (для idHTTP сервера или основного потока)

Нюанс в том, что этот способ хорошо работает в основном потоке или, скажем, на сервере, но плохо работает в Thread, созданном в ручную. В серверном потоке, тем не менее, все хорошо. Не знаю, почему, но пока что понял это для себя.

То есть вот она функция. Подаем в неё путь до картинки, ширину, высоту и битмап, в который нужно выгрузить результат.

Всё вместе у меня получилось как-то так… Тут всё вместе, некий тестовый код, скажем так, много переменных создается и уничтожается без работы. Скажем twic отказался работать на сервере, выдавая AV. Глубоко копать не стал, заменил его TPicture

Способ №2 через StretchDraw (можно использовать в Threads, но нельзя на сервере idHTTP)

Здесь тоже сырой пример, но суть проста.  Подаем в bmp наш битмап, который надо уменьшить. И забираем уменьшенное изображение в bmpDiminished.

У bmpDiminished необходимо заранее выставить размеры NewWidth, NewHeight;

Но вопрос в том, как загрузить в bmp?

Я делаю это через TWIC

Но twic не работает на сервере idHTTP, но работает в потоках.

Вот наш код… Сыро, но для идеи хватит

 

This entry was posted in Delphi. Bookmark the permalink.

Leave a Reply