![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| ActioN |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 12.4.2005 Репутация: нет Всего: нет |
Доброго времени суток.
Мне необходимо работать в программе с большими TIFF-изображениями, а именно: 1. Выбираю нужные мне изображения; 2. Они располагаются на листе в определенных местах по заданным мной кординатам; 3. В конечном итоге я или посылаю их на печать или сохраняю в TIFF-файл (тут можно было хотябы послать на печать). Параметры изображений: двухцветные TIFF-изображения больших размеров от 2000 пикселей до 65200х13600 Пока что выбрал для моей задачи компоненты ImageEN. Они довольно неплохо работают с TIFF больших размеров, но если размер изображения очень большой, то выполнение некоторых функций выполняется слишком долго, чаще всего даже не могу дождаться завершения выполнения и приходится завершать программу. Кто-нибудь работал с этими компонентами? Или посоветуйте другие более подходящие для этого компоненты. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Принтер умеет печатать только bmp/jpg/png TIFF не умеет, поэтому прийдется их сконвертировать в bmp. Картинка 65200х13600x3 = 2.5Гб ОЗУ. Во первых столько может не оказаться у компа, во вторых может не оказаться цельного блока такого размера, что очень вероятно, поскольку в win32 доступно как правило не больше 2х Гб для режима пользователя и в третьих 800 мегапикселей принтер не одолеет, разве что плоттер на лист A0, поэтому имеет смысл уменьшить изображения по крайней мере в несколько раз. Подумать только, декодировать 2,5 Гб информации, даже блочно не хватает ОЗУ, нужно использовать файлы для временного хранения, или же на лету при декодировании делать сжатие картинки в несколько раз, так чтобы полученная битмапка не занимала так много ОЗУ. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ActioN |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 12.4.2005 Репутация: нет Всего: нет |
Alexeis, это вполне реальная задача. Рулонный плоттер или принтер очень быстро справляется с такими картинками и печатает изображения размером 13600 в ширину, а в длинну неограничено. Но я ограничил до 65200 пикселей. Только вот как он это делает незнаю. Я думаю, тут главное вывести эти все изображения на канву и послать на печать, а остальное - дело драйверов и принтера. В ImageEn есть демка по печати изображений, она быстро справляется с большой картинкой. Но моя задача отличается тем, что у меня большая картинка строится из нескольких маленьких. Получается, задача сводится к тому, чтобы отобразить большую картинку как совокупность маленьких и просто послать на печать. Вопрос в том, как отобразить?
Может быть есть какая-то функция наподобие DrawTo(Canvas,X,Y), которая бы в нужном месте большой картинки отобразила маленькую в полный размер? Добавлено @ 13:05 P.S. все изображения = 400 dpi. Это сообщение отредактировал(а) ActioN - 30.6.2009, 13:23 |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
У принтера есть Canvas, а у Canvas есть метод Draw.
Должно сработать. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| ActioN |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 12.4.2005 Репутация: нет Всего: нет |
Alexeis, перепробовал много разных способов. Остановился на слоях, которые поддерживает ImageEN. Загружаю 10 изображений, каждое на свой слой (размеры каждого слоя по 7000х5000px) - все работает шустренько. Хоть оно и отмасштабировано и показываются превьюшки, но как ты и говорил, в памяти оно в натуральную величину хранится. Если начать соединять все слои в один, сразу начинаются тормоза - занимаемая программой оперативка начинает расти, что-то долго обрабатывается.
Мне тут подсказывают, что лучше для этих целей использовать векторную графику, т.к. для растровой не хватит оперативной памяти. Но проблема в переводе растрового TIFF-изображения в векторный. У меня тут их много, в ручную переводить каждое изображение будет долго и не рационально. Кто-нибудь сталкивался с такой задачей? Что посоветуете? Это сообщение отредактировал(а) ActioN - 1.7.2009, 15:48 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Переведенное изображение будет еще тяжелее чем исходное. Векторная графика это как исходники программы, а растровая это откомпилированный образ. Плоттер само по себе устройство векторное, растры он выводит по точкам, но тогда для него должно существовать свое API. Можно попробовать самому сделать огромный метафайл с кругом и пытаться его отрисовать на канве принтера. Если принтер будет его растеризировать то получаться те же яйца только в профиль, если он умный (кто знает), может он попытается рисовать сами линии записанные в метафайле, тогда больших размеров изображения не будет. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |