netlib.narod.ru< Назад | Оглавление | Далее >

Преобразования страницы

Устанавливая значения свойств PageScale и PageUnit, в действительности вы задаете параметры преобразования страницы (page transform), которое может быть представлено парой простых формул. Допустим, координаты, передаваемые графическим методам объекта Graphics, — это координаты на странице (page coordinates). Как вы еще убедитесь, это допущение практически соответствует истине, но только когда установлены свойства PageScale и PageUnit. В пространстве координат страницы любая точка может быть представлена как (xстр.yстр.).

Говорят, что координаты, исчисляемые в пикселах (начало координат расположено в левом верхнем углу клиентской области или области печати страницы), — это координаты устройства (device coordinates). В этом пространстве координат точка может быть задана как (xустр.yустр.). Параметрами преобразования страницы являются значения свойств PageUnit, PageScale, DpiX и DpiY.


Формулы преобразования страницы



Значение PageUnit Формула преобразования

GraphicsUnit.Pixel xустр. = xстр. × PageScale
yустр. = yстр. × PageScale
GraphicsUnit.Display (для дисплея) xустр. = xстр. × PageScale
yустр. = yстр. × PageScale
GraphicsUnit.Display (для принтера) xустр. = xстр. × PageScale × DpiX/100
yустр. = yстр. × PageScale × DpiY/100
GraphicsUnit.Inch xустр. = xстр. × PageScale × DpiX
yустр. = yстр. × PageScale × DpiY
GraphicsUnit.Millimeter xустр. = xстр. × PageScale × DpiX/25.4
yустр. = yстр. × PageScale × DpiY/25.4
GraphicsUnit.Point xустр. = xстр. × PageScale × DpiX/72
yустр. = yстр. × PageScale × DpiY/72
GraphicsUnit.Document xустр. = xстр. × PageScale × DpiX/300
yустр. = yстр. × PageScale × DpiY/300


В общем случае:


xустр. = xстр. × PageScale × DpiX / (GraphicsUnit, единиц на дюйм)

yустр. = yстр. × PageScale × DpiY / (GraphicsUnit, единиц на дюйм)


Остерегайтесь действий над целыми числами. Можно попытаться задать коэффициент масштабирования страницы в 1/64 дюйма так:

  grfx.PageScale = 1 / 64 ;

Но С# выполняет целочисленное деление перед автоматическим преобразованием в float! Здесь нужно помочь компилятору, указав ему. что от него требуется:

  grfx. PageScale = 1f / 64;

Преобразование страницы влияет на все координаты всех функций рисования из класса Graphics, о которых шла речь до сих пор. Оно также влияет на сведения, возвращаемые MeasureString и версией метода GetHeight, реализованной в классе Font и принимающей объект Graphics как аргумент.

Преобразование страницы — атрибут, характерный только для класса Graphics. Оно влияет только на объекты-члены класса Graphics или принимающие таковые в качестве аргумента (как GetHeight) и не влияет ни на что другое. Так, преобразование страницы не влияет на данные, предоставляемые ClientSize; значение ClientSize всегда выражается в пикселах.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz