1
獲取字體信息,我不知道是否有人知道如何以編程方式得到的東西,如版本和版權信息進行True Type字體的。如果你在資源管理器中打開它以及預覽,你可以在Windows字體瀏覽器中獲得這些信息。我看了LOGFONT結構,但信息似乎並不在這裏在.NET
乾杯 盧克
獲取字體信息,我不知道是否有人知道如何以編程方式得到的東西,如版本和版權信息進行True Type字體的。如果你在資源管理器中打開它以及預覽,你可以在Windows字體瀏覽器中獲得這些信息。我看了LOGFONT結構,但信息似乎並不在這裏在.NET
乾杯 盧克
我不得不這樣一對夫婦幾年前的工作項目做。我不能發佈這個,因爲它是專有的,但TT字體的規格是here。
我寫的類偏移表,名稱記錄,名稱表頭和表目錄元素,使得每一類有一個靜態方法FromStream。
我也寫了一個名爲BigEndianReader從有序流大端處理中讀取數據的工具類,我很高興地把這裏讓您的生活更輕鬆:
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;
}
}
這是不是特別優雅,但它是很容易使用:
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();
感謝底座它給了我一個起點 – beakersoft 2009-09-23 11:59:52