Sdílet prostřednictvím


Postupy: Kopírování pixelů pro snížení blikání ve Windows Forms

Když animujete jednoduchou grafiku, můžou se uživatelé někdy setkat s blikajícími nebo jinými nežádoucími vizuálními efekty. Jedním ze způsobů, jak tento problém omezit, je použití procesu bitblt na obrázku. Bitblt je "přenos bit-block" barevných dat z původního obdélníku pixelů do cílového obdélníku pixelů.

Pomocí modelu Windows Forms se bitblt realizuje pomocí metody CopyFromScreen třídy Graphics. V parametrech metody zadáte zdroj a cíl (jako body), velikost oblasti, kterou chcete zkopírovat, a grafický objekt použitý k vykreslení nového obrazce.

V následujícím příkladu je obrazec nakreslen na formuláři v jeho Paint obslužné rutině události. Pak se metoda CopyFromScreen použije k duplikování obrazce.

Poznámka:

Nastavení vlastnosti DoubleBuffered formuláře na true zajistí, že grafický kód v události Paint bude mít dvojité vyrovnávání. I když použijete níže uvedený kód, nebude to mít žádné rozpoznatelné zvýšení výkonu, při práci s složitějším kódem pro manipulaci s grafikou je potřeba mít na paměti.

Příklad

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As _
    System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    ' Draw a circle with a bar on top.
        e.Graphics.FillEllipse(Brushes.DarkBlue, New Rectangle _
             (10, 10, 60, 60))
        e.Graphics.FillRectangle(Brushes.Khaki, New Rectangle _
             (20, 30, 60, 10))
    ' Copy the graphic to a new location.
        e.Graphics.CopyFromScreen(New Point(10, 10), New Point _
             (100, 100), New Size(70, 70))
End Sub
private void Form1_Paint(System.Object sender,
    System.Windows.Forms.PaintEventArgs e)
        {
        e.Graphics.FillEllipse(Brushes.DarkBlue, new
            Rectangle(10,10,60,60));
        e.Graphics.FillRectangle(Brushes.Khaki, new
            Rectangle(20,30,60,10));
        e.Graphics.CopyFromScreen(new Point(10, 10), new Point(100, 100),
            new Size(70, 70));
}

Kompilace kódu

Výše uvedený kód se spustí v obslužné rutině události formuláře Paint tak, aby se grafika zachovala při překreslení formuláře. Proto nevolejte metody související s grafikou v obslužné rutině události Load, protože nakreslený obsah nebude překreslen, pokud je formulář změněn nebo skryt jiným formulářem.

Viz také