static void RenderTo(this DrawingGroup drawing, d.Graphics graphics, double opacity) { var gc = graphics.BeginContainer(); Utility.SetGraphicsQuality(graphics); if (drawing.Transform != null && !drawing.Transform.Value.IsIdentity) graphics.MultiplyTransform(drawing.Transform.Value.ToGdiPlus(), d2.MatrixOrder.Prepend); if (drawing.ClipGeometry != null) graphics.Clip = new d.Region(drawing.ClipGeometry.ToGdiPlus()); if (!Utility.IsZero(drawing.Opacity - 1) && drawing.Children.Count > 1) { var intersects = false; var c = drawing.Children.Count; var b = new Rect[c]; for(var i = 0; i < c; ++i) b[i] = drawing.Children[i].Bounds; for(var i = 0; i < c; ++i) { for(var j = 0; j < c; ++j) if (i != j && Rect.Intersect(b[i], b[j]) != Rect.Empty) { intersects = true; break; } if (intersects) break; } if (intersects) Utility.Warning("DrawingGroup.Opacity creates translucency between overlapping children"); } foreach (Drawing d in drawing.Children) d.RenderTo(graphics, opacity * drawing.Opacity); graphics.EndContainer(gc); if (drawing.OpacityMask != null) Utility.Warning("DrawingGroup OpacityMask ignored."); if (drawing.BitmapEffect != null) Utility.Warning("DrawingGroup BitmapEffect ignored."); if (drawing.GuidelineSet != null) Utility.Warning("DrawingGroup GuidelineSet ignored."); }