public TextureBrush GetBrush(Matrix matrix) { Bitmap bmp; if (_context2D != null) { bmp = _context2D.GetBitmap(); } else { bmp = new Bitmap(_imagePath); } WrapMode wm = WrapMode.Tile; switch (_repetition) { case "repeat": wm = WrapMode.Tile; break; case "no-repeat": wm = WrapMode.Clamp; break; case "repeat-x": wm = WrapMode.TileFlipX; break; case "repeat-y": wm = WrapMode.TileFlipY; break; } var brush = new TextureBrush(bmp, wm); brush.MultiplyTransform(matrix); return brush; }
public void MultiplyTransform_NonInvertible () { TextureBrush t = new TextureBrush (image); Matrix noninvertible = new Matrix (123, 24, 82, 16, 47, 30); t.MultiplyTransform (noninvertible); }
public static d.Brush ToGdiPlus(this ImageBrush brush, Rect bounds) { var img = brush.ImageSource; var bt = new BrushTransform(brush, bounds); if (bt.DegenerateBrush != null) return bt.DegenerateBrush; var viewbox = brush.Viewbox; if (brush.ViewboxUnits == BrushMappingMode.RelativeToBoundingBox) viewbox.Scale(img.Width, img.Height); var viewport = brush.Viewport; if (brush.ViewportUnits == BrushMappingMode.RelativeToBoundingBox) viewport.Transform(bt.ToAbsolute); var ia = new di.ImageAttributes(); ia.SetColorMatrix(new di.ColorMatrix { Matrix33 = (float)brush.Opacity }); var b = new d.TextureBrush(img.ToGdiPlus(), viewbox.ToGdiPlus(), ia); b.WrapMode = brush.TileMode.ToGdiPlus(); b.TranslateTransform((float)viewport.X, (float)viewport.Y); b.ScaleTransform((float)(viewport.Width/viewbox.Width), (float)(viewport.Height/viewbox.Height)); b.MultiplyTransform(bt.ToBrush.ToGdiPlus(), d2.MatrixOrder.Append); return b; }
public void MultiplyTransformOrder_Invalid () { TextureBrush t = new TextureBrush (image); t.MultiplyTransform (new Matrix (), (MatrixOrder) Int32.MinValue); }