문제

GDI를 사용하여 글꼴을 생성하는 일반적인 방법은 원하는 포인트 크기와 대상 장치의 DPI (Dection)의 수직 해상도 (DPI)를 사용하는 것입니다.

LOGFONT lf = {0};
lf.lfHeight = -MulDiv(point_size, GetDeviceCaps(hdc, LOGPIXELSY), 72);
...
HFONT hfont = CreateFontIndirect(&lf);

기본값을 가정합니다 MM_TEXT 매핑 모드에서는 원하는 장치의 Point_Size를 픽셀 높이로 변환합니다. (이것은 일반적인 근사치입니다. 실제로 72가 아닌 1 인치에 72.27 포인트가 있습니다.) (마이너스 부호는 셀 높이가 아닌 실제 문자 높이를 지정하고 싶다는 것을 의미합니다.)

옆으로 글꼴을 만들고 싶다면 90 도의 방향과 탈출이있는 글꼴입니다. LOGPIXELSX 보다는 LOGPIXELSY? 내가 타겟팅하는 일부 프린터의 경우 수평 및 수직 해상도가 다릅니다.

일반적으로 각도를 원한다면 theta, 내가 결합합니까? LOGPIXELSX 그리고 LOGPIXELSY? 나는 다음과 같은 것을 생각하고있다 :

// Given theta in degrees (e.g., theta = 45.0) ...
double theta_radians = theta * 2.0 * pi / 360.0;
int dpi = static_cast<int>(GetDeviceCaps(hdc, LOGPIXELSX) * sin(theta_radians) +
                           GetDeviceCaps(hdc, LOGPIXELSY) * cos(theta_radians) +
                           0.5);
LOGFONT lf = {0};
lf.lfHeight = -MulDiv(point_size, dpi, 72);
// Set escapement and orientation to theta in tenths of a degree.
lf.lfEscapement = lf.lfOrientation = static_cast<LONG>(theta * 10.0 + 0.5);
...

이것은 나에게 직관적 인 의미가 있지만, 이것이 실제로 GDI 글꼴 맵퍼와 프린터 드라이버의 작동 방식인지 궁금합니다.

올바른 솔루션이 없습니다

다른 팁

1) 72 포인트/인치가 있습니다. (예전에는 72.27 이었지만 변경되었습니다.) 2) logpixelsx와 logpixelsy를 결합하는 것은 괜찮지 만 3) 글꼴 맵퍼는 글꼴을 매핑 할 때 탈출과 방향을 보지 않습니다. 로그 픽셀 값은 좌표 변환의 일부로 만 사용됩니다.

http://msdn.microsoft.com/en-us/library/ms969909(loband).aspx

진술에는 가능한 많은 드라이버와 프린터가 포함될 수 있기 때문에 "프린터 드라이버 작동"에 대해 잘 모르겠습니다.

그들은 사각형 픽셀로 래스터 화 한 다음 비 제곱으로 늘릴 수 있습니다. 그들은 글리프 곡선을 변형시킬 수 있습니다. 그들은 다른 일을 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top