我创建了一个扩展的RichTextBox,它具有更好的图像显示支持。简而言之:我从RTF输入中解析基于文本的图像占位符,将其替换为具有专有间距(图像高度)的空段落,并在文本上方(空间内)的绘制事件中绘制图像。
现在的问题是间距似乎是错误的。我用下面的公式计算了缇:
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
和我计算的缇值(我用调试器控制它,值是预期的)。我还使用了PFM_SPACEBEFORE
和PFM_SPACEAFTER
的互操作。
两种方式都给出相同的结果。问题是RichTextBox中的真实空间太大了。如果我将计算的缇值乘以0.75就可以得到。但我真的不知道为什么会这样。
我的第一个想法是因子72/96(PPI / DPI)为0.75。但这对我来说毫无意义。
额外空间与图像高度成比例增加。因此,对于小图标(例如24像素高度),空间几乎不可记录。但是对于较大的图像(例如320像素高度),额外的空间是巨大的。
一些想法?这是RichTextBox控件中的错误吗?
澄清一下:我使用System.Windows.Forms.RichTextBox
作为基类。
答案 0 :(得分:0)
好的,我自己发现了错误。我不得不使用图像的DPI值而不是控件的DPI值。图像DPI值为120,因此因子为0.8(不是0.75)。现在它适合。我在这里留下问题,万一有人遇到同样的问题。