Fråga : BitBlt visble region

Jag har skapat en dra applikation av sorterar, vanligt, när användaren (mig) gör sa som det standarda ska dra deras är omkring 8000, separata GraphicsPath anmärker på avskärma, och en bakgrund avbildar skärm för bitmap.

To dra mig har använt BufferedGraphicsen klassificerar för rusa using bitblt.

The kodifierar för att dra den privata m_BGContexten för image

som BufferedGraphicsContext
den privata m_BufferedGraphicsen som BufferedGraphics
privat m_ImageVisible som Boolean = m_BufferedGraphicsen för
för

m_BufferedGraphics.Dispose för True

den privat underattraktion () () = m_BGContext.Allocate (m_PicBoxGraphics, ny rektangel (0, 0, PictureBox1.Width, PictureBox1.Height))

, om m_ImageVisible Then
m_BufferedGraphics.Graphics.DrawImage (m_img, 0, 0, PictureBox1.Width, PictureBox1.Height)
avslutar If

m_BufferedGraphics.Graphics.SmoothingMode = SmoothingMode.AntiAlias
m_BufferedGraphics.Graphics.CompositingQuality = för

End Sub

The för CompositingQuality.HighQuality

m_MyDrawing.Draw (m_BufferedGraphics.Graphics) problemet som jag har är när jag zoom helheten som drar min minnesanvändning går upp och att sakta kapacitet, om jag zoom ut det, går tillbaka till det normala så inget minne läcker, så ifrågasätta är. Gör någon vet hur jag kan bitblt den endast viewable/synliga regionen av dra. Jag hade talat till en Java bärare, och han, fast de har något som kallas en viewport som skulle, gör vad jag önskade, om jag var i Java, bara mig kunde inte finna mycket ut om den och, om även det fanns en motsvarighet in. Förtjäna så inte sure, om denna var en wild gås - jaga, tänkte precis att jag skulle omnämnande it.

Anyway, om denna gör avkänning till någon, tack i förskott för någon help.

Oh, och jag cant bruk WPF som som I-funderare skulle är bättre, men det måste att vara GDI+, och jag cant tappar det kvalitets- av
Andy
för drawing.

Kind hälsningar " klar "

Svar : BitBlt visble region

Utan att se, några kodifierar ska detta är den nätt busen som ska svaras.  Hur är du ”som zoom”?

Det generiska svaret är att DU beräknar den synliga regionen i form av en rektangel som baseras på DIN zoom algoritm och därefter använder GraphicsPath.GetBounds () för varje GraphicsPath och ser, om den resulterande rectanlgen är synlig using Rectangle.Intersect ().  Om så, därefter du drar att GraphicsPath i ditt ”framför” metod…,
Andra lösningar  
 
programming4us programming4us