DrawImage() public method

public DrawImage ( Image image, RectangleF destRect, RectangleF srcRect, GraphicsUnit graphicsUnit ) : void
image Image
destRect System.Drawing.RectangleF
srcRect System.Drawing.RectangleF
graphicsUnit GraphicsUnit
return void
示例#1
0
        /// <summary>
        /// Renders the <see cref="SvgElement"/> and contents to the specified <see cref="Graphics"/> object.
        /// </summary>
        protected override void Render(SvgRenderer renderer)
        {
            if (!Visible || !Displayable)
            {
                return;
            }

            if (Width.Value > 0.0f && Height.Value > 0.0f && this.Href != null)
            {
                using (Image b = GetImage(this.Href))
                {
                    if (b != null)
                    {
                        this.PushTransforms(renderer);
                        this.SetClip(renderer);

                        RectangleF srcRect  = new RectangleF(0, 0, b.Width, b.Height);
                        var        destRect = new RectangleF(this.Location.ToDeviceValue(),
                                                             new SizeF(Width.ToDeviceValue(), Height.ToDeviceValue()));

                        renderer.DrawImage(b, destRect, srcRect, GraphicsUnit.Pixel);

                        this.ResetClip(renderer);
                        this.PopTransforms(renderer);
                    }
                }
                // TODO: cache images... will need a shared context for this
                // TODO: support preserveAspectRatio, etc
            }
        }
示例#2
0
        /// <summary>
        /// Renders the <see cref="SvgElement"/> and contents to the specified <see cref="Graphics"/> object.
        /// </summary>
        protected override void Render(SvgRenderer renderer)
        {
            if (!Visible || !Displayable)
            {
                return;
            }

            if (Width.Value > 0.0f && Height.Value > 0.0f && this.Href != null)
            {
                using (Image b = GetImage(this.Href))
                {
                    if (b != null)
                    {
                        var srcRect  = new RectangleF(0, 0, b.Width, b.Height);
                        var destClip = new RectangleF(this.Location.ToDeviceValue(renderer, this),
                                                      new SizeF(Width.ToDeviceValue(renderer, UnitRenderingType.Horizontal, this),
                                                                Height.ToDeviceValue(renderer, UnitRenderingType.Vertical, this)));
                        RectangleF destRect = destClip;

                        this.PushTransforms(renderer);
                        renderer.AddClip(new Region(destClip));
                        this.SetClip(renderer);

                        if (AspectRatio != null && AspectRatio.Align != SvgPreserveAspectRatio.none)
                        {
                            var fScaleX = destClip.Width / srcRect.Width;
                            var fScaleY = destClip.Height / srcRect.Height;
                            var xOffset = 0.0f;
                            var yOffset = 0.0f;

                            if (AspectRatio.Slice)
                            {
                                fScaleX = Math.Max(fScaleX, fScaleY);
                                fScaleY = Math.Max(fScaleX, fScaleY);
                            }
                            else
                            {
                                fScaleX = Math.Min(fScaleX, fScaleY);
                                fScaleY = Math.Min(fScaleX, fScaleY);
                            }

                            switch (AspectRatio.Align)
                            {
                            case SvgPreserveAspectRatio.xMinYMin:
                                break;

                            case SvgPreserveAspectRatio.xMidYMin:
                                xOffset = (destClip.Width - srcRect.Width * fScaleX) / 2;
                                break;

                            case SvgPreserveAspectRatio.xMaxYMin:
                                xOffset = (destClip.Width - srcRect.Width * fScaleX);
                                break;

                            case SvgPreserveAspectRatio.xMinYMid:
                                yOffset = (destClip.Height - srcRect.Height * fScaleY) / 2;
                                break;

                            case SvgPreserveAspectRatio.xMidYMid:
                                xOffset = (destClip.Width - srcRect.Width * fScaleX) / 2;
                                yOffset = (destClip.Height - srcRect.Height * fScaleY) / 2;
                                break;

                            case SvgPreserveAspectRatio.xMaxYMid:
                                xOffset = (destClip.Width - srcRect.Width * fScaleX);
                                yOffset = (destClip.Height - srcRect.Height * fScaleY) / 2;
                                break;

                            case SvgPreserveAspectRatio.xMinYMax:
                                yOffset = (destClip.Height - srcRect.Height * fScaleY);
                                break;

                            case SvgPreserveAspectRatio.xMidYMax:
                                xOffset = (destClip.Width - srcRect.Width * fScaleX) / 2;
                                yOffset = (destClip.Height - srcRect.Height * fScaleY);
                                break;

                            case SvgPreserveAspectRatio.xMaxYMax:
                                xOffset = (destClip.Width - srcRect.Width * fScaleX);
                                yOffset = (destClip.Height - srcRect.Height * fScaleY);
                                break;
                            }

                            destRect = new RectangleF(destClip.X + xOffset, destClip.Y + yOffset,
                                                      srcRect.Width * fScaleX, srcRect.Height * fScaleY);
                        }

                        renderer.DrawImage(b, destRect, srcRect, GraphicsUnit.Pixel);

                        this.ResetClip(renderer);
                        this.PopTransforms(renderer);
                    }
                }
                // TODO: cache images... will need a shared context for this
                // TODO: support preserveAspectRatio, etc
            }
        }