Direct2D/DirectWrite에서 텍스트를 렌더링하지만 TextFormat 또는 TextLayout에서 SetLineSpacing()
을 호출해도 아무런 효과가 없습니다. 아무도 이유를 아나요?SetLineSpacing()이 DirectWrite에서 작동하지 않습니다 - 이유가 무엇입니까?
답변
저는 이것이 99 %의 버그인지 확인했습니다. 최근에 Direct2D로 조금 놀아 봤지만 TextLayout에 SetLineSpacing()
의 문제가 있습니다. 설명하는 것과 동일하다고 생각합니다.이 경우에는 내가 당신이 아니라는 것을 확인할 수 있습니다. MS Connect에서 버그 보고서를 다시 열면 닫혔습니다.
정말 2009 년에 작동하지 않았지만 적어도 지금은 SetLineSpacing()을 호출하면 예상대로 작동하는지 모르겠습니다. 문제는'DWRITE_LINE_SPACING_METHOD_DEFAULT'를 지정할 때,이 문맥에서 의미가 없기 때문에 두 개의 float 값은 무시된다는 것입니다. 기본 줄 간격은 "사용 된 글꼴 및 인라인 개체에서 줄 간격을 가져 오는"것을 의미합니다. 자세한 내용은 내 대답을 참조하십시오. – Pepor
당신이 SetLineSpacing()
에 의해 반환 된 HRESULT
오류 코드를 확인 했 ... SetLineHeight 기능이?
힌트 : Visual Studio를 사용하는 경우 디버그 조사 식 창 중 하나에 eax,hr
을 입력하면 통화 직후 가능한 오류 코드를 확인할 수 있습니다.
예, S_OK입니다. –
최소 지원되는 클라이언트 : 윈도우 7, 윈도우 비스타 SP2 및 플랫폼 업데이트와 윈도우 비스타.
위에서 언급 한 Windows 버전 중 하나를 실행합니까? 변경 사항이 표시되지 않는 이유는 위에서 아래에있는 버전이 DirectWrite의 SetLineSpacing()을 지원하지 않기 때문입니다.
내가 실행하고 있다는 사실은 내가 실제로 지원되는 운영 체제를 사용하고 있음을 암시합니다.이 경우 2008R2입니다. –
Dmitri Nesteruk과 같은 문제가 있습니다.
그러나, " CreateTextLayout"후에 lineSpacing을 설정하면 SetLineSpacing이 작동하지 않는다는 것을 알았습니다.
그렇지 않으면 CreateTextLayout 전에 LineSpacing을 설정하면 이 작동합니다.
아마도이 soluton을 시도해 볼 수 있습니다.
추 신 : 내 env. Window Vista SP2에 있습니다.
감사합니다.
불행히도 당신이하려는 일을 보여주는 코드를 제공하지 않습니다. 나는이 같은 줄 간격을 설정하기 위해 노력하고 있으리라 믿고있어 :
pTextLayout->SetLineSpacing(DWRITE_LINE_SPACING_METHOD_DEFAULT, lineSpacing, baseline);
MSDN의 문서는 다른 줄 간격 방법에 대한 정말 명확하지 않다. 기본 방법은 사용 된 글꼴 및 인라인 객체 (있는 경우)에서 각 행의 간격을 가져 오므로 각 행은 해당 내용에 따라 필요한 높이입니다. 이 경우 두 매개 변수 lineSpacing
및 baseline
은 무시됩니다.
단일 글꼴 (및 글꼴 크기)을 사용하고 인라인 개체 (텍스트보다 높지 않은 인라인 개체)가없는 텍스트 형식 인 경우 균일 한 줄 간격을 지정할 수 있습니다. 이것은 DWRITE_LINE_SPACING_METHOD_UNIFORM
을위한 것입니다. 방금 시도해 본 결과 SetLineSpacing()
메서드를 호출하면 전달 된 인수에 따라 줄 간격이 균일 해집니다.
Windows 10부터는 글꼴 크기와 인라인 개체가 지정하는 것과 관련된 줄 간격을 얻기 위해 세 번째 줄 간격 방법 인 DWRITE_LINE_SPACING_METHOD_PROPORTIONAL
을 사용할 수 있습니다. 그러나 이것은 Windows 10에서만 지원됩니다.
내 경험상 가장 오해의 소지가있는 부분은 SetLineSpacing(DWRITE_LINE_SPACING_METHOD_DEFAULT, x, y)
이 오류없이 성공하고 나중에 GetLineSpacing()
메서드를 사용하여 줄 간격 매개 변수를 검색하면 제공됩니다 (아직까지는 아무 것도 얻을 수 없습니다). API는 내부적으로 일관성이 있으므로 아무 것도 유용하지 않더라도 지정된 값을 버리지 않습니다. 또한 새로 만든 IDWriteTextFormat
또는 IDWriteTextLayout
인스턴스에서 GetLineSpacing()
을 호출하면 값이 0으로 반환됩니다 (줄 간격 방법이 DWRITE_LINE_SPACING_METHOD_DEFAULT
이므로 올바른 값입니다). 유용하게 사용할 수 있으려면 사용중인 글꼴의 기본 줄 간격을 결정해야합니다. 사용중인 글꼴에 IDWriteFont::GetMetrics()
을 호출하면됩니다. 기본 줄 간격은 ascent
, descent
및 lineGap
값의 합계입니다.
Charles Petzold가 약 Pagination With DirectWrite에 대한 기사에 대해 썼습니다.
이것은 버그 일 수 있습니다 : http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?Feedback=507456 – Kredns
나는 버그를 게시했으나, 여기에 물어볼 때 현명하다고 생각했습니다. 뭔가 잘못하고있어. –
코드를 보여주십시오. – Goz