WPF-ROI控件设计


ImageDrawingVisual.cs:是一个基于WPF的自定义可视化元素,用于高效显示图像

RectDrawingVisual.cs:一个用于绘制ROI(感兴趣区域)矩形框的可视化组件

IState.cs与DefaultRectState.cs:实现了一个用于图像ROI(Region of Interest,感兴趣区域)框选控件的状态管理类

HitHandleType.cs:HitHandleType枚举在ROI控件中扮演着"操作手柄类型标识符"的重要角色

ROIBox.cs:实现了一个 WPF 自定义控件 ROIBox(Region of Interest Box),用于在图像上绘制可交互的矩形区域(ROI),支持拖动、调整大小等操作


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

     Title="ROI自定义控件示例"
     Width="1200"
     Height="650"
     Background="#252525"
     WindowState="Maximized"
     mc:Ignorable="d"

ROIImage

public class ROIImage : INotifyPropertyChanged
{
    private ImageSource? _imageSource;
    public ImageSource ImageSource
    {
        get { return _imageSource; }
        set
        {
            _imageSource = value;
            RaisePropertyChanged();
        }
    }

    private Rect _roi = Rect.Empty;
    public Rect Roi
    {
        get { return _roi; }
        set
        {
            _roi = value;
            RaisePropertyChanged();
        }
    }

    #region - MVVM -
    public event PropertyChangedEventHandler PropertyChanged;

    public virtual void RaisePropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

    }
    #endregion
}

MainViewModel

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;

namespace WPFROI
{
    public class MainViewModel : INotifyPropertyChanged
    {


        public MainViewModel()
        {
            var files = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.png", SearchOption.AllDirectories);
            ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
            foreach (var file in files)
            {
                ROIImage rOIImage = new ROIImage();
                rOIImage.ImageSource = imageSourceConverter.ConvertFromString(file) as ImageSource;
                this.Collection.Add(rOIImage);
            }
            this.SelectROIImage = this.Collection?.FirstOrDefault();
        }




        private ObservableCollection<ROIImage> _collection = new ObservableCollection<ROIImage>();
        public ObservableCollection<ROIImage> Collection
        {
            get { return _collection; }
            set
            {
                _collection = value;
                RaisePropertyChanged();
            }
        }

        private ROIImage _selectROIImage;
        public ROIImage SelectROIImage
        {
            get { return _selectROIImage; }
            set
            {
                _selectROIImage = value;
                RaisePropertyChanged();
            }
        }


        #region - MVVM -
        public event PropertyChangedEventHandler PropertyChanged;
        public virtual void RaisePropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

        }
        #endregion



    }
}


ROIControl

在这里插入图片描述
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐