2016-12-07 1 views
0

더 나은 이미지 표시를 지원하는 확장 된 RichTextBox를 만들었습니다. 간단히 말해서 : RTF 입력에서 텍스트 기반 이미지 자리 표시자를 파싱하고 빈 단락으로 공백을 띄워 이미지 높이를 바꾸고 텍스트 위의 페인트 이벤트에 공백 내부의 이미지를 그립니다.RichTextBox space issue

이제 문제는 간격이 잘못되었다는 것입니다. 나는 다음과 같은 공식으로 트윕 계산 :

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

graphicsRichTextBox에서하고 size 이미지 크기입니다. DPI 값이 96이므로 기본적으로 twips = 15 * pixels입니다.

RTF 제어 단어 \sbN\saN을 트윕 값으로 계산해 보았습니다. (디버거로 제어했을 때, 그 값은 예상대로입니다). 나는 또한 PFM_SPACEBEFOREPFM_SPACEAFTER과 interop을 사용했다.

두 가지 방법 모두 동일한 결과를 얻습니다. 문제는 RichTextBox 내부의 실제 공간이 너무 크다는 것입니다. 계산 된 트윕 값에 0.75를 곱하면됩니다. 그러나 나는 정말로 이것이 일어나지 않는 이유를 알지 못합니다.

나의 첫 번째 생각은 인자 72/96 (PPI/DPI)이 0.75였습니다. 그러나 이것은 나를 위해 말이되지 않습니다.

추가 공간은 이미지 높이에 비례하여 증가합니다. 따라서 공간은 작은 아이콘 (예 : 24 픽셀 높이)에 대해서는 거의 알아볼 수 없습니다. 그러나 더 큰 이미지 (예 : 320 픽셀 높이)의 경우 추가 공간이 큽니다.

몇 가지 아이디어가 있습니까? RichTextBox 컨트롤의 버그입니까?

명확히하기 : 나는 System.Windows.Forms.RichTextBox을 기본 클래스로 사용했습니다.

답변

0

나는 오류를 찾았습니다. 컨트롤의 DPI 값 대신 이미지의 DPI 값을 사용해야했습니다. 이미지 DPI 값은 120 이었으므로 계수는 0.8 (0.75가 아님)이었습니다. 이제는 맞습니다. 나는 누군가에게 같은 문제가있는 경우에 대비해 여기에 질문을 남긴다.