/// <inheritdoc/> public override void Draw(object dc, Core2D.Shapes.XImage image, double dx, double dy, ImmutableArray <Core2D.Data.XProperty> db, Core2D.Data.Database.XRecord r) { var dxf = dc as DxfDocument; var bytes = State.ImageCache.GetImage(image.Key); if (bytes != null) { var rect = Core2D.Math.Rect2.Create(image.TopLeft, image.BottomRight, dx, dy); var dxfImageDefinitionCached = _biCache.Get(image.Key); if (dxfImageDefinitionCached != null) { var dxfImage = new Image( dxfImageDefinitionCached, new Vector3(ToDxfX(rect.X), ToDxfY(rect.Y + rect.Height), 0), rect.Width, rect.Height); dxf.AddEntity(dxfImage); } else { if (State.ImageCache == null || string.IsNullOrEmpty(image.Key)) { return; } var path = System.IO.Path.Combine(_outputPath, System.IO.Path.GetFileName(image.Key)); System.IO.File.WriteAllBytes(path, bytes); var dxfImageDefinition = new ImageDefinition(path); _biCache.Set(image.Key, dxfImageDefinition); var dxfImage = new Image( dxfImageDefinition, new Vector3(ToDxfX(rect.X), ToDxfY(rect.Y + rect.Height), 0), rect.Width, rect.Height); dxf.AddEntity(dxfImage); } } }
/// <inheritdoc/> public override void Draw(object dc, Core2D.Shapes.XImage image, double dx, double dy, ImmutableArray <Core2D.Data.XProperty> db, Core2D.Data.Database.XRecord r) { var _gfx = dc as XGraphics; var rect = Core2D.Math.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) { DrawRectangleInternal( _gfx, ToXSolidBrush(image.Style.Fill), ToXPen(image.Style, _scaleToPage, _sourceDpi, _targetDpi), image.IsStroked, image.IsFilled, ref srect); } if (_enableImageCache && _biCache.ContainsKey(image.Key)) { _gfx.DrawImage(_biCache[image.Key], srect); } else { if (State.ImageCache == null || string.IsNullOrEmpty(image.Key)) { return; } var bytes = State.ImageCache.GetImage(image.Key); 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.Key] = bi; } _gfx.DrawImage(bi, srect); if (!_enableImageCache) { bi.Dispose(); } } } }