C # Масштабирование позиций GDI, но не размера шрифта или толщины линии - PullRequest
3 голосов
/ 02 декабря 2010

Мне нужно много рисовать на сетке с интервалом 12,5 пикселей X и 20 пикселей Y (масштаб PICA). Шрифт должен быть определенного размера, а линии должны быть толщиной в один пиксель. В настоящее время я сохраняю эти значения в числах с плавающей точкой и умножаю их (например, текст, начинающийся со строки 3, столбец 6 рисуется как координаты 2f * cx, 5f * cy). Я бы хотел избежать всего этого ненужного умножения с помощью масштабного преобразования, но, к сожалению, они также влияют на размер шрифта и толщину линии. Есть ли способ избежать этого? Или компилятор будет делать это для меня, поскольку значения cx / cy являются константами?

Ответы [ 2 ]

7 голосов
/ 03 декабря 2010

... кроме того, Microsoft оставила нам небольшой «хак», если вы не хотите, чтобы линии масштабировались. Установите ширину линии равной 0 пикселей, и она всегда будет отображаться толщиной в один пиксель.

1 голос
/ 02 декабря 2010

Компилятор должен уменьшить постоянную часть выражений до одной константы, но все равно придется умножать во время выполнения, так как значение вашего числа с плавающей запятой неизвестно во время компиляции.Таким образом, (1 + 2 + c) * 6 * f может быть уменьшено компилятором до n * f, если c является константой.

Лучше всего, чтобы предотвратить масштабирование текста, вероятно, нужно настроитьмасштабируя преобразование, нарисуйте всю свою нетекстовую графику, которая вам не нужна, для поддержания минимальной ширины линии, а затем нарисуйте текст без использования преобразования.Вы можете использовать преобразование, чтобы найти место, где должен начинаться текст, чтобы избавить себя от необходимости вычислять это независимо - такая функция, как LPtoDP (логическая точка к точке устройства), должна решить эту проблему.визуализировать текст в преобразовании, но применить обратное масштабирование к самому размеру текста.Таким образом, если преобразование уменьшается на 5%, размер шрифта увеличивается на 5%.Это не даст точных результатов, но может быть достаточно близко для визуальных эффектов.

...