Сохранение размера шрифта при загрузке/сохранении RTF в WPF

Если Ваше дерево - приблизительно полные , который является каждым уровнем, имеет его полное дополнение детей за исключением последних двух, то Вы имеете между вершинами N^(L-2) и N^(L-1) и между N^(L-1) и общим количеством узлов N^L.

, Если Ваше дерево не полно, то знание количества вершин не помогает, поскольку полностью несбалансированное дерево будет иметь одну вершину, но произвольно много родителей.

интересно, как точный Ваш оператор 'каждый узел имеет об узлах N', - если Вы знаете средний коэффициент ветвления, возможно, можно вычислить ожидаемый размер дерева.

, Если Вы можете найти отношение листов к внутренним узлам, и Вы знаете среднее число детей, можно приблизить это как (n*ratio) ^N = n. Это не даст Вам Ваш ответ, но интересно, может ли кто-то с лучшей математикой, чем я выяснить способ вставить L в это уравнение и дать Вам что-то разрешимое.

однако, если Вы хотите знать точно, необходимо выполнить итерации по структуре дерева и узлов количества, когда Вы идете.

6
задан Sven Künzler 21 July 2009 в 14:27
поделиться

1 ответ

Все измерения WPF производятся в пикселях (хотя и не совсем в пикселях экрана). Даже когда вы указываете FontSize для TextRange .

внутри, когда вы указываете что-то вроде FontSize = "14pt" в XAML, WPF использует ] LengthConverter и изменяет это квалифицированное двойное значение на основе фактора, связанного с единицей измерения, которую вы указываете. Итак, 11 умножается примерно на 1,3333333. Поэтому, если вы передаете обычное двойное значение свойству FontSize , единицей измерения будут пиксели.

Однако, если вы используете FontSize = "14.0001pt" , или умножьте точки на 1,3333334, или, может быть, даже просто добавить 0,0001 к измерению пикселей, это смещает вещи ровно настолько, чтобы вы фактически получали \ fs22 или \ fs28 (а не \ fs21 или \ fs27 соответственно). Это когда вы устанавливаете размер в WPF.

Причина, по которой у вас есть \ fs22, Load (), Save (), а затем \ fs21, связана с тем же. Парсер принимает RTF и преобразует его в объекты WPF. Таким образом, 22 полуточки становятся примерно 14,666666666667 пикселей. Когда вы снова сохраняете (), эти пиксели преобразуются обратно в другую единицу, но не очень правильно. 14,666666666667 пикселей превращаются в 21 половину точки, а 14,6666674 пикселей становятся на 22 полуточки, это то, что вы хотели.

Возможно, эта информация даст вам представление о том, как получить RTF по-другому. Возможно, вы можете вместо этого получить XAML и преобразовать его. Может быть, есть хороший бесплатный конвертер XAML в RTF из третьей части, который не имеет досадных ошибок округления.

6
ответ дан 17 December 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: