![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Правильный превью [D7, Win2k, WinXP]
Бормодед © (2006-05-03 14:27:00)В общем, как идеологически правильно нужно делать превью? Ну т.е. чтобы то, что пользователь видит в превью, гарантировано совпадало с тем, что пользователь увидит на бумаге, нажав Print. Причем надо иметь возможность динамически масштабировать и таскать мышкой изображение в превью.
Первое, что пришло в голову - CreateCompatibeBitmap размерами с канву принтера. Рисуем на этом битмапе что нам нужно. В окно превью при динамическом масштабированиии постоянно делаем StretchBlt с этого битмапа. При нажатии на Print - просто рисуем этот битмап на DC принтера. Все работает, все совпадает, но меня пугают размеры отжираемой при создании такого битмапа памяти.
Или же... Во время превью динамически рисовать в нужном масштабе на битмапе размером с окно превью (или меньше). Ну и при печате - тоже рисовать отдельно на DC принтера. Но тут тогда возникает опасение, что могут быть "несовпадушки"...
Или все не правильно и надо как-то по-другому?
Algol (2006-05-04 18:55:00) [1]Кстати от WMF (точнее EMF) ты рано отказался. Практика показывает что это как раз оптимальный вариант.
Бормодед (2006-05-04 14:52:00) [2]Воспримем предыдущий пост как шутку :)
Ling (2006-05-04 13:20:00) [3]А ты подумай хорошенько, так ли сильно тебе нужно самому всё рисовать и печатать. Лучше всего работает вариант - скидываем всё красиво оформив в офисную прогу, аля Word, Excell, Corel, и пусть там сами разбираются, как, куда и что печатать, а заодно и сохранить результаты могут.
Anatoly Podgoretsky (2006-05-03 19:55:00) [4]Нмного ошибся до 8 гб
Anatoly Podgoretsky (2006-05-03 19:53:00) [5]Котик Б (03.05.06 16:03) [1]
Да не много до 3 гб
Бормодед (2006-05-03 18:20:00) [6]
> Как пример:
> задан прямоугольник размером 200х100 мм и с толщиной контура
> в 1 пиксел
> то размеры прямоугольника должны быть пересчитаны и для
> монитора с 96 dpi и для лазерника с 600 dpi - но толщина
> линии должна быть 1 !!!
Не верно. Линию в 1 пиксел на лазернике с 600 dpi будет просто не видно.
REA (2006-05-03 17:54:00) [7]Больше всего конечно проблем со шрифтами - они в MM_TEXT корректно не масштабируются, а в других режимах не поймешь что написано.
В остальном примерно как в [7]
А насчет толщины линии тоже спорный вопрос - если WYSIWYG, то толщину тоже надо масштабировать, хоть и на экране меньше пиксела не нарисовать.
Котик Б (2006-05-03 17:50:00) [8]Именно !!! Второй вариант !
Рисовать не привязываясь к пикселам, а скорее к масштабу изображения, и уже в зависимости от размеров холста пересчитывать все координаты.
Несовпадушки будут, и это обязательное условие - в некоторых случаях это нужная фича - т.е. тут уже пользоатель должен сам знать что он хочет получить учитывая особенности устройства вывода.
Как пример:
задан прямоугольник размером 200х100 мм и с толщиной контура в 1 пиксел
то размеры прямоугольника должны быть пересчитаны и для монитора с 96 dpi и для лазерника с 600 dpi - но толщина линии должна быть 1 !!!
Главное чтобы небыло несовпадений пропорций :)
Бормодед (2006-05-03 17:08:00) [9]Уже точно не помню. Я пробовал им пользоваться довольно давно и не в этом проекте. Короче, результаты не удовлетворили, и про WMF с тех пор и не вспоминаю. Если предположить, что он работает верно, то, видимо, надо считать, что вы за первый вариант, только с использованием метафайла вместо битмапа в качестве "буфера". И этот метафайл рисовать и в превью и на принтер посылать?
REA (2006-05-03 16:45:00) [10]>Вобщем, в 98-х виндах он как-то странно себя вел, особенно с текстом.
Нормально он вроде себя ведет. А в чем странность?
Бормодед (2006-05-03 16:42:00) [11]
> Метафайл можно
Не... C него-то и начинал... Вобщем, в 98-х виндах он как-то странно себя вел, особенно с текстом.
REA (2006-05-03 16:38:00) [12]Метафайл можно
Бормодед (2006-05-03 16:37:00) [13]
> ... чтобы сделать правильный превью нужно добиться того
> чтобы програмке было пофиг на каком dc рисовать картинку
программке-то как раз пофиг...
> бред - а вы вкурсе сколько этот битмап на принтер будеит
> передаваться ???
> и если передасться вообще из-за нехватки локальной памяти
>
> ... а если в системе установлено к примеру лазерник 600dpi,
> струйник 4800dpi и плоттер вообще без dpi :) то как тогда
> ???
Ну, я, вроде, и высказал сразу опасения по этому поводу... Т.е., если пропустить мимо ушей ваш сарказм, предлагаете второй вариант?
Котик Б (2006-05-03 16:03:00) [14]... чтобы сделать правильный превью нужно добиться того чтобы програмке было пофиг на каком dc рисовать картинку
>просто рисуем этот битмап на DC принтера
бред - а вы вкурсе сколько этот битмап на принтер будеит передаваться ???
и если передасться вообще из-за нехватки локальной памяти
... а если в системе установлено к примеру лазерник 600dpi, струйник 4800dpi и плоттер вообще без dpi :) то как тогда ???