Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.009 c
1-89910
hellmachine
2003-11-15 04:23
2003.11.27
Возможно ли программно определить - был ли перекрыт виртуальный


11-89803
alfromorel
2003-03-19 10:38
2003.11.27
Как отлавить сообщения ухода мышки с компонента


1-89886
igit
2003-11-15 15:04
2003.11.27
спрятать курсор мыши?


1-89809
NewD
2003-11-17 11:09
2003.11.27
Как реализовать динамический массив через указатели


1-89884
Igg
2003-11-15 18:21
2003.11.27
Использование приложения под другими ОС





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский