Sdílet prostřednictvím


Grafika s dvojitou vyrovnávací pamětí

Blikání je běžný problém při programování grafiky. Grafické operace, které vyžadují několik složitých operací malování, můžou způsobit, že se vykreslené obrázky budou zobrazovat blikající nebo mají jinak nepřijatelný vzhled. Pro řešení těchto problémů poskytuje rozhraní .NET Framework přístup k dvojitému vyrovnávání.

Dvojité bufferování používá vyrovnávací paměť k řešení problémů s blikáním spojených s několika operacemi kreslení. Pokud je povoleno dvojité ukládání do vyrovnávací paměti, všechny operace malování se nejprve vykreslují do vyrovnávací paměti místo plochy kreslení na obrazovce. Po dokončení všech malovacích operací je paměťový buffer přímo zkopírován na výkresovou plochu, která k němu náleží. Vzhledem k tomu, že na obrazovce se provádí pouze jedna grafická operace, eliminuje se blikající obrázek přidružený ke složitým operacím malování.

Výchozí dvojité vyrovnávání

Nejjednodušší způsob, jak ve svých aplikacích použít dvojité ukládání do vyrovnávací paměti, je použít výchozí dvojité ukládání do vyrovnávací paměti pro formuláře a ovládací prvky poskytované rozhraním .NET Framework. Výchozí dvojité bufferování pro Windows Forms a autorské ovládací prvky Windows můžete povolit nastavením vlastnosti DoubleBuffered na true nebo použitím metody SetStyle. Další informace naleznete v tématu Jak snížit blikání grafiky použitím dvojitého ukládání do vyrovnávací paměti pro formuláře a ovládací prvky.

Ruční správa grafiky ve vyrovnávací paměti

Pro pokročilejší scénáře dvojité vyrovnávací paměti, jako je animace nebo pokročilá správa paměti, můžete použít třídy rozhraní .NET Framework k implementaci vlastní logiky dvojité vyrovnávací paměti. Třída zodpovědná za přidělování a správu jednotlivých grafických vyrovnávacích pamětí je třída BufferedGraphicsContext. Každá doména aplikace má vlastní výchozí BufferedGraphicsContext instanci, která spravuje všechny výchozí dvojité vyrovnávací paměti pro danou aplikaci. Ve většině případů bude na aplikaci jenom jedna doména aplikace, takže obecně platí jedna výchozí BufferedGraphicsContext pro každou aplikaci. Výchozí BufferedGraphicsContext instance spravuje třída BufferedGraphicsManager. Odkaz na výchozí instanci BufferedGraphicsContext můžete načíst voláním Current. Můžete také vytvořit vyhrazenou instanci BufferedGraphicsContext, která může zlepšit výkon pro graficky náročné aplikace. Informace o vytvoření instance BufferedGraphicsContext najdete v oddílu Jak ručně spravovat grafiku ve vyrovnávací paměti.

Ruční zobrazení grafiky uložené ve vyrovnávací paměti

Instanci třídy BufferedGraphicsContext můžete použít k vytvoření grafických vyrovnávacích pamětí voláním BufferedGraphicsContext.Allocate, která vrátí instanci třídy BufferedGraphics. Objekt BufferedGraphics spravuje vyrovnávací paměť spojenou s vykreslovacím povrchem, jako je formulář nebo ovládací prvek.

Po instancování třída BufferedGraphics provádí vykreslování do grafické vyrovnávací paměti v paměti. Grafiku můžete vykreslit do paměťového bufferu prostřednictvím Graphics, který vystavuje objekt Graphics, představující přímo paměťový buffer. Na tento Graphics objekt můžete malovat stejně jako na objekt Graphics, který představuje kreslicí plochu. Po nakreslení všech obrázků do vyrovnávací paměti můžete pomocí BufferedGraphics.Render zkopírovat obsah vyrovnávací paměti na plochu výkresu na obrazovce.

Další informace o použití třídy BufferedGraphics naleznete v tématu Ruční vykreslování grafiky vyrovnávací paměti. Další informace o vykreslování grafiky najdete v tématu Grafika a kreslení v modelu Windows Forms

Viz také