Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правильный превью [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 :) то как тогда ???


Наверх

Титульная страница Поиск, карта сайта Написать письмо