WPFInkCanvas绘制矩形和椭圆
前面说到了InkCanvas的基本操作,这里用一个实例来说明具体应用:绘制矩形和椭圆。
效果图
xaml代码
后台代码
using Microsoft.Win32; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace WPF_InkCanvas { /// /// ROI_InkCanvas.xaml 的交互逻辑 /// public partial class ROI_InkCanvas : Window { private ViewModel viewModel; private System.Windows.Point iniP; public ROI_InkCanvas() { InitializeComponent(); DrawingAttributes drawingAttributes = new DrawingAttributes { Color = Colors.Red, Width = 2, Height = 2, StylusTip = StylusTip.Rectangle, //FitToCurve = true, IsHighlighter = false, IgnorePressure = true, }; inkCanvasMeasure.DefaultDrawingAttributes = drawingAttributes; viewModel = new ViewModel { MeaInfo = "测试······", InkStrokes = new StrokeCollection(), }; DataCOntext= viewModel; } private void OpenFile_Click(object sender, RoutedEventArgs e) { OpenFileDialog openDialog = new OpenFileDialog { Filter = "Image Files (*.jpg)|*.jpg|Image Files (*.png)|*.png|Image Files (*.bmp)|*.bmp", Title = "Open Image File" }; if (openDialog.ShowDialog() == true) { BitmapImage image = new BitmapImage(); image.BeginInit(); image.UriSource = new Uri(openDialog.FileName, UriKind.RelativeOrAbsolute); image.EndInit(); imgMeasure.Source = image; } } private void DrawSquare_Click(object sender, RoutedEventArgs e) { if (btnSquare.IsChecked == true) { btnEllipse.IsChecked = false; } } private void DrawEllipse_Click(object sender, RoutedEventArgs e) { if (btnEllipse.IsChecked == true) { btnSquare.IsChecked = false; } } private List GenerateEclipseGeometry(System.Windows.Point st, System.Windows.Point ed) { double a = 0.5 * (ed.X - st.X); double b = 0.5 * (ed.Y - st.Y); List pointList = new List(); for (double r = 0; r meaInfo; set { meaInfo = value; OnPropertyChanged("MeaInfo"); } } private StrokeCollection inkStrokes; public StrokeCollection InkStrokes { get { return inkStrokes; } set { inkStrokes = value; OnPropertyChanged("InkStrokes"); } } } }
补充说明:为什么要注释掉画笔属性//FitToCurve = true,可以自行体会下不注释会是个什么效果;将InkCanvas的Strokes绑定到变量有好处,在别的窗口也能获取到这个对象的哦,因为它是在viewModel里的,传viewModel参数就可以了;椭圆绘制完成后设置InkCanvas的EdittingMode为Select就可以修改大小和形状。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。