![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Битмап в метафайле [D7, WinXP]
Pul © (2004-03-31 12:33:00)Я вывожу текст на битмап, затем делаю поворот этого битмапа и вывожу на канву наследника TGraphicControl. При копировании канвы формы в метафайл, текст получается кубиками. Подскажите пожалуйста, как избавиться от такого эффекта?
Мне кажется, что это связано с разрешающей способностью канвы, хотя я могу ошибаться.
Pul (2004-04-09 14:12:00) [1]>> MBo © (08.04.04 06:44) [18]
могу привести пример кода или выслать exe для наглядности
Pul (2004-04-09 11:48:00) [2]Да, есть.
Я перед выводом текста вычисляю rect, в который помещается текст ( DrawText(....or DT_CALCRECT) ). Один и тот же текст с одинаковыми размерами rect'а, но под разным углом выглядит по разному.
MBo (2004-04-08 06:44:00) [3]Хм... А место для вывода есть?
Pul (2004-04-07 19:39:00) [4]По поводу вашего совета с поворотом канвы.
При повороте на 180 проблем не возникает, а при повороте на 181,179 градусов - обрезается примерно половина последней строки текста. С чем это может быть связано?
Pul (2004-04-01 12:22:00) [5]>> MBo © (01.04.04 06:45) [15]
Огромное спасибо!
MBo (2004-04-01 06:45:00) [6]procedure TForm1.Button1Click(Sender: TObject);
var
xf:TXForm;
A:Double;
begin
A := Pi/4;
xf.eM11:=Cos(A);
xf.eM12:=Sin(A);
xf.eM21:=-Sin(A);
xf.eM22:=Cos(A);
xf.eDx:=0;
xf.eDy:=0;
SetGraphicsMode(Canvas.Handle,GM_ADVANCED);
SetWorldTransform(Canvas.Handle, xf);
Canvas.Textout(200,100,'QWERTY');
end;
выводит текст под углом (в NT,2K,XP)
Pul (2004-03-31 19:28:00) [7]Да, SetWorldTransform стал возвращать True, но результата никакого не видно
MBo (2004-03-31 18:55:00) [8]SetGraphicsMode(Canvas.Handle,GM_ADVANCED);
Учти, что GM_ADVANCED, к сожалению, сбрасывается при перерисовке формы, даже если Caption поменять между SetGraphicsMode и SetWorldTransform. Для битмапа или контекста метафайла все OK
Pul (2004-03-31 18:41:00) [9]>> MBo © (31.03.04 17:27) [11]
SetWorldTransform всегда возвращает False. Интересно, почему?
VAR
C: tagXFORM;
A: Real;
begin
A := Pi/4;
C.eM11:=Cos(A);
C.eM12:=Sin(A);
C.eM21:=-Sin(A);
C.eM22:=Cos(A);
C.eDx:=0;
c.eDy:=0;
if SetWorldTransform(Canvas.Handle, C) then
Label1.Repaint;
end;
MBo (2004-03-31 17:27:00) [10]SetWorldTransform не спасет? (NT-семейство)
Pul (2004-03-31 17:22:00) [11]>> MBo © (31.03.04 15:43) [9]
Что самое интересное, что в метафайле это возможно. И выравнивание, и разбиение на строки - и все это под произвольным углом. Как же вставить в метафайл текст с разбиением на несколько строк?
MBo (2004-03-31 15:43:00) [12]Для себя - нет, но в форуме проплывало как-то.
Pul (2004-03-31 15:34:00) [13]>>MBo © (31.03.04 14:20) [7]
если без поворота, то проблем нет, а по 45 градусов, задолбаешься.
А вам тоже приходилось делать подобное?
MBo (2004-03-31 14:20:00) [14]Угу, тогда самому придется рассчитывать переносы...
Pul (2004-03-31 14:18:00) [15]>>MBo © (31.03.04 14:17) [5]
Функция DRAWTEXT игнорирует флаг DT_WORDBREAK
MBo (2004-03-31 14:17:00) [16]???
Pul (2004-03-31 14:14:00) [17]>>MBo © (31.03.04 14:11) [3]
(см. структуру LogFont)
С применением этой структуры теряется wordwrap
MBo (2004-03-31 14:11:00) [18]Штатный вывод текста производится с антиалиасингом, т.е. сглаживанием зазубрин. При повороте качество, конечно, ухудшается. Можно использовать изощренные методы поворота - с билинейной или бикубической интерполяцией или наложить фильтр на повернутую картинку, однако исходной красоты достичь не удастся. Думаю, проще на конечный результат выводить текст повернутым шрифтом (см. структуру LogFont)
Pul (2004-03-31 14:03:00) [19]Одинаково
MBo (2004-03-31 12:51:00) [20]метафайл с битмапом выглядит хуже, чем повернутый битмап?