123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- using Svg;
- using System;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using System.Drawing.Imaging;
- using System.Windows.Forms;
- using FastReport.SVG;
- using FastReport.Utils;
- namespace FastReport.Forms
- {
- internal partial class SVGEditorAdvancedForm : BaseForm
- {
- private SVGObject svgObject;
- private SVGObject originalSvgObject;
- private string originalSvgString;
- public SVGObject SvgObject
- {
- get { return svgObject; }
- set { svgObject = value; }
- }
- private void Init()
- {
- originalSvgObject = (SVGObject)svgObject.Clone();
- originalSvgString = svgObject.SVGString;
- pictureBox.Image = Update(pictureBox.Width, pictureBox.Height);
- Reset();
- NUpDownMinX.ValueChanged += SetSvgObject;
- NUpDownMinY.ValueChanged += SetSvgObject;
- NUpDownWidth.ValueChanged += SetSvgObject;
- NUpDownHeight.ValueChanged += SetSvgObject;
- cbAspectRatio.CheckedChanged += SetSvgObject;
- rbGrayscale.CheckedChanged += SetSvgObject;
- rbNone.CheckedChanged += SetSvgObject;
- SizeChanged += delegate (object s, EventArgs e)
- {
- CenterImage();
- };
- }
- public override void UpdateDpiDependencies()
- {
- base.UpdateDpiDependencies();
- MinimumSize = this.LogicalToDevice(new Size(595, 477));
- }
- public SVGEditorAdvancedForm(SVGObject svgObject)
- {
- this.svgObject = svgObject;
- InitializeComponent();
- Init();
- Localize();
- UIUtils.CheckRTL(this);
- UpdateDpiDependencies();
- }
- #region Init & Reset
- private void ResetSvgObjectToOriginal()
- {
- svgObject = (SVGObject)originalSvgObject.Clone();
- if (!string.IsNullOrEmpty(originalSvgString))
- svgObject.SVGString = originalSvgString;
- if (svgObject.SvgDocument.AspectRatio.Align != SvgPreserveAspectRatio.none)
- svgObject.AspectRatio = new SvgAspectRatio(SvgPreserveAspectRatio.xMidYMid);
- }
- private void Localize()
- {
- MyRes res = new MyRes("Forms,PictureEditorAdvanced");
- Text = res.Get("");
- btnOK.Text = Res.Get("Buttons,Ok");
- btnCancel.Text = Res.Get("Buttons,Cancel");
- btnReset.Text = res.Get("Reset");
- gbColor.Text = res.Get("Color");
- lblMinX.Text = res.Get("MinX");
- lblMinY.Text = res.Get("MinY");
- lblWidth.Text = res.Get("Horizontal");
- lblHeight.Text = res.Get("Vertical");
- cbAspectRatio.Text = res.Get("AspectRatio");
- rbNone.Text = Res.Get("Misc,None");
- rbGrayscale.Text = res.Get("Grayscale");
- }
- private void Reset()
- {
- ResetSvgObjectToOriginal();
- ResetAspectRatio();
- ResetViewBox();
- ResetGrayScale();
- }
- private void ResetAspectRatio()
- {
- cbAspectRatio.Checked = (svgObject.SvgDocument.AspectRatio.Align == SvgPreserveAspectRatio.none) ? false : true;
- }
- private void ResetViewBox()
- {
- NUpDownMinX.Minimum = 0;
- NUpDownMinX.Maximum = decimal.MaxValue;
- NUpDownMinX.Value = (decimal)svgObject.SvgDocument.ViewBox.MinX;
- NUpDownMinY.Minimum = 0;
- NUpDownMinY.Maximum = decimal.MaxValue;
- NUpDownMinY.Value = (decimal)svgObject.SvgDocument.ViewBox.MinY;
- NUpDownWidth.Minimum = 0;
- NUpDownWidth.Maximum = decimal.MaxValue;
- NUpDownWidth.Value = (decimal)svgObject.SvgDocument.ViewBox.Width;
- NUpDownHeight.Minimum = 0;
- NUpDownHeight.Maximum = decimal.MaxValue;
- NUpDownHeight.Value = (decimal)svgObject.SvgDocument.ViewBox.Height;
- }
- private void ResetGrayScale()
- {
- svgObject.Grayscale = originalSvgObject.Grayscale;
- if (svgObject.Grayscale)
- rbGrayscale.Checked = true;
- else
- rbNone.Checked = true;
- }
- #endregion
- private void SetSvgObject(object sender, EventArgs e)
- {
- if (cbAspectRatio.Checked)
- svgObject.AspectRatio = new SvgAspectRatio(SvgPreserveAspectRatio.xMidYMid);
- else
- {
- svgObject.SizeMode = PictureBoxSizeMode.StretchImage;
- svgObject.AspectRatio = new SvgAspectRatio(SvgPreserveAspectRatio.none);
- }
- svgObject.Grayscale = rbGrayscale.Checked ? true : false;
- if (sender == NUpDownMinX)
- {
- svgObject.ViewBox = new SvgViewBox((float)NUpDownMinX.Value,
- svgObject.SvgDocument.ViewBox.MinY,
- svgObject.SvgDocument.ViewBox.Width,
- svgObject.SvgDocument.ViewBox.Height);
- }
- else if (sender == NUpDownMinY)
- {
- svgObject.ViewBox = new SvgViewBox(svgObject.SvgDocument.ViewBox.MinX,
- (float)NUpDownMinY.Value,
- svgObject.SvgDocument.ViewBox.Width,
- svgObject.SvgDocument.ViewBox.Height);
- }
- else if (sender == NUpDownWidth)
- {
- svgObject.ViewBox = new SvgViewBox(svgObject.SvgDocument.ViewBox.MinX,
- svgObject.SvgDocument.ViewBox.MinY,
- (float)NUpDownWidth.Value,
- svgObject.SvgDocument.ViewBox.Height);
- }
- else if (sender == NUpDownHeight)
- {
- svgObject.ViewBox = new SvgViewBox(svgObject.SvgDocument.ViewBox.MinX,
- svgObject.SvgDocument.ViewBox.MinY,
- svgObject.SvgDocument.ViewBox.Width,
- (float)NUpDownHeight.Value);
- }
- Redraw();
- }
- #region Main & Etc
- private void Redraw()
- {
- pictureBox.Image = Update(pictureBox.Width, pictureBox.Height);
- CenterImage();
- }
- private void CenterImage()
- {
- pictureBox.Left = Math.Max(0, (pictureBox.Parent.Width - pictureBox.Width) / 2);
- pictureBox.Top = Math.Max(0, (pictureBox.Parent.Height - pictureBox.Height) / 2);
- }
- private Image Update(int width, int height)
- {
- Image image;
- if (svgObject.Grayscale)
- {
- if (svgObject.SVGGrayscale == null)
- svgObject.GetSVGGrayscale();
- image = svgObject.SVGGrayscale.Draw(width, height);
- }
- else
- image = svgObject.SvgDocument.Draw(width, height);
- Rectangle destRect = new Rectangle(0, 0, width, height);
- Bitmap destImage = new Bitmap(width, height);
- destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
- using (Graphics graphics = Graphics.FromImage(destImage))
- {
- graphics.CompositingMode = CompositingMode.SourceCopy;
- graphics.CompositingQuality = CompositingQuality.HighQuality;
- graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
- graphics.SmoothingMode = SmoothingMode.HighQuality;
- graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
- using (ImageAttributes wrapMode = new ImageAttributes())
- {
- wrapMode.SetWrapMode(WrapMode.TileFlipXY);
- graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
- }
- }
- return destImage;
- }
- private void btnReset_Click(object sender, EventArgs e)
- {
- Reset();
- Redraw();
- }
- #endregion
- }
- }
|