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

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

Размеры шрифтов


REA ©   (2002-10-09 12:02:00) 

Тут была уже тема, что шрифты плавно не смасштабировать.
Если устанавливать Height то при размере шрифта 10
Font.Height = -Font.Size * Font.PixelsPerInch / 72 =
-10*96/72 = -13 в логических единицах.
Т.е. не больно то оно и масштабируется на экране.
На принтер -10*1200/72 = -167 уже лучше
Есть соображния как сделать вывод на экран более точным?
Может не использовать MM_Text режим?
Кто понимает в этих логических единицах?


REA   (2002-10-10 15:47:00) [1]

Видимо не получится использовать для всего эту методику. Только для шрифтов...


REA   (2002-10-10 14:34:00) [2]

Хм. И правда. Спасибо!
Будем работать в этом напралении. Надо теперь проверить как картинки масштабируются и все остальное.


MBo   (2002-10-10 14:12:00) [3]

Значит, ты не ttf шрифт используешь
у меня в примере
image1.canvas.font.Name:="Arial";//TTF
и гладко масштабируется, а растровые, конечно, квадратами получатся, причем хуже, чем если просто размер шрифта увеличивать - у них же есть опред. набор матриц для нескольких размеров.


REA   (2002-10-10 13:48:00) [4]

Квадратные, значит при увеличении размера шрифта используется алгоритм растрового масштабирования и шрифт выглядит как увеличенный растровый, а не как TrueType большего размера.


MBo   (2002-10-10 12:58:00) [5]

Что значит квадратные?


REA   (2002-10-10 10:59:00) [6]

Фигня получается - шрифты квадратные.
Оно сначала выводит куда-то, а потом рендерит на DC, а не меняет сам шрифт.
Я так уже пробовал оказывается раньше и не стал менять MappingMode.


REA   (2002-10-09 14:53:00) [7]

Как переводить - понятно. Ладно.
Сам разберусь потом - главное идея.
Я просто думал он шрифты не масштабирует при смене режима.


MBo   (2002-10-09 14:09:00) [8]

Если в миллиметры, то надо MM_HIMETRIC или LOMETRIC или GetDeviceCaps делать.
Кстати, в Тейксейре описано (9 глава, последняя страница раздела Статьи)


REA   (2002-10-09 14:00:00) [9]

А координаты как расчитать, чтобы в миллиметры перевести?
Т.е. миллиметры в пикселы тривиально в MM_TEXT переводятся, а тут как?
Надо бы мне конечно самому попробовать, но сейчас жалко некогда. Если есть идеи, буду рад посмотреть.


MBo   (2002-10-09 12:26:00) [10]

набросок

procedure TextScaleOut(dc:HDC; Scale:Double; x,y:integer; const s:String);
begin
SetMapMode(dc,MM_ANISOTROPIC);
SetViewPortExtEx(dc,100,100,nil);
SetWindowExtEx(dc,round(100/scale),round(100/scale),nil);
TextOut(dc,x,y,Pchar(S),Length(s));

// для сохранения точки вывода в экр. координатах можно так
// TextOut(dc,round(x/scale),round(y/scale),Pchar(S),Length(s));

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
image1.canvas.font.Name:="Arial";//TTF
TextScaleOut(image1.canvas.handle,2,20,20,"Some text");
end;


Наверх

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