Sdílet prostřednictvím


Postupy: Kopírování pixelů pro omezení blikání v rozhraní 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ů.

S model Windows Forms se bitblt provádí pomocí CopyFromScreen metody Graphics třídy. 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ář ve své Paint obslužné rutině události. Pak se CopyFromScreen metoda použije k duplikování obrazce.

Poznámka:

Nastavení vlastnosti formuláře DoubleBuffered tak, aby true kód založený na grafiku Paint v události byl dvojitě vyrovnávací paměti. 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));  
}  

Probíhá kompilace kódu

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

Viz také