/// <summary> /// /// </summary> /// <param name="doc"></param> /// <param name="image"></param> /// <param name="dx"></param> /// <param name="dy"></param> /// <param name="db"></param> /// <param name="r"></param> public void Draw(object doc, Core2D.XImage image, double dx, double dy, ImmutableArray <Core2D.ShapeProperty> db, Core2D.Record r) { var _doc = doc as DxfDocument; var bytes = _state.ImageCache.GetImage(image.Path); if (bytes != null) { var rect = Core2D.Rect2.Create(image.TopLeft, image.BottomRight, dx, dy); if (_enableImageCache && _biCache.ContainsKey(image.Path)) { var dxfImageDefinition = _biCache[image.Path]; var dxfImage = new Image( dxfImageDefinition, new Vector3(ToDxfX(rect.X), ToDxfY(rect.Y + rect.Height), 0), rect.Width, rect.Height); _doc.AddEntity(dxfImage); } else { if (_state.ImageCache == null || string.IsNullOrEmpty(image.Path)) { return; } var path = System.IO.Path.Combine(_outputPath, System.IO.Path.GetFileName(image.Path)); System.IO.File.WriteAllBytes(path, bytes); var dxfImageDefinition = new ImageDef(path); if (_enableImageCache) { _biCache[image.Path] = dxfImageDefinition; } var dxfImage = new Image( dxfImageDefinition, new Vector3(ToDxfX(rect.X), ToDxfY(rect.Y + rect.Height), 0), rect.Width, rect.Height); _doc.AddEntity(dxfImage); } } }
/// <summary> /// /// </summary> /// <param name="gfx"></param> /// <param name="image"></param> /// <param name="dx"></param> /// <param name="dy"></param> /// <param name="db"></param> /// <param name="r"></param> public void Draw(object gfx, Core2D.XImage image, double dx, double dy, ImmutableArray <Core2D.ShapeProperty> db, Core2D.Record r) { var _gfx = gfx as XGraphics; var rect = Core2D.Rect2.Create( image.TopLeft, image.BottomRight, dx, dy); var srect = new XRect( _scaleToPage(rect.X), _scaleToPage(rect.Y), _scaleToPage(rect.Width), _scaleToPage(rect.Height)); if (image.IsStroked && image.IsFilled) { _gfx.DrawRectangle( ToXPen(image.Style, _scaleToPage), ToXSolidBrush(image.Style.Fill), srect); } else if (image.IsStroked && !image.IsFilled) { _gfx.DrawRectangle( ToXPen(image.Style, _scaleToPage), srect); } else if (!image.IsStroked && image.IsFilled) { _gfx.DrawRectangle( ToXSolidBrush(image.Style.Fill), srect); } if (_enableImageCache && _biCache.ContainsKey(image.Path)) { _gfx.DrawImage(_biCache[image.Path], srect); } else { if (_state.ImageCache == null || string.IsNullOrEmpty(image.Path)) { return; } var bytes = _state.ImageCache.GetImage(image.Path); if (bytes != null) { var ms = new System.IO.MemoryStream(bytes); #if WPF var bs = new BitmapImage(); bs.BeginInit(); bs.StreamSource = ms; bs.EndInit(); bs.Freeze(); var bi = XImage.FromBitmapSource(bs); #else var bi = XImage.FromStream(ms); #endif if (_enableImageCache) { _biCache[image.Path] = bi; } _gfx.DrawImage(bi, srect); if (!_enableImageCache) { bi.Dispose(); } } } }