public void PopLayer() { GDILayer layer = layerStack.First(); GDILayerParameters layerParameters = paramStack.First(); RectangleF parentContentBound; RectangleF clipRect; ScLayer sclayer = layerParameters.sclayer; layerStack.RemoveFirst(); paramStack.RemoveFirst(); if (layerStack.Count > 0) { gdiGraph = layerStack.First().graph; parentContentBound = paramStack.First().ContentBounds; clipRect = paramStack.First().ClipRect; } else { gdiGraph = rootGdiGraph; parentContentBound = new RectangleF(0, 0, w, h); clipRect = layerParameters.parentClipRect; } float x = (float)Math.Round(layerParameters.ContentBounds.X - parentContentBound.X); float y = (float)Math.Round(layerParameters.ContentBounds.Y - parentContentBound.Y); Bitmap effectbmp = layer.bitmap; //后处理效果 if (sclayer.UsePosttreatmentEffect) { effectbmp = sclayer.ScPostTreatmentEffectGDI(layer.bitmap); } // TextureBrush br = new TextureBrush(effectbmp, WrapMode.Clamp); br.TranslateTransform((int)x, (int)y); switch (layerParameters.MaskAntialiasMode) { case GDIAntialiasMode.PerPrimitive: gdiGraph.SmoothingMode = SmoothingMode.AntiAlias; break; case GDIAntialiasMode.Aliased: gdiGraph.SmoothingMode = SmoothingMode.None; break; } gdiGraph.Transform = new Matrix(); gdiGraph.SetClip(clipRect); gdiGraph.FillPath(br, layerParameters.GeometricMask); gdiGraph.ResetClip(); //后处理效果释放 if (sclayer.UsePosttreatmentEffect) { sclayer.ScReleasePostTreatmentEffectGDI(effectbmp); } br.Dispose(); }