Форум: "WinAPI";
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];
ВнизСложная печать графики Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c