當我嘗試使用 DirectWrite 獲取字體系列中的字體計數時,我得到了錯誤的結果。例如,當我查看系統字體檔案夾時,Arial 字體系列有 9 種字體,但 GetFontCount 回傳 14。剩余的數字 5 是多少?怎么會這樣?這是一個錯誤還是有什么我不知道的或者檔案沒有提到的?這是一個最小的復制示例。
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <dwrite.h>
#pragma comment(lib, "dwrite")
IDWriteFactory* pDWriteFactory = NULL;
IDWriteFontCollection* pFontCollection = NULL;
IDWriteFontFamily* pFontFamily = NULL;
IDWriteFont* pFont = NULL;
IDWriteFontFace* pFontFace = NULL;
int main()
{
HRESULT hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, &IID_IDWriteFactory, &pDWriteFactory);
if (FAILED(hr))
return -1;
hr = pDWriteFactory->GetSystemFontCollection(&pFontCollection, FALSE);
if (FAILED(hr))
return -2;
UINT index = 0;
BOOL exists;
hr = pFontCollection->FindFamilyName(L"Arial", &index, &exists);
if (FAILED(hr))
return -3;
hr = pFontCollection->GetFontFamily(index, &pFontFamily);
if (FAILED(hr))
return -4;
UINT count;
count = pFontFamily->GetFontCount();
if (FAILED(hr))
return -5;
DWRITE_FONT_METRICS metrics;
for (int i = 0; i < count; i )
{
hr = pFontFamily->GetFont(i, &pFont);
pFont->GetMetrics(&metrics);
printf("%d %d %d %d\n", metrics.designUnitsPerEm, metrics.ascent, metrics.descent, metrics.lineGap);
}
return 0;
}
uj5u.com熱心網友回復:
DirectWrite模擬“傾斜”字體(不在物理檔案中)。
對于 Oblique,傾斜是通過對普通字體的字符進行剪切變換來實作的。當計算機或列印機上沒有真正的斜體字體時,可以從普通字體生成斜體樣式并用于模擬斜體字體。
所以你會得到'Oblique'、'Narrow Oblique'、'Bold Oblique'、'Narrow Bold Oblique'、'Black Oblique'共14種模擬字體。
如果斜體可用,則不應使用斜體。
您可以使用IDWriteFontFace::GetSimulations 方法檢查每個字體,這將使您回傳這些字體的DWRITE_FONT_SIMULATIONS_OBLIQUE。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/379842.html
下一篇:事件不會在第一次點擊父孩子時觸發
