2016-12-07 1 views
0

Я создал расширенный RichTextBox с улучшенной поддержкой отображения изображений. Короче: я разбираю текстовые заполнители текстовых изображений из RTF-ввода, заменяю их пустым абзацем с соответствующим интервалом (высотой изображения) и рисуем изображения в событии рисования над текстом (внутри пробелов).Проблема с пространством в пространстве RichTextBox

Проблема в том, что интервал кажется неправильным. Я вычислил твипы по следующей формуле:

size.Width = (int)((1440 * size.Width)/graphics.DpiX); 
size.Height = (int)((1440 * size.Height)/graphics.DpiY); 

Где graphics от моего RichTextBox и size это размер изображения. Поскольку значение DPI равно 96, это в основном twips = 15 * pixels.

Я пробовал слова управления RTF \sbN и \saN с моим рассчитанным значением twips (я контролировал его с помощью отладчика, значение как и ожидалось). Я также использовал interop с PFM_SPACEBEFORE и PFM_SPACEAFTER.

Оба способа дают одинаковый результат. Проблема в том, что реальное пространство внутри RichTextBox слишком велико. Если я умножу вычисленное значение twips с 0,75, оно подходит. Но я действительно не понимаю, почему это происходит.

Моя первая мысль была фактором 72/96 (PPI/DPI), который равен 0,75. Но для меня это не имеет смысла.

Дополнительное пространство увеличивается пропорционально высоте изображения. Таким образом, пространство едва заметно для небольших значков (например, высота 24 пикселя). Но для больших изображений (например, высота 320 пикселей) дополнительное пространство огромно.

Некоторые идеи? Это ошибка в элементе управления RichTextBox?

Чтобы уточнить: я использовал System.Windows.Forms.RichTextBox в качестве базового класса.

ответ

0

ОК Я нашел ошибку самостоятельно. Мне пришлось использовать значения DPI изображения вместо значений DPI элемента управления. Значения DPI изображения составляли 120, поэтому коэффициент составлял 0,8 (а не 0,75). Теперь он подходит. Я оставляю вопрос здесь, если у кого-то такая же проблема.

Смежные вопросы