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

Вниз

Не хватает памяти для печати (или у меня мозгов? :-)   Найти похожие ветки 

 
romeo ©   (2003-11-13 22:42) [0]

Пытаюсь вывести чертеж на принтер. Делаю следующее: Создаю в памяти TBitmap, рисую на нем все, что нужно, затем Printer.Canvas.Draw ... Проблема вот в чем: чтобы печаталось без искажений размер битмапа должен быть равным размеру печатаемой области принтера, а если принтер лазерный, то приходится создавать картинку порядка 6000х4000 пикселей (для струйных - поменьше, и все вроде нормально...), что приводит к появлению ошибки "EOutOfResources". Что с этим делать?
Заранее спасиба...


 
Dimaxx ©   (2003-11-13 23:30) [1]

Рисуй сразу на канве принтера (см. TPrinter.Canvas) - она уже имеет нужные размеры.


 
Viktor Kushnir ©   (2003-11-14 08:21) [2]

Неа, надо просто подготовить векторное изображение (TMetaFile), и уже его копировать на конву принтера. Проверенно мною - размер используемой памяти именно для чертежа уменьшается в сотни раз.

Сам посуди: В растре - 6000х4000х32 битный цвет = 91,5Мб.


 
romeo ©   (2003-11-16 19:50) [3]

Опять проблема... При выводе на печать метафайла - все путём, но когда тот же самый метафайл пытаюсь отобразить на канве TPaintBox при предпросмотре - то он, сволочь, как-то странно масштабируется при StretchDraw...


 
Думкин ©   (2003-11-16 20:04) [4]

А еще под Вынь98 в Метафайле сделать следующее:

with TMetafileCanvas.Create(MyMetafile, 0) do
try
Font.Name := "WingDings";
TextOutW("mmmmm");
finally
Free;
end;


Буковки налезут друг на друга.


 
Юрий Федоров ©   (2003-11-16 20:04) [5]

Выводить тот же самый метафайл при предпросмотре - правильно, но иной раз не допустимо.
Если не горит, завтра можем выдать детальный ответ, у меня коллега на этом собаку съел


 
romeo ©   (2003-11-16 20:09) [6]


> Юрий Федоров © (16.11.03 20:04) [5]

Еще не горит, но дымком откуда-то тянет...
Буду признателен за помощь


 
Murad ©   (2003-11-17 11:03) [7]

Я тот самый коллега Юрия Федорова, который съел на этом собаку (и при том не одну). С метафайлом не очень хорошо... Будут небольшие, но отличия относительно исходного изображения, к тому же метафайл глючит с шрифтами... Я делаю как и ты, через битмап, а если он слишком большой то режу его на несколько маленьких...(правда я делаю это для превью) а на принтер я печатую просто передавая в функцию отрисовки printer.handle ...если есть вопросы, моя аська в анкете


 
REA ©   (2003-11-17 11:34) [8]

Как мне-то хорошо: я сделал компонент и рисую на DC без Bitmap и метафайлов. Т.е. на экран я тоже через Bitmap вывожу (типа DoubleBuffered), а на принтер напрямую.


 
Murad ©   (2003-11-17 12:08) [9]

2REA ©
Присоединяюсь... у меня тоже самое...
Все что я сказал, про нарезку ректов - это для превью
(у меня там вообще 3 алгоритма - Изотропный DC, Metafile, Отрисовка на битмап созданый по принтерному DC), а на принтер я тоже рисую напрямую


 
romeo ©   (2003-11-17 14:57) [10]

Я тут подумал,а может для превью делать Bitmap размером максимум с экран (в зависимости от текщего масштаба превью - можно и меньше, если на экран влезет весь лист), а рисовать на нем, пересчитывая координаты контрольных точек моих примитивов (и толщину линий в пикселях экрана) с учетом текущего масштаба превью и его смещения?
Надо попробовать...


 
Murad ©   (2003-11-17 15:15) [11]

2romeo © (17.11.03 14:57) [10]
Это не верно... Хорошо сделанное превью не должно влиять на логику отрисовываемой графики (пересчитывать координаты, толщины и т.п.) Ф-ии рисования должны быть одни и те же...
Есть три основных способа реализации превью
1. Изменяешь параметры DC (SetWindowExtEx, SetViewportExtEx)
под принтер. Изотропное DC
2. Метафайл
3. Создаешь DC совместимое с принтерным
compDC := CreateCompatibleDC(printer.Handle);
bmp := CreateCompatibleBitmap(compDC, W, H);
SelectObject(compDC, bmp);
Рисуешь на него, а с него StrechBlt на превью...

Все эти способы прекрасно работают и НЕ ТРЕБУЮТ учитывания
режима(Draw, Print, Preview) в функциях отрисовки


 
REA ©   (2003-11-17 15:22) [12]

С изотропным у меня возникли проблемы и я все же работаю в MMText, хотя использую SetWindowOrg/ext. Кроме того у меня Preview и работа с документом это тоже самое, поэтому требуются и обратные преобразования координат.


 
romeo ©   (2003-11-17 18:32) [13]

Изотропное DC - это когда одинаковое количество пикселей на дюйм по X и по Y? А если у принтера это не так?



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

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

Наверх




Память: 0.5 MB
Время: 0.015 c
1-89965
Новичек
2003-11-17 18:04
2003.11.27
Treeview & PopupMenu


1-89894
Кен
2003-11-12 07:04
2003.11.27
Почему массивы Boolean сохраняются на диск как одно


1-89938
SkyRanger
2003-11-18 04:47
2003.11.27
OpenAPI работа с редактором


14-90105
Rouse_
2003-11-04 09:48
2003.11.27
Антология Мастера Улабаются


14-90069
sniknik
2003-11-05 14:54
2003.11.27
Прикол, возможно старый но я его вижу впервые...