Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.83 MB
Время: 0.029 c
6-22301
Китаец Что За
2001-10-10 14:45
2002.01.08
Склерозик что ли?


3-21905
nic406
2001-11-28 04:21
2002.01.08
Help! Делаю Select * From T1 -> refresh -> ошибка(ADODataSet)


14-22398
Jey
2001-11-10 18:55
2002.01.08
Тут вот приспичило IRC клиент сделать ....


3-21939
SAN
2001-12-04 16:01
2002.01.08
MSSQL


7-22439
PONTIY
2001-09-27 09:18
2002.01.08
Отображение уже созданного (Create) компонента на другой форме





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский