![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
![]()
Здравствуйте! Возникла следующая задача.
Имеется куча TIFF-файлов, нужно в каждый подрисовать "печать" - небольшое изображение. TIFF файлы - отсканированные чертежи и текстовые документы в ч/б, многие многостраничные. Средний размер страницы в пикселах 4000*2516, dpi колеблется от 300 до 600 (причём в одном файле могут находиться страницы, отсканированные в разное время, с разным dpi) Задача фактически разовая, т.е. будет периодически открываться одним пользователем, чтобы "проштамповать" пару тысяч файлов. Сторонний софт был исключён, т.к. попадать нужно примерно в одно место в основной надписи документа, т.е. для того, чтобы определить, куда проставлять штамп документ нужно будет анализировать. После недолгих мытарств с различными библиотеками (то некоторые файлы не открывались, то ещё что), остановился на библиотеке GDI+ - всё-таки как никак microsoft.... Однако, опыта работы с графическими форматами нет. Как-то писал программку, открывал bmp, jpeg, png, исследовал canvas.pixels - распознавал нужные места, дорисовывал, что нужно методами canvas и в pixels напрямую. В GDI+, насколько понял, принцип немного другой. С налёту не могу разобраться в некоторых моментах. 1. Вот как я просто пересохраняю одностраничный файл. Код:
2. Теперь точно так же пытаюсь сохранить все страницы многостраничного файла: Код:
![]() 3. Теперь пытаюсь редактировать. На форме разместил imgOut: TImage Код:
Однако, как работать с изображением? Как в него дорисовать? В принципе, Graphics.DrawImage, вызванный повторно, рисует изображение, однако, на исходный Image это не влияет, и при сохранении файла ничего не изменяется. Нельзя ли решить мою задачу, изучив какой-нибудь минимум информации, или без дебрей не обойтись? Посоветуйте, пожалуйста, что можно почитать по GDI+, кроме msdn-а, хотелось бы что-нибудь покороче, сроки очень сжатые. UPD во вложении прикладываю два исходных используемых TIFF Последний раз редактировалось AnTe; 30.07.2013 в 19:55. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
...для пакетной обработки пользуюсь консолью ImageMagic с ключом -composite ...впрочем, BD-Sizer и FastStone Image Viewer в визуальном режиме тоже умеют.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
![]()
Спасибо! Но всё же, пожалуй, от использования сторонних программ приходится отказываться окончательно: в перспективе простановка литеры, т.о. необходимо будет находить (распознавать) точные координаты "квадратика", в который ставится символ.
А страницы отсканированы далеко не идеально: многие даже с поворотом на небольшой градус. Всё же нужно свою программу писать. Собственно, с первыми двумя пунктами в GDI+ с горем пополам разобрался. Вот как теперь выглядит кнопочка "сохранить": Код:
Не разобрался, как изменить тип компрессии. Но главное - файл сохраняется. Остался третий пункт: - "дорисовать" что-нибудь на объекте GDI++ Image, точнее, его Frame (странице). Предположительных вариантов три: 1. Либо существуют методы Image, которые позволяют рисовать прямиком в этом объекте (на его Frame - странице), непосредственно перед сохранением. 2. Либо нужно использовать какие-либо другие объекты, возможно, наследников Image в GDI+, которые сразу загрузят картинку "особым" образом,и свойства (а-ля canvas) будут доступны. 3. Либо нужно каждую страничку выгружать в штатный TBitmap и каким-то образом вставлять её обратно в Image Выгрузить страничку файла в TBitmap проблем не составило, и даже отобразить её на форме (в последней строчке): Код:
Вопрос, если идти таким путём - как залить битмап обратно в Image? |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") | funnyy | Помощь студентам | 3 | 17.10.2012 17:40 |
Организовать текстовый файл f, состоящий из N строк. Организовать замену символов в файле. "Старый" символ и "новый" символ запраш | Richik123 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 14.06.2012 16:28 |
Организовать текстовый файл f, состоящий из N строк. Организовать замену символов в файле. "Старый" символ и "новый" символ запра | Richik123 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 31.05.2012 17:32 |
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" | aleksei78 | Microsoft Office Excel | 13 | 25.08.2009 12:04 |