2009-09-22 10 views
1

누군가가 프로그래밍 방식으로 사실 유형 글꼴에서 버전 및 저작권 세부 정보를 얻는 방법을 알고 있는지 궁금합니다. 탐색기와 미리보기에서 열면이 정보가 Windows 글꼴 뷰어에 표시됩니다. 누가 복음.net에서 글꼴 정보 가져 오기

답변

2

내가 작업 프로젝트를 위해이 몇 년 전에해야 할 일을했을 나는 LOGFONT 구조 검토 한하지만 정보를 원하시면 여기

환호에 될 것 같지 않습니다. 독점적이므로 게시 할 수는 없지만 TT 글꼴 사양은 here입니다.

오프셋 테이블, 이름 레코드, 이름 테이블 헤더 및 테이블 디렉토리 요소에 대해 클래스를 작성하여 각 클래스에 정적 FromStream 메서드가 있도록했습니다.

public class BigEndianReader 
{ 
    public static bool Read(Stream stm, out uint i) 
    { 
     int bhihi = stm.ReadByte(); 
     if (bhihi == -1) 
     { 
      i = 0; 
      return false; 
     } 
     int bhi = stm.ReadByte(); 
     if (bhi == -1) 
     { 
      i = 0; 
      return false; 
     } 
     int blo = stm.ReadByte(); 
     if (blo == -1) 
     { 
      i = 0; 
      return false; 
     } 
     int blolo = stm.ReadByte(); 
     if (blolo == -1) 
     { 
      i = 0; 
      return false; 
     } 
     i = (uint)((bhihi << 24) | (bhi << 16) | (blo << 8) | blolo); 
     return true; 
    } 

    public static bool Read(Stream stm, out int i) 
    { 
     int bhihi = stm.ReadByte(); 
     if (bhihi == -1) 
     { 
      i = 0; 
      return false; 
     } 
     int bhi = stm.ReadByte(); 
     if (bhi == -1) 
     { 
      i = 0; 
      return false; 
     } 
     int blo = stm.ReadByte(); 
     if (blo == -1) 
     { 
      i = 0; 
      return false; 
     } 
     int blolo = stm.ReadByte(); 
     if (blolo == -1) 
     { 
      i = 0; 
      return false; 
     } 
     i = ((bhihi << 24) | (bhi << 16) | (blo << 8) | blolo); 
     return true; 
    } 


    public static bool Read(Stream stm, out ushort s) 
    { 
     int bhi = stm.ReadByte(); 
     if (bhi == -1) 
     { 
      s = 0; 
      return false; 
     } 
     int blo = stm.ReadByte(); 
     if (blo == -1) 
     { 
      s = 0; 
      return false; 
     } 
     s = (ushort)(((bhi << 8) | blo) & 0xffff); 
     return true; 
    } 

    public static bool Read(Stream stm, out short s) 
    { 
     int bhi = stm.ReadByte(); 
     if (bhi == -1) 
     { 
      s = 0; 
      return false; 
     } 
     int blo = stm.ReadByte(); 
     if (blo == -1) 
     { 
      s = 0; 
      return false; 
     } 
     s = (short)(((bhi << 8) | blo) & 0xffff); 
     return true; 
    } 
} 

이 특히 우아한되지 않습니다 :

나는 또한 내가 당신의 인생을 더 쉽게 만들어 여기에 넣어 행복 해요 스트림 주문 큰 엔디안에서 읽기 데이터를 처리 할 수 ​​BigEndianReader라는 유틸리티 클래스를 썼다 하지만 사용하기 쉬운 충분 :

int val; 

if (!BigEndianReader.Read(stm, out val)) 
    throw new SomeErrorOfSomeKind(); 

난 당신이 충분히 걱정 경우 스트림에이 모든 확장 메서드를 만들 수 있다고 가정 한 다음 읽을 것입니다 수 :

int val; 

if(!stm.BERead(out val)) // BE prefix for Big Endian 
    throw new SomeErrorOfSomeKind(); 
+0

감사합니다 대저택은 나에게 출발점을 제공합니다. – beakersoft