Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.08;
Скачать: CL | DM;

Вниз

Сложная печать графики   Найти похожие ветки 

 
GarryFV   (2001-11-05 12:35) [0]

Эта проблема уже начинает доставать. И разобраться оказалось не так просто, как казалось :).

Нужно вывести на принтер большое количество сложных графических объектов(до нескольких десятков тысяч). Сразу скажу что пользоваться Printer.Canvas я умею, но при выводе на него эта процедура занимает опять же десятки минут.
Вывод: нужно самому сформировать bitmap и отправить его на принтер, но здесь возникают другие проблемы:
Разрешение принтера 600 dpi, в пикселах это около 7000 х 4000
color rgb - 4 байта,
размер bitmap -> 7000 x 4000 x 4 = 112000000 = 107 M

К тому же функции BitBlt и StretchBlt с принтером работают довольно загадочно (кто не знает, тому долго и нудно придется объяснять, а кто знает - тот поймет).

И ЧТО ЖЕ ДЕЛАТЬ?

Может подскажете хоть где почитать. Потому что даже в MSDN все описывается только на уровне стандартных GDI объектов, а здесь
нужна скорее какая-то технология для печати подобного рода графики.

Заранее спасибо.


 
Dimka Maslov   (2001-11-05 13:51) [1]

Основополагающий принцип работы программ для Windows: вывод данных только при помощи стандартных процедур, предоставляемых операционной системой, по-этому придётся ждать десятки минут, если хочется обрабатывать большие объёмы информации.


 
GarryFV   (2001-11-05 16:28) [2]

Неверный ответ :).
На DC экрана весь этот объем выводится за пару секунд. Стандартными GDI функциями. А вот на DC принтера пол-дня, грубо говоря, а если объем слегка великоват, то принтеру и мозгов не хватает.

Фокус в том, что для вывода на печать не нужно формировать полноцветный bitmap на 100М (см. вопрос). Я уже молчу, если принтер не цветной.
Так что, самому делать пребразование цветов к 256, например?
Тоже не то. Тем более, что размер уменшится только в 4 раза, т.е. 25М будет.
Еще раз говорю - нужна технология какая-то. Можно, например, создать bitmap в 4 раза меньшего размера, а затем стандартным способом Stretch-ить на принтер. Но это вроде как изврат какой-то.

Работает же Photoshop как-то. И выводит весьма масштабные изображения довольно шустро.

Так никто не знает, где почитать то можно?

BTW: BitmapHandle:=CreateCompatibleBitmap(DC,4960,7014); - не работает, возвращает 0.
Наибольшее, что удалось создать - 3562 Х 5616.


 
Anatoly Podgoretsky   (2001-11-05 17:34) [3]

А если еще разделишь на 8 то получишь всего то 3 мб
Каждый пиксель на принтере имеет всего два состояния 0 или 1
Но вот захочешь ли ты делать преобразозвания в монохром это другой вопрос.
Не знаю может стоит помучиться с метафайлами?


 
GarryFV   (2001-11-06 12:28) [4]

Я не сказал, что принтер всегда черно-белый. Просто для полной оптимизации можно учесть и это.
Ну что ж, вопрос, как я вижу, действительно серьезный.
Никто ни черта не знает ;).


 
Raptor   (2001-11-06 22:28) [5]

Привет!

Читал я как то об этом. Вроде у Дарахвелидзе в книге "Delphi 4" есть пример работы с очень большими изображениями. Там для этого использовались файлы отображаемые в память.

Raptor.


 
Иван Шихалев   (2001-11-06 23:31) [6]

ИМХО, для принтера метафайлы куда лучше битмапов.



Страницы: 1 вся ветка

Текущий архив: 2002.01.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
7-22432
Voldemar
2001-09-25 04:12
2002.01.08
Назначение приоритета призапуске...


3-21991
perov
2001-12-06 09:01
2002.01.08
кодировка сообщений ошибок оракла


1-22216
Ghost_Old.
2001-12-16 14:43
2002.01.08
Помогите..кто знает как получить завтрашнюю дату..


4-22475
Di_wind
2001-11-02 16:08
2002.01.08
Поиск


4-22489
Skiv
2001-11-05 09:55
2002.01.08
Вывод версии *.exe