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 | < Назад | Оглавление | Далее > |