Delphi. TRichView. Сохранение добавленных картинок в определенную директорию

25

Для меня работа с картинками, в TRichView не была очевидна, поэтому пару дней пришлось поразбираться с тонкостями и нюансами. Мне был интересен аспект сохранения картинок при экспорте в HTML формат (например, методы SaveHTMLEx и SaveHTMLToStreamEx).

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

Я также пробовал искать возможность сохранения картинки “как есть”, то есть имя + расширение, например, FileName.gif, но пока до конца не разобрался. Вот здесь находится полезный пост на эту тему. В принципе, я даже написал тестовый код, но проблема в том, что я не знал, в какой момент его нужно добавить, по идее, в момент If OpenDialog.execute…


 

По умолчанию, если ничего не поменять, при сохранении документа, картинки конвертируются в jpg и сохраняются просто под номерами 1.jpg,2.jpg,3.jpg и так далее… Если почитать справку, то получим следующее

By default:

Images are saved in separate files as Jpegs (or as bitmaps for Delphi2, or if RVDONOTUSEJPEGIMAGE is defined) and have names composed as ImagesPrefix + Number + ‘.jpg’, where

ImagesPrefix parameter of SaveHTML/SaveHTMLEx;
Number some number making this file name unique (image files can override existing ones or not, depending on parameters of SaveHTML/SaveHTMLEx). Bullets and hotspots items having the same image list, image index and background color are saved in the same file (the same is for list markers).

Если ничего более не нужно как файлы картинок, рядом с html файлом, то можно на этом и остановиться. Но мне было нужно, чтобы gif, например, были как gif, png как png, и чтобы я мог сохранять изображения в определенную папку, а в документе прописывать правильные пути к ним.

О том, как включить в TrichView поддержку анимированных gif файлов я писал в отдельной статье. Но это частный случай, здесь же мы создадим более менее универсальное решение.

Сохранение картинок в выбранной директории при помощи процедуры OnSaveImage2

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

Обратите внимание, здесь мы указали префикс ImgPrefix.

Также нам понадобится вспомогательная процедура создания директории для сохранения картинок.

И, наконец сама процедура сохранения картинок.

Тестируем код

Загрузим пару изображений, сохраним и откроем их в браузере

25

 

В базе данных картинки сохранились следующим образом

 

 

This entry was posted in Delphi, Без рубрики. Bookmark the permalink.