GetGlyphOutline() 네이티브 버퍼 서식 방법

기술 자료 번역 기술 자료 번역
기술 자료: 87115 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

요약

GetGlyphOutline 함수는 응용 프로그램에 트루타입 환경에서 문자 모양 최하위 수준 정보를 검색할 수 있는 메서드를 제공합니다. 이 문서에서는 GetGlyphOutline 함수가 반환하는 데이터의 형식을 설명합니다.

추가 정보

문자 모양 개요 기호는 설명하는 배분 형식 일련의 것입니다. 각 시간 배분 형식이 있는 배분 형식을 설명하는 데 필요한 대로 많은 TTPOLYCURVE 데이터 구조에 의해 다음에 TTPOLYGONHEADER 데이터 구조를 정의합니다.

상대 위치가 아닌 절대 위치를 나타내는 POINTFX 데이터 구조는 통해 각 위치가 설명됩니다. 시작 및 끝 지점을 글리프 TTPOLYGONHEADER 데이터 구조의 pfxStart 구성원에 의해 지정됩니다.

두 가지 유형으로 TTPOLYCURVE 데이터 구조에 속하는: TT_PRIM_LINE 레코드 또는 TT_PRIM_QSPLINE 레코드. TT_PRIM_LINE 레코드를 일련의 점으로, 점 사이에 그려진 선이 글리프의 개요를 설명합니다. 일련의 문자의 개요를 설명하는 데 필요한 정방형 스플라인을 q-스플라인을 정의하는 점 TT_PRIM_QSPLINE 레코드입니다.

트루타입 있는 q-스플라인 세 지점을 A와 C 곡선의 위치 지점 (A, B 및 C) 및 B 해제 곡선 지점이 정의됩니다. (xA 지점을 A 등에 대한 Y좌표입니다 맞지 나타내는 지점 A x 좌표를 나타내는) 같이 각 q-스플라인 계산됩니다
   x(t) = (xA-2xB+xC)*t^2 + (2xB-2xA)*t + xA
   y(t) = (yA-2yB+yC)*t^2 + (2yB-2yA)*t + yA
				
위치를 t 1.0 0.0 다릅니다.

TT_PRIM_QSPLINE 레코드 형식은 다음과 같습니다.
  • 지점 A에 q-스플라인 현재 위치 (해당 TTPOLYGONHEADER, TTPOLYCURVE, 시작점 또는 끝점의 이전 TTPOLYCURVE 어느 pfxStart) 것입니다.
  • 지점 B 레코드의 현재 지점입니다.
  • 지점 C 다음과 같습니다.
    • 두 개의 레코드가 있는 경우 또는 지점 B 다음 자세한 지점, 지점 C 지점 B 및 레코드의 다음 지점을 가운데는 것입니다.
    • 그렇지 않으면, 지점 C 지점을 B. 다음에 지점입니다.
다음 코드는 TT_PRIM_QSPLINE 레코드를 처리하는 데 사용되는 알고리즘을 제공합니다. 이 코드는 TT_PRIM_QSPLINE 레코드에서 q 스플라인을 추출하는 방법을 보여 줍니다. 반면 응용 프로그램에서 사용할 적절하지 않습니다.
   pfxA = pfxStart;                // Starting point for this polygon

   for (u = 0; u < cpfx - 1; u++)  // Walk through points in spline

   {
   pfxB = apfx[u];              // B is always the current point
   if (u < cpfx - 2)            // If not on last spline, compute C

      {
      pfxC.x = (pfxB.x + apfx[u+1].x) / 2;  // x midpoint
      pfxC.y = (pfxB.y + apfx[u+1].y) / 2;  // y midpoint
      }

   else                         // Else, next point is C

      pfxC = apfx[u+1];


                                // Draw q-spline
   DrawQSpline(hdc, pfxA, pfxB, pfxC);
   pfxA = pfxC;                 // Update current point
   }
				
부동 소수점 연산자를 사용하여 지점 위의 알고리즘을 직접 조작합니다. 그러나 q-스플라인 레코드 포인트로 FIXED 데이터 형식으로 저장됩니다. FIXED 데이터 항목을 조작하는 방법을 보여 주는 코드입니다:
   FIXED fx;
   long *pl = (long *)&fx;

   // Perform all arithmetic on *pl rather than on fx

   *pl = *pl / 2;
				
다음 함수가 부동 소수점 숫자를 FIXED 표현으로 변환합니다.:
   FIXED FixedFromDouble(double d)
   {

   long l;

   l = (long) (d * 65536L);
   return *(FIXED *)&amp;l;

   }
				
프로덕션 응용 프로그램의 위치 DrawQSpline 함수를 작성하는 대신 각 q-스플라인 개별적으로 그리려면, 보다 효율적인 q-스플라인 점을 계산하고 POINT 데이터 구조체의 배열을 저장할 수 있습니다. 문자 위한 계산이 완료되면 POINT 배열을 그리기 및 문자 모양 채우기 위해 PolyPolygon 함수에 전달하십시오.

다음 예제에서는 GetGlyphOutline 8514/A (작은 글꼴) 비디오 드라이버의 24포인트 굴림 글꼴의 소문자 "j" 문자 위한 의해 반환된 데이터를 제공합니다:
   GetGlyphOutline GGO_NATIVE 'j'
   dwrc            = 208      // Total native buffer size in bytes
   gmBlackBoxX, Y  = 6, 29    // Dimensions of black part of glyph
   gmptGlyphOrigin = -1, 23   // Lower-left corner of glyph
   gmCellIncX, Y   = 7, 0     // Vector to next glyph origin

   TTPOLYGONHEADER #1           // Contour for dot on "j"
   cb       = 44              // Total size of dot polygon
   dwType   = 24              // TT_POLYGON_TYPE
   pfxStart = 2.000, 20.000   // Start at lower-left corner of dot

   TTPOLYCURVE #1

   wType  = TT_PRIM_LINE
   cpfx   = 3
   pfx[0] = 2.000, 23.000
   pfx[1] = 5.000, 23.000
   pfx[2] = 5.000, 20.000   // Automatically close to pfxStart

   TTPOLYGONHEADER #2   // Contour for body of "j"
   cb       = 164     // Total size is 164 bytes
   dwType   = 24      // TT_POLYGON_TYPE
   pfxStart = -1.469, -5.641

   TTPOLYCURVE #1     // Finish flat bottom end of "j"

   wType  = TT_PRIM_LINE
   cpfx   = 1
   pfx[0] = -0.828, -2.813

   TTPOLYCURVE #2    // Make hook in "j" with spline

                    // Point A in spline is end of TTPOLYCURVE #1
    wType  = TT_PRIM_QSPLINE
    cpfx   = 2               // two points in spline -> one curve
    pfx[0] = -0.047, -3.000  // This is point B in spline
    pfx[1] = 0.406, -3.000   // Last point is always point C

   TTPOLYCURVE #3    // Finish hook in "j"

                    // Point A in spline is end of TTPOLYCURVE #2
   wType  = TT_PRIM_QSPLINE
   cpfx   = 3               // Three points -> two splines
   pfx[0] = 1.219, -3.000   // Point B for first spline
                             // Point C is (pfx[0] + pfx[1]) / 2
   pfx[1] = 2.000, -1.906   // Point B for second spline
   pfx[2] = 2.000, 0.281    // Point C for second spline

   TTPOLYCURVE #4    // Majority of "j" outlined by this polyline

    wType  = TT_PRIM_LINE
    cpfx   = 3
    pfx[0] = 2.000, 17.000
    pfx[1] = 5.000, 17.000
    pfx[2] = 5.000, -0.250

   TTPOLYCURVE #5    // start of bottom of hook

    wType  = TT_PRIM_QSPLINE
    cpfx   = 2               // One spline in this polycurve
    pfx[0] = 5.000, -3.266   // Point B for spline
    pfx[1] = 4.188, -4.453   // Point C for spline

   TTPOLYCURVE #6    // Middle of bottom of hook

    wType  = TT_PRIM_QSPLINE
    cpfx   = 2               // One spline in this polycurve
    pfx[0] = 3.156, -6.000   // B for spline
    pfx[1] = 0.766, -6.000   // C for spline

   TTPOLYCURVE #7    // Finish bottom of hook and glyph

    wType  = TT_PRIM_QSPLINE
    cpfx   = 2               // One spline in this polycurve
    pfx[0] = -0.391, -6.000  // B for spline
    pfx[1] = -1.469, -5.641  // C for spline
				

속성

기술 자료: 87115 - 마지막 검토: 2006년 11월 21일 화요일 - 수정: 2.3
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Windows Software Development Kit 3.1
  • Microsoft Win32 Application Programming Interface
키워드:?
kbmt kbhowto KB87115 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com