| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Работа с большими TIFF-изображениями |
| Автор: ActioN 30.6.2009, 10:18 |
| Доброго времени суток. Мне необходимо работать в программе с большими TIFF-изображениями, а именно: 1. Выбираю нужные мне изображения; 2. Они располагаются на листе в определенных местах по заданным мной кординатам; 3. В конечном итоге я или посылаю их на печать или сохраняю в TIFF-файл (тут можно было хотябы послать на печать). Параметры изображений: двухцветные TIFF-изображения больших размеров от 2000 пикселей до 65200х13600 Пока что выбрал для моей задачи компоненты ImageEN. Они довольно неплохо работают с TIFF больших размеров, но если размер изображения очень большой, то выполнение некоторых функций выполняется слишком долго, чаще всего даже не могу дождаться завершения выполнения и приходится завершать программу. Кто-нибудь работал с этими компонентами? Или посоветуйте другие более подходящие для этого компоненты. |
| Автор: ActioN 30.6.2009, 13:03 |
| Alexeis, это вполне реальная задача. Рулонный плоттер или принтер очень быстро справляется с такими картинками и печатает изображения размером 13600 в ширину, а в длинну неограничено. Но я ограничил до 65200 пикселей. Только вот как он это делает незнаю. Я думаю, тут главное вывести эти все изображения на канву и послать на печать, а остальное - дело драйверов и принтера. В ImageEn есть демка по печати изображений, она быстро справляется с большой картинкой. Но моя задача отличается тем, что у меня большая картинка строится из нескольких маленьких. Получается, задача сводится к тому, чтобы отобразить большую картинку как совокупность маленьких и просто послать на печать. Вопрос в том, как отобразить? Может быть есть какая-то функция наподобие DrawTo(Canvas,X,Y), которая бы в нужном месте большой картинки отобразила маленькую в полный размер? Добавлено @ 13:05 P.S. все изображения = 400 dpi. |
| Автор: Alexeis 30.6.2009, 13:47 | ||||
У принтера есть Canvas, а у Canvas есть метод Draw.
Должно сработать. |
| Автор: ActioN 1.7.2009, 15:46 |
| Alexeis, перепробовал много разных способов. Остановился на слоях, которые поддерживает ImageEN. Загружаю 10 изображений, каждое на свой слой (размеры каждого слоя по 7000х5000px) - все работает шустренько. Хоть оно и отмасштабировано и показываются превьюшки, но как ты и говорил, в памяти оно в натуральную величину хранится. Если начать соединять все слои в один, сразу начинаются тормоза - занимаемая программой оперативка начинает расти, что-то долго обрабатывается. Мне тут подсказывают, что лучше для этих целей использовать векторную графику, т.к. для растровой не хватит оперативной памяти. Но проблема в переводе растрового TIFF-изображения в векторный. У меня тут их много, в ручную переводить каждое изображение будет долго и не рационально. Кто-нибудь сталкивался с такой задачей? Что посоветуете? |
| Автор: Alexeis 1.7.2009, 16:13 | ||
Переведенное изображение будет еще тяжелее чем исходное. Векторная графика это как исходники программы, а растровая это откомпилированный образ. Плоттер само по себе устройство векторное, растры он выводит по точкам, но тогда для него должно существовать свое API. Можно попробовать самому сделать огромный метафайл с кругом и пытаться его отрисовать на канве принтера. Если принтер будет его растеризировать то получаться те же яйца только в профиль, если он умный (кто знает), может он попытается рисовать сами линии записанные в метафайле, тогда больших размеров изображения не будет. |