Frage : BitBlt visble Region

Ich verursacht eine Zeichnungsanwendung von Art, normalerweise, wenn der Benutzer (ich) das sa-Standardzeichnen ihr ist ungefähr 8000 verschiedene GraphicsPath Gegenstände auf dem Schirm tut und ein Hintergrund bitmap.

To die Zeichnung anzeigen, die ich die BufferedGraphics Kategorie für die Geschwindigkeit using bitblt benutzt.

The Code, zum des image

privaten m_BGContext als BufferedGraphicsContext
privates m_BufferedGraphics als BufferedGraphics
privates m_ImageVisible als Boolesches zu zeichnen = True

privates Vorabgehobener betrag ()

m_BufferedGraphics.Dispose ()
m_BufferedGraphics = m_BGContext.Allocate (m_PicBoxGraphics, neues Viereck (0, 0, PictureBox1.Width, PictureBox1.Height))

, wenn m_ImageVisible Then
m_BufferedGraphics.Graphics.DrawImage (m_img, 0, 0, PictureBox1.Width, PictureBox1.Height)
Ende If

m_BufferedGraphics.Graphics.SmoothingMode = SmoothingMode.AntiAlias
m_BufferedGraphics.Graphics.CompositingQuality = CompositingQuality.HighQuality

m_MyDrawing.Draw (m_BufferedGraphics.Graphics)

End Sub

The Problem ich habe, ist, wenn ich die vollständige Zeichnung laut summe, die mein Gedächtnisverbrauch steigt und Leistung verlangsamend, wenn ich heraus es gehe zurück zum Normal so keine Gedächtnislecks laut summe, also die Frage ist. Tut jedermann können, ich bitblt nur die sichtbare/sichtbare Region der Zeichnung kann. Ich gesprochen mit einem Javaentwickler und -ihm, obwohl sie etwas haben, das ein Darstellungsfeld genannt, das tun, was ich wünschte, wenn ich in Java war, aber ich könnte viel nicht über es herausfinden und selbst wenn es ein Äquivalent innen gab. Netz, wenn dieses eine wilde Gans war - so nicht sure jagen, dachte gerade, dass ich it.

Anyway, wenn dieses sinnvoll zu jedermann ist, danke im Voraus für jedes mögliches help.

Oh erwähnen und ich Gebrauch WPF kippe, das, den ich sein besser denke, aber es muss GDI+ sein und ich kippe Tropfen die Qualität des drawing.

Kind Respekt

Andy

Antwort : BitBlt visble Region

Ohne irgendeinen Code zu sehen, recht stark ist dieses zu antworten.  Wie gehen Sie „laut summend“?

Die generische Antwort ist, dass SIE die sichtbare Region in Form eines Viereckes berechnen verwenden, das auf IHREM laut summenden Algorithmus basiert und dann GraphicsPath.GetBounds () für jedes GraphicsPath und wenn das resultierende rectanlge using Rectangle.Intersect, sehen, sichtbar ist ().  Wenn ja dann zeichnen Sie, dass GraphicsPath in Ihrem „übertragen“ Methode…
Weitere Lösungen  
 
programming4us programming4us