Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Lidé komunikují s textem po celou dobu v jejich každodenním životě. Je to primární způsob, jak lidé využívat rostoucí objem informací. V minulosti to bylo prostřednictvím tištěného obsahu, především dokumentů, novin, knih atd. Stále častěji se jedná o online obsah na počítači s Windows. Typický uživatel Windows tráví spoustu času čtením z obrazovky počítače. Můžou si prohlížet web, skenovat e-maily, vytvářet sestavu, vyplňovat tabulku nebo psát software, ale to, co opravdu děláte, je čtení. I když text a písma prostupují téměř každou část uživatelského prostředí ve Windows, pro většinu uživatelů není čtení na obrazovce tak příjemné jako čtení tištěného výstupu.
Pro vývojáře aplikací pro Windows je psaní kódu pro zpracování textu výzvou kvůli zvýšeným požadavkům na lepší čitelnost, sofistikovanému formátování a řízení rozložení a podpoře více jazyků, které aplikace musí zobrazit. I nejzásadnější systém zpracování textu musí umožňovat zadávání textu, rozložení, zobrazení, úpravy a kopírování a vkládání. Uživatelé Windows obvykle očekávají ještě více než tyto základní funkce, které vyžadují, aby dokonce jednoduché editory podporovaly více písem, různé styly odstavců, vložené obrázky, kontrolu pravopisu a další funkce. Moderní návrh uživatelského rozhraní se také neomezuje na jeden formát, prostý text, ale potřebuje prezentovat lepší prostředí s formátovanými písmy a rozloženími textu.
Toto je úvod k tomu, jak DirectWrite umožňuje aplikacím systému Windows vylepšit textové prostředí pro uživatelské rozhraní a dokumenty.
Vylepšení prostředí textu
Moderní aplikace pro Windows mají sofistikované požadavky na text v uživatelském rozhraní a dokumentech. Patří mezi ně lepší čitelnost, podpora pro širokou škálu jazyků a skriptů a vynikající výkon vykreslování. Kromě toho většina stávajících aplikací vyžaduje způsob, jak přenést stávající investice do základu kódu WindowsWin32.
DirectWrite poskytuje následující tři funkce, které vývojářům aplikací pro Windows umožňují zlepšit prostředí textu v rámci svých aplikací: nezávislost na vykreslovacím systému, vysoce kvalitní typografii a více vrstev funkčnosti.
Rendering-System nezávislost
directWrite je nezávislý na jakékoli konkrétní grafické technologii. Aplikace jsou bezplatné k používání technologie vykreslování, která je nejvhodnější pro jejich potřeby. To umožňuje aplikacím pokračovat v vykreslování některých částí aplikace prostřednictvím rozhraní GDI a dalších částí prostřednictvím Direct3D nebo Direct2D. Ve skutečnosti by se aplikace mohla rozhodnout vykreslit DirectWrite prostřednictvím proprietárního zásobníku vykreslování.
typografie High-Quality
DirectWrite využívá pokroky technologie OpenType, aby umožnil vysoce kvalitní typografii v aplikaci pro Windows. Systém písem DirectWrite poskytuje služby pro práci s výčtem písem, záložním písmem a ukládáním písma do mezipaměti, které jsou všechny potřebné aplikacemi pro zpracování písem.
Podpora OpenType poskytovaná DirectWrite umožňuje vývojářům přidávat do svých aplikací pokročilé typografické funkce a podporu pro mezinárodní text.
Podpora pokročilých typografických funkcí
DirectWrite umožňuje vývojářům aplikací odemknout funkce písem OpenType, které nemohly používat ve WinForms nebo GDI. DirectWrite IDWriteTypography objekt zveřejňuje mnoho pokročilých funkcí písem OpenType, jako jsou stylistické alternativy a swashes. Sada Microsoft Windows Software Development Kit (SDK) poskytuje sadu ukázkových písem OpenType, která jsou navržena s bohatými funkcemi, jako jsou písma Pericles a Pescadero. Další podrobnosti o funkcích OpenType najdete v tématu Funkce písma OpenType.
Podpora pro mezinárodní textové formáty
DirectWrite používá písma OpenType k povolení široké podpory mezinárodního textu. Podporují se funkce Unicode, jako jsou náhradní symboly, BIDI, zalomení řádků a UVS. Přizpůsobení položek skriptu s asistencí jazyka, nahrazení čísel a tvarování glyfů zajistí, že text v jakémkoli skriptu má správné rozložení a vykreslování.
V současné době se podporují následující skripty:
Poznámka
Pro skripty označené znakem *neexistují žádná výchozí systémová písma. Aplikace musí instalovat písma, která podporují tyto skripty.
- Arabština
- Arménština
- Bengala
- Bopomofo
- Slepecké písmo*
- Kanadská aboriginální slabika
- Cherokee
- Čínština (zjednodušená &, tradiční)
- Cyrilice
- Koptský*
- Devanagari
- Etiopské písmo
- Gruzínština
- Hlaholice*
- Řečtina
- Gudžarátština
- Gurmukhi
- Hebrejština
- Japonština
- Kannadština
- Khmerština
- Korejština
- Laoština
- Latina
- Malajalámština
- Mongolština
- Myanmar
- Nový Tai Lue
- Ogham*
- Odia
- Phags-pa
- Runový*
- Sinhala
- Syrština
- Tai Le
- Tamilština
- Telugština
- Thaana
- Thajština
- Tibetský
- Yi
Více vrstev funkčnosti
DirectWrite poskytuje faktorované vrstvy funkcí, přičemž každá vrstva bez problémů komunikuje s další. Návrh rozhraní API poskytuje vývojářům aplikací svobodu a flexibilitu při přijímání jednotlivých vrstev v závislosti na jejich potřebách a plánu. Následující diagram znázorňuje vztah mezi těmito vrstvami.
Rozhraní API pro rozložení textu poskytuje funkce nejvyšší úrovně, které jsou k dispozici v DirectWrite. Poskytuje služby, které aplikaci umožňují měřit, zobrazovat a pracovat s bohatě formátovanými textovými řetězci. Toto textové rozhraní API lze použít v aplikacích, které v současné době používají DrawText Win32 k vytvoření moderního uživatelského rozhraní s bohatě formátovaným textem.
Aplikace náročné na text, které implementují vlastní modul rozložení, můžou používat další vrstvu dolů: procesor skriptů. Procesor skriptů rozdělí blok textu do bloků skriptu a zpracuje mapování mezi reprezentací Unicode na odpovídající reprezentaci glyfů v písmu, aby se text skriptu mohl správně zobrazit ve správném jazyce. Systém rozložení používaný vrstvou rozhraní API pro rozložení textu je založený na systému zpracování písem a skriptů.
Vrstva vykreslování glyph je nejnižší vrstvou funkčnosti a poskytuje funkce vykreslování glyfů pro aplikace, které implementují vlastní modul rozložení textu. Vrstva vykreslování glyph je užitečná také pro aplikace, které implementují vlastní renderer pro úpravu chování vykreslování glyfů prostřednictvím funkce zpětného volání v DirectWrite rozhraní API pro formátování textu.
Systém písem DirectWrite je k dispozici pro všechny funkční vrstvy DirectWrite a umožňuje aplikaci přístup k informacím o písmu a glyfech. Je navržený tak, aby zpracovával běžné technologie písem a formáty dat. Model písma DirectWrite se řídí běžným typografickým postupem podpory libovolného počtu váh, stylů a roztažení ve stejné rodině písem. Tento model, stejný model používaný WPF a CSS, určuje, že písma se liší pouze v tloušťce (tučné, světlé atd.), stylu (vzpřímené, kurzíva nebo šikmé) nebo rozšíření (úzké, zhuštěné, široké atd.) jsou považována za členy jedné písmové rodiny.
Vylepšené vykreslování textu pomocí ClearType
Zlepšení čitelnosti na obrazovce je klíčovým požadavkem pro všechny aplikace systému Windows. Důkazy z výzkumu v kognitivní psychology naznačují, že musíme být schopni rozpoznat každé písmeno přesně a že dokonce mezery mezi písmeny jsou důležité pro rychlé zpracování. Písmena a slova, která nejsou symetrická, jsou vnímána jako ošklivá a degradují prostředí čtení. Kevin Larson, skupina Microsoft Advanced Reading Technologies, napsal článek o tématu publikovaném ve Spectrum IEEE. Článek se nazývá "Technologie textu".
Text v DirectWrite se vykreslí pomocí formátu Microsoft ClearType, což zlepšuje srozumitelnost a čitelnost textu. ClearType využívá skutečnost, že moderní LCD displeje mají pruhy RGB pro každý pixel, který lze ovládat jednotlivě. DirectWrite používá nejnovější vylepšení ClearType, která byla poprvé součástí systému Windows Vista se službou Windows Presentation Foundation, která umožňuje vyhodnotit nejen jednotlivá písmena, ale také mezery mezi písmeny. Před těmito vylepšeními ClearType bylo obtížné zobrazit text s velikostí "čtení" o velikosti 10 nebo 12 bodů: mohli bychom umístit 1 pixel mezi písmena, což bylo často příliš málo, nebo 2 pixely, což bylo často příliš mnoho. Použití dodatečného rozlišení v subpixelech nám poskytuje desetinné mezery, což zlepšuje rovnoměrnost a symetrii celé stránky.
Následující dvě ilustrace znázorňují, jak mohou glyfy začínat na libovolné hranici sub-pixelu při použití sub-pixelového umístění.
Následující obrázek se vykresluje pomocí verze GDI rendereru ClearType, která nevyužila umístění dílčích pixelů.
Následující obrázek je vykreslen pomocí DirectWrite verze rendereru ClearType, která používá umístění pod pixely.
Všimněte si, že mezery mezi písmeny h a n jsou rovnoměrnější na druhém obrázku a písmeno o je umístěno dále od písmene n, což je více vyrovnané s písmenem l. Všimněte si také, že kmeny na písmenech l jsou přirozenější.
Umístění subpixel ClearType nabízí nejpřesnější mezery znaků na obrazovce, zejména v malých velikostech, kde rozdíl mezi dílčím pixelem a celým pixelem představuje významný podíl šířky glyfů. Umožňuje měřit text v ideálním prostoru pro rozlišení a vykreslovat ho v přirozené poloze v pruhu barev LCD s podpixelovou členitostí. Text měřený a vykreslený pomocí této technologie je podle definice nezávislý na rozlišení, což znamená, že přesné rozložení textu se dosahuje v rozsahu různých rozlišení zobrazení.
Na rozdíl od jakéhokoliv typu vykreslování GDI ClearType nabízí sub-pixel ClearType nejpřesnější šířku znaků.
Rozhraní API textového řetězce ve výchozím nastavení používá textové vykreslování v podpixelech, což znamená, že měří text v jeho ideálním rozlišení nezávisle na aktuálním rozlišení obrazovky a výsledek umístění glyfů vytváří na základě skutečně škálovaných šířek glyfů a posunů umístění.
U velkého textu DirectWrite umožňuje také anti-aliasing podél osy y, aby byly hrany plynulejší a písmena byla vykreslena podle záměru návrháře písma. Následující obrázek znázorňuje anti-aliasing ve směru y.
Ačkoli je text DirectWrite ve výchozím nastavení umístěn a vykreslen pomocí ClearType subpixelů, jsou k dispozici i jiné možnosti vykreslování. Mnoho stávajících aplikací používá GDI k vykreslení většiny svého uživatelského rozhraní a některé aplikace používají ovládací prvky pro úpravy systému, které pro vykreslování textu nadále používají GDI. Při přidávání textu DirectWrite do těchto aplikací může být nutné obětovat vylepšení zážitku ze čtení, které poskytuje technologie sub-pixel ClearType, aby text měl konzistentní vzhled v celé aplikaci.
Pro splnění těchto požadavků DirectWrite podporuje také následující možnosti vykreslování:
- Sub-pixelový ClearType (výchozí).
- Subpixelové ClearType s vyhlazováním v horizontálních i vertikálních dimenzích.
- Aliasovaný text
- Přirozená šířka GDI (používá se například v zobrazení pro čtení v Microsoft Wordu).
- Šířka kompatibilní s GDI (včetně vložené rastrové grafiky pro východoasijské jazyky).
Každý z těchto režimů vykreslování je možné doladit prostřednictvím rozhraní DirectWrite API a nového vestavěného nástroje pro ladění ClearType v systému Windows 7.
Poznámka
Od Windows 8 byste měli ve většině případů používat antialiasing textu ve stupních šedé. Další informace najdete v další části.
Podpora přirozeného rozložení
Přirozené rozložení je nezávislé na rozlišení, takže se při přiblížení nebo oddálení nezmění mezery znaků nebo v závislosti na DPI displeje. Sekundární výhodou je, že mezery odpovídají návrhu písma. Přirozené rozložení je možné pomocí podpory DirectWrite pro přirozené vykreslování, což znamená, že jednotlivé glyfy lze umístit na zlomek pixelu.
I když je přirozené rozložení výchozí, některé aplikace musí vykreslovat text se stejnými mezerami a vzhledem jako GDI. Pro takové aplikace DirectWrite poskytuje klasické režimy měření GDI a GDI natural a odpovídající režimy vykreslování.
Kterýkoli z výše uvedených režimů vykreslování lze kombinovat s některým ze dvou režimů vyhlazování: ClearType nebo odstíny šedé. ClearType antialiasing simuluje vyšší rozlišení tím, že samostatně manipuluje s červenými, zelenými a modrými barevnými hodnotami jednotlivých pixelů. Antialiasing stupňů šedi počítá pro každý pixel pouze jednu hodnotu pokrytí (nebo alfa). ClearType je výchozí hodnota, ale pro aplikace pro Windows Store se doporučuje antialiasing ve stupních šedé, protože je rychlejší a je kompatibilní se standardním antialiasingem, ale stále je vysoce čitelný.
Přehled rozhraní API
Rozhraní IDWriteFactory je výchozím bodem pro použití funkce DirectWrite. Továrna je kořenový objekt, který vytvoří sadu objektů, které lze použít společně.
Operace formátování a rozložení jsou předpokladem pro operace, protože text musí být správně naformátován a rozložen na zadanou sadu omezení, než bude možné ji nakreslit nebo otestovat. Dva klíčové objekty, které můžete vytvořit pomocí IDWriteFactory pro tento účel jsou IDWriteTextFormat a IDWriteTextLayout. Objekt IDWriteTextFormat představuje informace o formátování odstavce textu. Funkce IDWriteFactory::CreateTextLayout přebírá vstupní řetězec, přidružená omezení, jako je dimenze mezery, která má být vyplněna, a IDWriteTextFormat objektu a vloží plně analyzovaný a formátovaný výsledek do IDWriteTextLayout použít v následujících operacích.
Aplikace pak může vykreslit text pomocí funkce DrawTextLayout poskytované Direct2D nebo implementací funkce zpětného volání, která může k vykreslení glyfů použít GDI, Direct2D nebo jiné grafické systémy. U jednoho formátu textu poskytuje funkce DrawText na Direct2D jednodušší způsob, jak vykreslit text bez nutnosti vytvoření objektu IDWriteTextLayout.
Formátování a kreslení "Hello World" pomocí directWrite
Následující příklad kódu ukazuje, jak aplikace může formátovat jeden odstavec pomocí IDWriteTextFormat a kreslit ho pomocí funkce Direct2DDrawText.
HRESULT DemoApp::DrawHelloWorld(
ID2D1HwndRenderTarget* pIRenderTarget
)
{
HRESULT hr = S_OK;
ID2D1SolidColorBrush* pIRedBrush = NULL;
IDWriteTextFormat* pITextFormat = NULL;
IDWriteFactory* pIDWriteFactory = NULL;
if (SUCCEEDED(hr))
{
hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED,
__uuidof(IDWriteFactory),
reinterpret_cast<IUnknown**>(&pIDWriteFactory));
}
if(SUCCEEDED(hr))
{
hr = pIDWriteFactory->CreateTextFormat(
L"Arial",
NULL,
DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL,
10.0f * 96.0f/72.0f,
L"en-US",
&pITextFormat
);
}
if(SUCCEEDED(hr))
{
hr = pIRenderTarget->CreateSolidColorBrush(
D2D1:: ColorF(D2D1::ColorF::Red),
&pIRedBrush
);
}
D2D1_RECT_F layoutRect = D2D1::RectF(0.f, 0.f, 100.f, 100.f);
// Actually draw the text at the origin.
if(SUCCEEDED(hr))
{
pIRenderTarget->DrawText(
L"Hello World",
wcslen(L"Hello World"),
pITextFormat,
layoutRect,
pIRedBrush
);
}
// Clean up.
SafeRelease(&pIRedBrush);
SafeRelease(&pITextFormat);
SafeRelease(&pIDWriteFactory);
return hr;
}
Přístup k systému písem
Kromě zadání názvu rodiny písem pro textový řetězec pomocí rozhraní IDWriteTextFormat v předchozím příkladu poskytuje DirectWrite aplikacím větší kontrolu nad výběrem písma prostřednictvím výčtu písem a možností vytvářet vlastní kolekce písem na základě vložených písem dokumentů.
Objekt IDWriteFontCollection je kolekce rodin písem. DirectWrite poskytuje přístup k sadě písem nainstalovaných v systému prostřednictvím speciální kolekce písem označované jako systémová kolekce písem. To je získáno voláním metody GetSystemFontCollection objektu IDWriteFactory. Aplikace může také vytvořit vlastní kolekci písem ze sady písem vyjmenovaných zpětným voláním definovaným aplikací, tedy soukromými písmy nainstalovanými aplikací nebo písmy vloženými do dokumentu.
Aplikace pak může volat GetFontFamily, aby získala konkrétní objekt FontFamily v kolekci, a potom volat IDWriteFontFamily::GetFirstMatchingFont ke získání konkrétního objektu IDWriteFont. Objekt IDWriteFont představuje písmo v kolekci písem a zveřejňuje vlastnosti a několik základních metrik písma.
IDWriteFontFace je dalším objektem, který představuje písmo a zveřejňuje úplnou sadu metrik písma. IDWriteFontFace lze vytvořit přímo z názvu písma; aplikace nemusí získat kolekci písem, aby k ní měla přístup. Je užitečné pro aplikaci rozložení textu, jako je Například Microsoft Word, která potřebuje dotazovat podrobnosti pro konkrétní písmo.
Následující diagram znázorňuje vztah mezi těmito objekty.
IDWriteFontFace
Objekt IDWriteFontFace představuje písmo a poskytuje podrobnější informace o písmu než IDWriteFont objektu. Metriky písma a glyfů z IDWriteFontFace jsou užitečné pro aplikace, které implementují rozložení textu.
Většina běžných aplikací nebude tato rozhraní API používat přímo a místo toho bude používat IDWriteFont nebo přímo zadat název rodiny písem.
Následující tabulka shrnuje scénáře použití těchto dvou objektů.
| Kategorie | IDWriteFont | IDWriteFontFace |
|---|---|---|
| Rozhraní API pro podporu interakce uživatelů, jako je uživatelské rozhraní pro výběr písma: popis a další informační rozhraní API | Ano | Ne |
| Rozhraní API pro podporu mapování písem: fontová rodina, styl, síla, roztažení, pokrytí znaků | Ano | Ne |
| DrawText API | Ano | Ne |
| Rozhraní API používaná k vykreslování | Ne | Ano |
| Rozhraní API používané pro rozložení textu, metriky glyfů atd. | Ne | Ano |
| Rozhraní API pro ovládání UI a rozložení textu: fontové metriky | Ano | Ano |
Následuje příklad aplikace, která vyčísluje písma v systémové kolekci písem.
#include <dwrite.h>
#include <string.h>
#include <stdio.h>
#include <new>
// SafeRelease inline function.
template <class T> inline void SafeRelease(T **ppT)
{
if (*ppT)
{
(*ppT)->Release();
*ppT = NULL;
}
}
void wmain()
{
IDWriteFactory* pDWriteFactory = NULL;
HRESULT hr = DWriteCreateFactory(
DWRITE_FACTORY_TYPE_SHARED,
__uuidof(IDWriteFactory),
reinterpret_cast<IUnknown**>(&pDWriteFactory)
);
IDWriteFontCollection* pFontCollection = NULL;
// Get the system font collection.
if (SUCCEEDED(hr))
{
hr = pDWriteFactory->GetSystemFontCollection(&pFontCollection);
}
UINT32 familyCount = 0;
// Get the number of font families in the collection.
if (SUCCEEDED(hr))
{
familyCount = pFontCollection->GetFontFamilyCount();
}
for (UINT32 i = 0; i < familyCount; ++i)
{
IDWriteFontFamily* pFontFamily = NULL;
// Get the font family.
if (SUCCEEDED(hr))
{
hr = pFontCollection->GetFontFamily(i, &pFontFamily);
}
IDWriteLocalizedStrings* pFamilyNames = NULL;
// Get a list of localized strings for the family name.
if (SUCCEEDED(hr))
{
hr = pFontFamily->GetFamilyNames(&pFamilyNames);
}
UINT32 index = 0;
BOOL exists = false;
wchar_t localeName[LOCALE_NAME_MAX_LENGTH];
if (SUCCEEDED(hr))
{
// Get the default locale for this user.
int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH);
// If the default locale is returned, find that locale name, otherwise use "en-us".
if (defaultLocaleSuccess)
{
hr = pFamilyNames->FindLocaleName(localeName, &index, &exists);
}
if (SUCCEEDED(hr) && !exists) // if the above find did not find a match, retry with US English
{
hr = pFamilyNames->FindLocaleName(L"en-us", &index, &exists);
}
}
// If the specified locale doesn't exist, select the first on the list.
if (!exists)
index = 0;
UINT32 length = 0;
// Get the string length.
if (SUCCEEDED(hr))
{
hr = pFamilyNames->GetStringLength(index, &length);
}
// Allocate a string big enough to hold the name.
wchar_t* name = new (std::nothrow) wchar_t[length+1];
if (name == NULL)
{
hr = E_OUTOFMEMORY;
}
// Get the family name.
if (SUCCEEDED(hr))
{
hr = pFamilyNames->GetString(index, name, length+1);
}
if (SUCCEEDED(hr))
{
// Print out the family name.
wprintf(L"%s\n", name);
}
SafeRelease(&pFontFamily);
SafeRelease(&pFamilyNames);
delete [] name;
}
SafeRelease(&pFontCollection);
SafeRelease(&pDWriteFactory);
}
Vykreslování textu
Rozhraní API pro vykreslování textu umožňují vykreslení glyfů v písmu DirectWrite na plochu Direct2D povrchu nebo na rastrové obrázky nezávislé na zařízení GDI, případně je převést na obrysy nebo rastrové obrázky. Vykreslování ClearType v DirectWrite podporuje umístění dílčích pixelů s vylepšenou ostrostí a kontrastem v porovnání s předchozími implementacemi ve Windows. DirectWrite také podporuje černobílý text s aliasováním, aby pokryl scénáře zahrnující východoasijská písma s vloženými rastrovými obrázky, nebo situace, kdy uživatel zakázal vyhlazování písma jakéhokoliv typu.
Všechny možnosti jsou nastavitelné všemi dostupnými ovladači ClearType přístupné prostřednictvím rozhraní API DirectWrite a také zpřístupněny prostřednictvím nástroje pro ladění ClearType ve Windows 7.
K dispozici jsou dvě rozhraní API pro vykreslování glyfů, jedno poskytuje hardwarově akcelerované vykreslování prostřednictvím Direct2D a druhá poskytuje softwarové vykreslování na rastrový obrázek GDI. Aplikace používající IDWriteTextLayout a implementující IDWriteTextRenderer může zavolat některou z těchto funkcí jako reakci na DrawGlyphRun. Aplikace, které implementují vlastní rozložení nebo pracují s daty na úrovni glyfů, můžou tato rozhraní API používat.
ID2DRenderTarget::DrawGlyphRun
Aplikace můžou použít rozhraní API Direct2DDrawGlyphRun k zajištění hardwarové akcelerace pro vykreslování textu pomocí GPU. Hardwarová akcelerace ovlivňuje všechny fáze potrubí vykreslování textu – od sloučení glyfů do bloků glyfů a filtrování rastrového obrázku bloku glyfů po použití algoritmu prolnutí ClearType na konečný zobrazený výstup. Toto je doporučené rozhraní API pro získání nejlepšího výkonu vykreslování.
IDWriteBitmapRenderTarget::DrawGlyphRun
Aplikace mohou použít IDWriteBitmapRenderTarget::DrawGlyphRun metodu k provedení softwarového vykreslení běhu glyfů na 32-bpp bitmapu. IDWriteBitmapRenderTarget objekt zapouzdřuje rastrový obrázek a kontext paměťového zařízení, který lze použít k vykreslování glyfů. Toto rozhraní API je užitečné, pokud chcete zůstat u GDI, protože máte existující základ kódu, který se vykresluje v GDI.
Pokud máte aplikaci s existujícím kódem rozložení textu, který používá rozhraní GDI, a chcete zachovat stávající kód rozložení, ale použít DirectWrite pouze pro poslední krok vykreslování glyfů, IDWriteGdiInterop::CreateFontFaceFromHdc poskytuje most mezi těmito dvěma rozhraními API. Před voláním této funkce aplikace použije funkci IDWriteGdiInterop::CreateFontFaceFromHdc k získání reference na font z kontextu zařízení.
Poznámka
U většiny scénářů nemusí aplikace používat tato rozhraní API pro vykreslování glyfů. Jakmile aplikace vytvoří objekt IDWriteTextLayout, může k vykreslení textu použít metodu ID2D1RenderTarget::DrawTextLayout.
Vlastní režimy vykreslování
Počet parametrů ovlivňuje vykreslování textu, například gama, úroveň ClearType, geometrii pixelů a vylepšený kontrast. Vykreslovací parametry jsou zapouzdřeny objektem, který implementuje veřejné IDWriteRenderingParams rozhraní. Objekt parametrů vykreslování se automaticky inicializuje na základě vlastností hardwaru a/nebo uživatelských předvoleb zadaných prostřednictvím apletu ovládacího panelu ClearType v systému Windows 7. Obecně platí, že pokud klient používá rozhraní API DirectWrite rozložení, DirectWrite automaticky vybere režim vykreslování, který odpovídá zadanému režimu měření.
Aplikace, které chtějí mít větší kontrolu, můžou k implementaci různých možností vykreslování použít IDWriteFactory::CreateCustomRenderingParams. Tuto funkci lze použít také k nastavení gama, geometrie pixelů a rozšířeného kontrastu.
K dispozici jsou různé možnosti vykreslování:
Anti-aliasing dílčích pixelů
Aplikace nastaví parametr renderingMode na DWRITE_RENDERING_MODE_NATURAL, aby určila vykreslování s anti-aliasingem pouze ve vodorovném rozměru.
Subpixelové vyhlazování ve vodorovné i svislé ose.
Aplikace nastaví parametr renderingMode na DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC, který určuje vykreslování s anti-aliasingem ve vodorovných i svislých dimenzích. Díky tomu křivky a diagonální čáry vypadají plynuleji na úkor určité měkkosti a obvykle se používají ve velikostech nad 16 ppem.
Aliasovaný text
Aplikace nastaví parametr renderingMode na DWRITE_RENDERING_MODE_ALIASED k určení aliasovaného textu.
Text ve stupních šedé
Aplikace nastaví parametr pixelGeometry na DWRITE_PIXEL_GEOMETRY_FLAT, aby určila text ve stupních šedi.
Šířka kompatibilní s GDI (včetně vloženého rastrového obrázku východoasijských jazyků)
Aplikace nastaví parametr renderingMode na DWRITE_RENDERING_MODE_GDI_CLASSIC, aby určila anti-aliasing kompatibilní s GDI.
Přirozená šířka GDI
Aplikace nastaví parametr renderingMode na DWRITE_RENDERING_MODE_GDI_NATURAL k určení anti-aliasingu kompatibilního s přirozenou šířkou GDI.
Text osnovy
Při vykreslování ve velkém měřítku může vývojář aplikace raději vykreslit pomocí obrysu písma, nikoli rastrováním do bitmapy. Aplikace nastaví parametr renderingMode na DWRITE_RENDERING_MODE_OUTLINE, aby vykreslování mohlo obejít rastrovač a použít obrysy přímo.
Interoperabilita GDI
Rozhraní IDWriteGdiInterop poskytuje interoperabilitu s GDI. To umožňuje aplikacím pokračovat v jejich stávajících investicích do základů kódu GDI a selektivně používat DirectWrite pro vykreslování nebo rozložení.
Následuje rozhraní API, která aplikaci umožňují migrovat do systému písem GDI nebo z tohoto systému:
-
Vytvoří objekt IDWriteFont, který odpovídá vlastnostem určeným strukturou LOGFONT.
-
Inicializuje strukturu LOGFONT na základě vlastností kompatibilních s GDI zadaných IDWriteFont.
-
Inicializuje LOGFONT struktury na základě vlastností kompatibilních s GDI zadaných IDWriteFontFace.
-
Vytvoří objekt IDWriteFontFace, který odpovídá aktuálně vybrané HFONT.
Závěr
Zlepšení prostředí pro čtení je pro uživatele velmi přínosné bez ohledu na to, jestli je na obrazovce nebo na papíře. DirectWrite poskytuje snadné použití a vrstvený programovací model pro vývojáře aplikací ke zlepšení textového prostředí pro své aplikace pro Windows. Aplikace můžou pomocí DirectWrite vykreslit formátovaný text pro své uživatelské rozhraní a dokumenty pomocí rozhraní API rozložení. V případě složitějších scénářů může aplikace pracovat přímo s glyfy, přístupovými písmy a tak dále a využívat výkon Technologie DirectWrite k poskytování vysoce kvalitní typografie.
Možnosti interoperability DirectWrite umožňují vývojářům aplikací přenášet stávající základ kódu Win32 a používat DirectWrite selektivně v rámci svých aplikací.