![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сложная печать графики [D5, Win2k]
GarryFV © (2001-11-05 12:35:00)Эта проблема уже начинает доставать. И разобраться оказалось не так просто, как казалось :).
Нужно вывести на принтер большое количество сложных графических объектов(до нескольких десятков тысяч). Сразу скажу что пользоваться Printer.Canvas я умею, но при выводе на него эта процедура занимает опять же десятки минут.
Вывод: нужно самому сформировать bitmap и отправить его на принтер, но здесь возникают другие проблемы:
Разрешение принтера 600 dpi, в пикселах это около 7000 х 4000
color rgb - 4 байта,
размер bitmap -> 7000 x 4000 x 4 = 112000000 = 107 M
К тому же функции BitBlt и StretchBlt с принтером работают довольно загадочно (кто не знает, тому долго и нудно придется объяснять, а кто знает - тот поймет).
И ЧТО ЖЕ ДЕЛАТЬ?
Может подскажете хоть где почитать. Потому что даже в MSDN все описывается только на уровне стандартных GDI объектов, а здесь
нужна скорее какая-то технология для печати подобного рода графики.
Заранее спасибо.
Иван Шихалев (2001-11-06 23:31:00) [1]ИМХО, для принтера метафайлы куда лучше битмапов.
Raptor (2001-11-06 22:28:00) [2]Привет!
Читал я как то об этом. Вроде у Дарахвелидзе в книге "Delphi 4" есть пример работы с очень большими изображениями. Там для этого использовались файлы отображаемые в память.
Raptor.
GarryFV (2001-11-06 12:28:00) [3]Я не сказал, что принтер всегда черно-белый. Просто для полной оптимизации можно учесть и это.
Ну что ж, вопрос, как я вижу, действительно серьезный.
Никто ни черта не знает ;).
Anatoly Podgoretsky (2001-11-05 17:34:00) [4]А если еще разделишь на 8 то получишь всего то 3 мб
Каждый пиксель на принтере имеет всего два состояния 0 или 1
Но вот захочешь ли ты делать преобразозвания в монохром это другой вопрос.
Не знаю может стоит помучиться с метафайлами?
GarryFV (2001-11-05 16:28:00) [5]Неверный ответ :).
На DC экрана весь этот объем выводится за пару секунд. Стандартными GDI функциями. А вот на DC принтера пол-дня, грубо говоря, а если объем слегка великоват, то принтеру и мозгов не хватает.
Фокус в том, что для вывода на печать не нужно формировать полноцветный bitmap на 100М (см. вопрос). Я уже молчу, если принтер не цветной.
Так что, самому делать пребразование цветов к 256, например?
Тоже не то. Тем более, что размер уменшится только в 4 раза, т.е. 25М будет.
Еще раз говорю - нужна технология какая-то. Можно, например, создать bitmap в 4 раза меньшего размера, а затем стандартным способом Stretch-ить на принтер. Но это вроде как изврат какой-то.
Работает же Photoshop как-то. И выводит весьма масштабные изображения довольно шустро.
Так никто не знает, где почитать то можно?
BTW: BitmapHandle:=CreateCompatibleBitmap(DC,4960,7014); - не работает, возвращает 0.
Наибольшее, что удалось создать - 3562 Х 5616.
Dimka Maslov (2001-11-05 13:51:00) [6]Основополагающий принцип работы программ для Windows: вывод данных только при помощи стандартных процедур, предоставляемых операционной системой, по-этому придётся ждать десятки минут, если хочется обрабатывать большие объёмы информации.