public void Dispose() { if (backgroundGraphic != null) { backgroundGraphic.Dispose(); } backgroundGraphic = null; if (graphicsBuffer != null) { graphicsBuffer.Dispose(); } graphicsBuffer = null; if (backgroundRenderGraphic != null) { backgroundRenderGraphic.Dispose(); } backgroundRenderGraphic = null; if (backgroundMemoryBitmap != null) { GDIRender.DeleteObject(memoryBitmapHdc); backgroundMemoryBitmap.Dispose(); } backgroundMemoryBitmap = null; if (backgroundMemoryGraphic != null) { GDIRender.DeleteObject(memoryGraphicHdc); backgroundMemoryGraphic.Dispose(); } backgroundMemoryGraphic = null; if (backgroundDrawGraphic != null) { backgroundDrawGraphic.Dispose(); } backgroundDrawGraphic = null; }
public int ResetDraw(Panel GraphOle, Color BackColor) { if (GraphOle == null || GraphOle.GetType() != typeof(Panel) || GraphOle.ClientRectangle.Width < 1 || GraphOle.ClientRectangle.Height < 1) { return(-1); } RenderLock.WaitLock(); backgroundGraph = GraphOle; lock (backgroundGraph) { if (backgroundGraphic != null) { backgroundGraphic.Dispose(); } if (graphicsBuffer != null) { graphicsBuffer.Dispose(); } if (backgroundRenderGraphic != null) { backgroundRenderGraphic.Dispose(); } if (backgroundMemoryBitmap != null) { GDIRender.DeleteObject(memoryBitmapHdc); backgroundMemoryBitmap.Dispose(); } if (backgroundMemoryGraphic != null) { GDIRender.DeleteObject(memoryGraphicHdc); backgroundMemoryGraphic.Dispose(); } if (backgroundDrawGraphic != null) { backgroundDrawGraphic.Dispose(); } backgroundGraphic = backgroundGraph.CreateGraphics(); graphicsBuffer = BufferedGraphicsManager.Current.Allocate(backgroundGraphic, backgroundGraph.ClientRectangle); backgroundRenderGraphic = graphicsBuffer.Graphics; backgroundRenderGraphic.Clear(BackColor); backgroundRenderGraphic.SetClip(backgroundGraph.ClientRectangle); backgroundMemoryBitmap = new Bitmap(backgroundGraph.ClientRectangle.Width, backgroundGraph.ClientRectangle.Height, backgroundRenderGraphic); backgroundMemoryGraphic = Graphics.FromImage(backgroundMemoryBitmap); backgroundMemoryGraphic.Clear(BackColor); memoryGraphicHdc = GDIRender.CreateCompatibleDC(backgroundMemoryGraphic.GetHdc()); memoryBitmapHdc = backgroundMemoryBitmap.GetHbitmap(); GDIRender.SelectObject(memoryGraphicHdc, memoryBitmapHdc); backgroundDrawGraphic = Graphics.FromHdc(memoryGraphicHdc); switch (DrawQuality) { case DRAW_QUALITY.QUALITY_SUPER_HIGH: backgroundDrawGraphic.SmoothingMode = SmoothingMode.HighQuality; backgroundDrawGraphic.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; backgroundDrawGraphic.InterpolationMode = InterpolationMode.HighQualityBilinear; backgroundDrawGraphic.PixelOffsetMode = PixelOffsetMode.HighQuality; break; case DRAW_QUALITY.QUALITY_HIGH: backgroundDrawGraphic.SmoothingMode = SmoothingMode.AntiAlias; backgroundDrawGraphic.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; backgroundDrawGraphic.InterpolationMode = InterpolationMode.Bilinear; backgroundDrawGraphic.PixelOffsetMode = PixelOffsetMode.Half; break; case DRAW_QUALITY.QUALITY_MIDDLE: backgroundDrawGraphic.SmoothingMode = SmoothingMode.HighSpeed; backgroundDrawGraphic.TextRenderingHint = TextRenderingHint.AntiAlias; backgroundDrawGraphic.InterpolationMode = InterpolationMode.NearestNeighbor; backgroundDrawGraphic.PixelOffsetMode = PixelOffsetMode.HighSpeed; break; case DRAW_QUALITY.QUALITY_LOW: backgroundDrawGraphic.SmoothingMode = SmoothingMode.None; backgroundDrawGraphic.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit; backgroundDrawGraphic.InterpolationMode = InterpolationMode.Low; backgroundDrawGraphic.PixelOffsetMode = PixelOffsetMode.None; break; } } RenderLock.Unlock(); return(0); }