Преобразования рисовальщика

В используемой по умолчанию координатной системе рисовальщика QPainter точка (0,0) находится в левом верхнем углу устройства рисования; значение коорди­нат х увеличивается при перемещении вправо, а значение координат у увеличивает­ся при перемещении вниз. Каждый пиксель занимает область 1 х 1 в координатной системе, применяемой по умолчанию.

Необходимо помнить об одной важной особенности: центр пикселя имеет «полу­пиксельные» координаты. Например, пиксель в верхнем левом углу занимает об­ласть между точками (0, 0) и (1, 1), а его центр находится в точке (0.5, 0.5). Если мы просим QPainter нарисовать пиксель, например, в точке (100, 100), его координаты будут смещены на величину +0.5 по обоим направлениям, и в результате нарисован­ный пиксель будет иметь центр в точке (100.5, 100.5).

На первый взгляд эта особенность представляет лишь теоретический интерес, однако она имеет важные практические последствия. Во-первых, смещение +0.5 дей­ствует только при отключении сглаживания линий (режим по умолчанию); если ре­жим сглаживания линий включен и мы пытаемся нарисовать пиксель черного цвета в точке (100, 100), QPainter фактически выведет на экран четыре светло-серых пик­селя в точках (99.5, 99.5), (99.5, 100.5), (100.5, 99.5) и (100.5, 100.5), чтобы создалось впечатление расположения пикселя точно в точке соприкосновения всех этих четы­рех пикселей. Если этот эффект нежелателен, его можно избежать, указывая полу­пиксельные координаты, например (100.5,100.5).

При начертании таких фигур, как линии, прямоугольники и эллипсы, действуют аналогичные правила. На рис 8.7 показано, как изменяется результат вызова drawRect(2, 2, 6, 5) в зависимости от ширины пера, когда сглаживание линий от­ключено. В частности, важно отметить, что прямоугольник 6x5, вычерчиваемый пе­ром с шириной 1, фактически занимает область размером 7x6. Это не делалось прежними инструментальными средствами, в том числе в ранних версиях Qt, но та­кой подход существенен для получения действительно масштабируемой, не зависи­мой от разрешающей способности векторной графики.


Рис. 8.7. Вычерчивание прямоугольника 6x5 при отсутствии сглаживания линий

Теперь, когда мы ознакомились с используемой по умолчанию координатной системой, мы можем внимательно рассмотреть возможные ее


<< назад вперед >>