public async Task <IViewComponentResult> InvokeAsync(ComponentViewModel <ImageWidgetProperties> widgetProperties) { var Properties = widgetProperties.Properties; string ImageUrl; if (Properties.UseAttachment) { if (!string.IsNullOrWhiteSpace(Properties.ImageGuid)) { ImageUrl = await MediaRepository.GetAttachmentImageAsync(widgetProperties.Page, Guid.Parse(Properties.ImageGuid)); } else { ImageUrl = ""; } } else { ImageUrl = (Properties.ImageUrl != null && Properties.ImageUrl.Count() > 0 ? await MediaRepository.GetMediaFileUrlAsync(Properties.ImageUrl.FirstOrDefault().FileGuid) : ""); } ImageWidgetViewModel model = new ImageWidgetViewModel() { ImageUrl = ImageUrl, Alt = Properties.Alt, CssClass = Properties.CssClass, ImageType = Properties.UseAttachment ? ImageTypeEnum.Attachment : ImageTypeEnum.MediaFile }; return(View(model)); }
internal void SetEditType(ImageEditType type, ImageWidgetViewModel img = null) { if (this.EditType == type) { return; } this.EditType = type; this._img = img; switch (type) { case ImageEditType.Slice: SliceLineVisible = true; CropToolsVisible = false; SliceType = Module.SliceType.Cross; this._pageEditorViewModel.SetImageEditorFocus(); break; case ImageEditType.Crop: SliceLineVisible = false; CropToolsVisible = true; this.InitialCropTools(); this._pageEditorViewModel.SetImageEditorFocus(); break; default: SliceLineVisible = false; CropToolsVisible = false; break; } }
private ImageWidgetViewModel MakeCopyImageWidget(BitmapSource source, Size orignalsize, Rect rectangleIntersect, Rect rectRotate) { var widget = this._pageEditorViewModel.PageEditorModel.AddWidgetItem2Dom (Naver.Compass.Service.Document.WidgetType.Image, Naver.Compass.Service.Document.ShapeType.None, rectangleIntersect.Left, rectangleIntersect.Top, Convert.ToInt32(rectangleIntersect.Width), Convert.ToInt32(rectangleIntersect.Height)); var vmItem = new ImageWidgetViewModel(widget); vmItem.IsSelected = false; var cb = new CroppedBitmap( source, new Int32Rect( Convert.ToInt32((rectangleIntersect.Left - rectRotate.Left) * orignalsize.Width / rectRotate.Width), Convert.ToInt32((rectangleIntersect.Top - rectRotate.Top) * orignalsize.Height / rectRotate.Height), Convert.ToInt32(rectangleIntersect.Width * orignalsize.Width / rectRotate.Width), Convert.ToInt32(rectangleIntersect.Height * orignalsize.Height / rectRotate.Height))); var ms = new MemoryStream(); var encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(cb)); encoder.Save(ms); ms.Seek(0, SeekOrigin.Begin); vmItem.ImportImgSeekLater(ms, false); return(vmItem); }
private Rect GetIntersect(ImageWidgetViewModel img) { ///calculate intersect area of image and move thumb var rectangleImg = new Rect(img.Left, img.Top, img.ItemWidth, img.ItemHeight); var rectangleThumb = new Rect(CropToolsRectLeft / Scale, CropToolsRectTop / Scale, CropToolsRectWidth / Scale, CropToolsRectHeight / Scale); var rectangleIntersect = Rect.Intersect(rectangleImg, rectangleThumb); return(rectangleIntersect); }
public ActionResult Index() { var properties = GetProperties(); var viewModel = new ImageWidgetViewModel { ImageUrl = properties.ImageUrl, }; return(View("~/Views/Shared/MyCompany/Widgets/_ImageWidget.cshtml", viewModel)); }
public ActionResult Index() { var Properties = GetProperties(); ImageWidgetViewModel model = new ImageWidgetViewModel() { ImageUrl = (Properties.UseAttachment ? _MediaRepo.GetAttachmentImage(GetPage(), Properties.ImageGuid) : (Properties.ImageUrl != null && Properties.ImageUrl.Count > 0 ? _MediaRepo.GetMediaFileUrl(Properties.ImageUrl[0].FileGuid) : "")), Alt = Properties.Alt, CssClass = Properties.CssClass, ImageType = Properties.UseAttachment ? ImageTypeEnum.Attachment : ImageTypeEnum.MediaFile }; return(View(model)); }
private void ImportImageCommandHandler(object obj) { ImageWidgetViewModel img = _selectionService.GetSelectedWidgets()[0] as ImageWidgetViewModel; if (img == null) { return; } img.ImportImg(); if (img.ParentID != Guid.Empty) { UpdateGroup(img.ParentID); } }
private void Insert2Canvas(IWidget widget) { WidgetViewModBase vmItem; switch (widget.WidgetType) { case WidgetType.Button: { vmItem = new ButtonWidgetViewModel(widget); break; } case WidgetType.Image: { vmItem = new ImageWidgetViewModel(widget); break; } case WidgetType.FlowShape: { IFlowShape shape = widget as IFlowShape; if (shape.FlowShapeType == FlowShapeType.Diamond) { vmItem = new DiamondWidgetViewModel(widget); } else if (shape.FlowShapeType == FlowShapeType.Ellipse) { vmItem = new CircleWidgetViewModel(widget); } else if (shape.FlowShapeType == FlowShapeType.Rectangle) { vmItem = new RectangleWidgetViewModel(widget); } else { vmItem = new ImageWidgetViewModel(widget); } break; } default: { vmItem = new ImageWidgetViewModel(widget); break; } } vmItem.IsSelected = true; Items.Add(vmItem); }
public async Task <IViewComponentResult> InvokeAsync(ComponentViewModel <ImageWidgetProperties> widgetProperties) { cacheDependenciesScope.Begin(); var Properties = widgetProperties.Properties; string ImageUrl; if (Properties.UseAttachment) { if (!string.IsNullOrWhiteSpace(Properties.ImageGuid)) { cacheDependenciesStore.Store(new string[] { $"attachment|{Guid.Parse(Properties.ImageGuid)}" }); ImageUrl = await MediaRepository.GetAttachmentImageAsync(widgetProperties.Page, Guid.Parse(Properties.ImageGuid)); } else { ImageUrl = ""; } } else { if (Properties.ImageUrl != null && Properties.ImageUrl.Any(x => true)) { cacheDependenciesStore.Store(new string[] { $"mediafile|{Properties.ImageUrl.FirstOrDefault().FileGuid}" }); ImageUrl = await MediaRepository.GetMediaFileUrlAsync(Properties.ImageUrl.FirstOrDefault().FileGuid); } else { ImageUrl = ""; } } // Save dependencies widgetProperties.CacheDependencies.CacheKeys = cacheDependenciesScope.End(); ImageWidgetViewModel model = new ImageWidgetViewModel() { ImageUrl = ImageUrl, Alt = Properties.Alt, CssClass = Properties.CssClass, ImageType = Properties.UseAttachment ? ImageTypeEnum.Attachment : ImageTypeEnum.MediaFile }; return(View(model)); }
private TransformedBitmap ScaleImage(ImageWidgetViewModel img) { var tb = new TransformedBitmap(); var scaleTransform = new ScaleTransform(); BitmapFrame OriginSource = img.ImgOriginSource as BitmapFrame; if (OriginSource == null) { tb.BeginInit(); tb.Source = null; tb.Transform = scaleTransform; tb.EndInit(); return(tb); } var scalex = img.ItemWidth / OriginSource.Width; var scaley = img.ItemHeight / OriginSource.Height; if (scaley <= scalex) { scaleTransform.ScaleX = 1; scaleTransform.ScaleY = (img.ItemHeight / OriginSource.Height) / scalex; } else { scaleTransform.ScaleY = 1; scaleTransform.ScaleX = (img.ItemWidth / OriginSource.Width) / scaley; } var checkWholeSize = (scaleTransform.ScaleX * OriginSource.Width) * (scaleTransform.ScaleY * OriginSource.Height); if (checkWholeSize > 3000 * 3000) { scaleTransform.ScaleX = Math.Sqrt(3000 * 3000 / checkWholeSize) * scaleTransform.ScaleX; scaleTransform.ScaleY = Math.Sqrt(3000 * 3000 / checkWholeSize) * scaleTransform.ScaleY; } tb.BeginInit(); tb.Source = OriginSource as BitmapFrame; tb.Transform = scaleTransform; tb.EndInit(); return(tb); }
//Create Widget VM According to XML data public static WidgetViewModBase CreateWidget(IRegion obj) { //string timeStamp = "_" + DateTime.Now.ToString("MMddHHmmssfff"); WidgetViewModBase vmItem; if (obj is IMaster) { IMaster master = obj as IMaster; AutoSetWdgName(obj, "Master ", WidgetType.None); vmItem = new MasterWidgetViewModel(master); return(vmItem); } IWidget it = obj as IWidget; switch (it.WidgetType) { case WidgetType.Button: { AutoSetWdgName(it, "Button ", WidgetType.Button); vmItem = new ButtonWidgetViewModel(it); break; } case WidgetType.Image: { AutoSetWdgName(it, "Image ", WidgetType.Image); vmItem = new ImageWidgetViewModel(it); break; } case WidgetType.SVG: { AutoSetWdgName(it, "Svg ", WidgetType.SVG); vmItem = new SVGWidgetViewModel(it); break; } case WidgetType.HotSpot: { AutoSetWdgName(it, "Link ", WidgetType.HotSpot); vmItem = new HotSpotWidgetViewModel(it); break; } case WidgetType.Line: { ILine line = it as ILine; if (line.Orientation == Orientation.Vertical) { AutoSetWdgName(it, "VLine ", WidgetType.Line); vmItem = new VLineWidgetViewModel(it); } else { AutoSetWdgName(it, "HLine ", WidgetType.Line); vmItem = new HLineWidgetViewModel(it); } break; } case WidgetType.Shape: { IShape shape = it as IShape; if (shape.ShapeType == ShapeType.Diamond) { AutoSetWdgName(it, "Diamond ", WidgetType.Shape); vmItem = new DiamondWidgetViewModel(it); } else if (shape.ShapeType == ShapeType.Ellipse) { AutoSetWdgName(it, "Ellipse ", WidgetType.Shape); vmItem = new CircleWidgetViewModel(it); } else if (shape.ShapeType == ShapeType.Rectangle) { AutoSetWdgName(it, "Rectangle ", WidgetType.Shape); vmItem = new RectangleWidgetViewModel(it); } else if (shape.ShapeType == ShapeType.RoundedRectangle) { AutoSetWdgName(it, "Round ", WidgetType.Shape); vmItem = new RoundedRecWidgetViewModel(it); } else if (shape.ShapeType == ShapeType.Paragraph) { AutoSetWdgName(it, "Paragraph ", WidgetType.Shape); vmItem = new LabelWidgetViewModel(it); } else if (shape.ShapeType == ShapeType.Triangle) { AutoSetWdgName(it, "Triangle ", WidgetType.Shape); vmItem = new TriangleWidgetViewModel(it); } else { AutoSetWdgName(it, "Image ", WidgetType.Shape); vmItem = new ImageWidgetViewModel(it); } break; } case WidgetType.ListBox: { AutoSetWdgName(it, "ListBox ", WidgetType.ListBox); vmItem = new ListboxWidgetViewModel(it); break; } case WidgetType.DropList: { AutoSetWdgName(it, "DropList ", WidgetType.DropList); vmItem = new DroplistWidgetViewModel(it); break; } case WidgetType.Checkbox: { AutoSetWdgName(it, "Checkbox ", WidgetType.Checkbox); vmItem = new CheckBoxWidgetViewModel(it); break; } case WidgetType.RadioButton: { AutoSetWdgName(it, "RadioButton ", WidgetType.RadioButton); vmItem = new RadioButtonWidgetViewModel(it); break; } case WidgetType.TextArea: { AutoSetWdgName(it, "TextArea ", WidgetType.TextArea); vmItem = new TextAreaWidgetViewModel(it); break; } case WidgetType.TextField: { AutoSetWdgName(it, "TextField ", WidgetType.TextField); vmItem = new TextFieldWidgetViewModel(it); break; } case WidgetType.HamburgerMenu: { AutoSetWdgName(it, "Drawer ", WidgetType.HamburgerMenu); vmItem = new HamburgerMenuViewModel(it); break; } case WidgetType.DynamicPanel: { AutoSetWdgName(it, "Flicking ", WidgetType.DynamicPanel); vmItem = new DynamicPanelViewModel(it); break; } case WidgetType.Toast: { AutoSetWdgName(it, "Toast ", WidgetType.Toast); vmItem = new ToastViewModel(it); break; } case WidgetType.FlowShape: // To avoid crash when load old file as we don't support flow shape right now. // This is temporary code and remove it once we support flow shape. return(null); case WidgetType.None: return(null); default: { vmItem = null; break; } }//switch return(vmItem); }
private void CropAndCutSelectedImg() { if (this._img == null) { return; } var img = this._img; var tb = this.ScaleImage(img); var bitmapRotate = ImageProcess.RotateImage(tb, img.RotateAngle); var rectRotate = new Rect(); if (img.RotateAngle == 0d) { rectRotate = new Rect(img.Left, img.Top, img.ItemWidth, img.ItemHeight); } else { var newSize = ImageProcess.RotateSize(img.ItemWidth, img.ItemHeight, img.RotateAngle); rectRotate = new Rect( (img.Left + img.ItemWidth / 2) - newSize.Width / 2, (img.Top + img.ItemHeight / 2) - newSize.Height / 2, newSize.Width, newSize.Height); } var rectangleIntersect = GetIntersect(rectRotate); ///no intersect area if (rectangleIntersect == Rect.Empty) { return; } var source = bitmapRotate; var orignalsize = new Size(source.Width, source.Height); ///to cut selected area var vmcopyItem = MakeCopyImageWidget(source, orignalsize, rectangleIntersect, rectRotate); vmcopyItem.IsSelected = false; _pageEditorViewModel.CopyWidget(vmcopyItem, true); _pageEditorViewModel.DeleteItem(vmcopyItem); ///rubber selected area var writablebitmap = new WriteableBitmap(source); var toRubberRect = new Int32Rect( Convert.ToInt32((rectangleIntersect.Left - rectRotate.Left) * orignalsize.Width / rectRotate.Width), Convert.ToInt32((rectangleIntersect.Top - rectRotate.Top) * orignalsize.Height / rectRotate.Height), Convert.ToInt32(rectangleIntersect.Width * orignalsize.Width / rectRotate.Width), Convert.ToInt32(rectangleIntersect.Height * orignalsize.Height / rectRotate.Height)); ImageProcess.Rubber(toRubberRect.X, toRubberRect.Y, toRubberRect.Width, toRubberRect.Height, writablebitmap); var ms = new MemoryStream(); var encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(writablebitmap)); encoder.Save(ms); ms.Seek(0, SeekOrigin.Begin); var widget = this._pageEditorViewModel.PageEditorModel.AddWidgetItem2Dom (Naver.Compass.Service.Document.WidgetType.Image, Naver.Compass.Service.Document.ShapeType.None, rectRotate.Left, rectRotate.Top, Convert.ToInt32(rectRotate.Width), Convert.ToInt32(rectRotate.Height)); var vmItem = new ImageWidgetViewModel(widget); vmItem.IsSelected = true; vmItem.ImportImgSeekLater(ms, false); vmItem.Opacity = img.Opacity; ///replace selected widget with cropped widget img.IsSelected = false; this._pageEditorViewModel.ReplaceWidget( new List <WidgetViewModBase> { img }, new List <WidgetViewModBase> { vmItem }); }
private void SliceSelectedImage(System.Windows.Point slicePoint) { if (this._img == null) { return; } var img = this._img; var tb = this.ScaleImage(img); var bitmapRotate = ImageProcess.RotateImage(tb, img.RotateAngle); var rectRotate = new Rect(); if (img.RotateAngle == 0d) { rectRotate = new Rect(img.Left, img.Top, img.ItemWidth, img.ItemHeight); } else { var newSize = ImageProcess.RotateSize(img.ItemWidth, img.ItemHeight, img.RotateAngle); rectRotate = new Rect( (img.Left + img.ItemWidth / 2) - newSize.Width / 2, (img.Top + img.ItemHeight / 2) - newSize.Height / 2, newSize.Width, newSize.Height); } var rectangles = new List <Rect>(); /// | | /// 1 | 2 | 3 /// _____|____________|_______ /// 4 | 5 | 6 /// _____|____________|_______ /// 7 | 8 | 9 /// | | /// in rect 1,3,7,9 if ((slicePoint.X <= rectRotate.Left && slicePoint.Y <= rectRotate.Top) || (slicePoint.X >= rectRotate.Left + rectRotate.Width && slicePoint.Y <= rectRotate.Top) || (slicePoint.X <= rectRotate.Left && slicePoint.Y >= rectRotate.Top + rectRotate.Height) || (slicePoint.X >= rectRotate.Left + rectRotate.Width && slicePoint.Y >= rectRotate.Top + rectRotate.Height)) { return; } /// in rect 2,8 if ((slicePoint.X > rectRotate.Left && slicePoint.X < rectRotate.Left + rectRotate.Width) && (slicePoint.Y <= rectRotate.Top || slicePoint.Y >= rectRotate.Top + rectRotate.Height)) { if (SliceType != Module.SliceType.Horizontal) { rectangles.Add(new Rect(0, 0, slicePoint.X - rectRotate.Left, rectRotate.Height)); rectangles.Add(new Rect(slicePoint.X - rectRotate.Left, 0, rectRotate.Width - (slicePoint.X - rectRotate.Left), rectRotate.Height)); } } /// in rect 4,6 if ((slicePoint.X <= rectRotate.Left || slicePoint.X >= rectRotate.Left + rectRotate.Width) && (slicePoint.Y > rectRotate.Top && slicePoint.Y < rectRotate.Top + rectRotate.Height)) { if (SliceType != Module.SliceType.Vertical) { rectangles.Add(new Rect(0, 0, rectRotate.Width, slicePoint.Y - rectRotate.Top)); rectangles.Add(new Rect(0, slicePoint.Y - rectRotate.Top, rectRotate.Width, rectRotate.Height - (slicePoint.Y - rectRotate.Top))); } } /// in rect 5 if ((slicePoint.X > rectRotate.Left && slicePoint.X < rectRotate.Left + rectRotate.Width) && (slicePoint.Y > rectRotate.Top && slicePoint.Y < rectRotate.Top + rectRotate.Height)) { if (SliceType == Module.SliceType.Vertical) { rectangles.Add(new Rect(0, 0, slicePoint.X - rectRotate.Left, rectRotate.Height)); rectangles.Add(new Rect(slicePoint.X - rectRotate.Left, 0, rectRotate.Width - (slicePoint.X - rectRotate.Left), rectRotate.Height)); } else if (SliceType == Module.SliceType.Horizontal) { rectangles.Add(new Rect(0, 0, rectRotate.Width, slicePoint.Y - rectRotate.Top)); rectangles.Add(new Rect(0, slicePoint.Y - rectRotate.Top, rectRotate.Width, rectRotate.Height - (slicePoint.Y - rectRotate.Top))); } else if (SliceType == Module.SliceType.Cross) { rectangles.Add(new Rect(0, 0, slicePoint.X - rectRotate.Left, slicePoint.Y - rectRotate.Top)); rectangles.Add(new Rect(slicePoint.X - rectRotate.Left, 0, rectRotate.Width - (slicePoint.X - rectRotate.Left), slicePoint.Y - rectRotate.Top)); rectangles.Add(new Rect(0, slicePoint.Y - rectRotate.Top, slicePoint.X - rectRotate.Left, rectRotate.Height - (slicePoint.Y - rectRotate.Top))); rectangles.Add(new Rect(slicePoint.X - rectRotate.Left, slicePoint.Y - rectRotate.Top, rectRotate.Width - (slicePoint.X - rectRotate.Left), rectRotate.Height - (slicePoint.Y - rectRotate.Top))); } } if (rectangles.Count > 0) { var source = bitmapRotate; var orignalsize = new Size(source.Width, source.Height); var newWidgets = new List <WidgetViewModBase>(); foreach (var rect in rectangles) { var widget = this._pageEditorViewModel.PageEditorModel.AddWidgetItem2Dom (Naver.Compass.Service.Document.WidgetType.Image, Naver.Compass.Service.Document.ShapeType.None, rectRotate.Left + rect.X, rectRotate.Top + rect.Y, Convert.ToInt32(rect.Width), Convert.ToInt32(rect.Height)); var vmItem = new ImageWidgetViewModel(widget); vmItem.IsSelected = true; var cb = new CroppedBitmap( source, new Int32Rect( Convert.ToInt32(rect.X * orignalsize.Width / rectRotate.Width), Convert.ToInt32(rect.Y * orignalsize.Height / rectRotate.Height), Convert.ToInt32(rect.Width * orignalsize.Width / rectRotate.Width), Convert.ToInt32(rect.Height * orignalsize.Height / rectRotate.Height))); var ms = new MemoryStream(); var encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(cb)); encoder.Save(ms); ms.Seek(0, SeekOrigin.Begin); vmItem.ImportImgSeekLater(ms, false); vmItem.Opacity = img.Opacity; newWidgets.Add(vmItem); } img.IsSelected = false; this._pageEditorViewModel.ReplaceWidget(new List <WidgetViewModBase> { img }, newWidgets); } }