Sdílet prostřednictvím


Grafiky 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 ukládání do vyrovnávací paměti.

Dvojité ukládání do vyrovnávací paměti používá vyrovnávací paměť k řešení problémů s blikáním spojených s několika operacemi malování. 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 operací malování se vyrovnávací paměť zkopíruje přímo na plochu výkresu, která je k ní přidružená. 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é ukládání do vyrovnávací paměti

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é ukládání do vyrovnávací paměti pro model Windows Forms a vytvořené ovládací prvky Systému Windows můžete povolit nastavením DoubleBuffered vlastnosti na true nebo pomocí SetStyle této metody. Další informace naleznete v tématu Postupy: Redukce grafické blikání s dvojitou vyrovnávací pamětí 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 BufferedGraphicsContext třída. Každá doména aplikace má vlastní výchozí BufferedGraphicsContext instanci, která spravuje všechny výchozí dvojité ukládání do 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í hodnota BufferedGraphicsContext pro aplikaci. Výchozí BufferedGraphicsContext instance jsou spravovány BufferedGraphicsManager třídou. Odkaz na výchozí BufferedGraphicsContext instanci můžete načíst voláním Current. Můžete také vytvořit vyhrazenou BufferedGraphicsContext instanci, která může zvýšit výkon pro graficky náročné aplikace. Informace o tom, jak vytvořit BufferedGraphicsContext instanci, naleznete v tématu Postupy: Ruční správa grafiky ve vyrovnávací paměti.

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

Instanci třídy můžete použít BufferedGraphicsContext k vytvoření grafických vyrovnávacích pamětí voláním BufferedGraphicsContext.Allocate, který vrátí instanci BufferedGraphics třídy. Objekt BufferedGraphics spravuje vyrovnávací paměť přidruženou k vykreslovací ploše, například formulář nebo ovládací prvek.

Po vytvoření instance BufferedGraphics třída spravuje vykreslování do vyrovnávací paměti grafiky v paměti. Grafiku můžete vykreslit do vyrovnávací paměti prostřednictvím Graphicspaměti , která zveřejňuje Graphics objekt, který přímo představuje vyrovnávací paměť. Na tento Graphics objekt můžete malovat stejně jako na Graphics objekt, který představuje kreslicí plochu. Po nakreslení všech obrázků do vyrovnávací paměti můžete obsah BufferedGraphics.Render vyrovnávací paměti zkopírovat na plochu výkresu na obrazovce.

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

Viz také