Форум: "Основная";
Текущий архив: 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.008 c