(二十四)绘图区域的布局和预览模块的后台实现

1.编写相机显示图像到前端xaml的实体类

CameraDisplayModel给CameraProcessModel做个搬运
订阅 CameraProcessModel的观察者,图片发生变化时,进行处理,把CameraProcessModel里面目前缓存区放置的图片写到CameraDisplayModel的双缓存区中
类似探测器
image
然后预览区显示图像,怎么拿到图片,通过构造函数引入,但是不能直接在WPF中显示,需要进行转换
image

2.将Bitmap写入到WriteableBitmap

2.1 创建BitmapSourceGDI类

BitmapSourceGDI提供了bitmap和非托管数组两种格式对WriteableBitmap的转换,WriteableBitmap是可以直接绑定到WPF中且用户可以直接访问操作图像
image
rectangle.Intersect 方法修改 rectangle,使其变为仅包含两个矩形共有部分的矩形。如果两个矩形不相交,rectangle 将会变成一个空的矩形,其宽度和高度都是0。
image

2.2 显示

在主线程观察cameraDisplayModel的缓冲区是否变化
image
触发方法
image
前台页面绑定
image

3.相机预览图像的缩放与平移操作

与image模块的实现相同
image

4.创建绘图工具模块

  • 用户控件库
  • 下载reactiveui,fody,wpf,prism.unity.mahapp.metro
  • 生成事件命令,并添加引用
  • 模块配置类
  • 建包views,viewmodels
  • 创建view和vm并绑定

主模块添加加载依赖
image
把页面注册
image
之前的区域在PrimaryView处
image

5.设计绘图工具界面及CheckBox样式开发

image
视觉树:
image

6.设计文字输入界面

image

image
效果
image

7.设计画笔的粗细按钮和颜色按钮

画笔粗细
image
颜色选择
image

Separator控件用于在用户界面中创建一个视觉分隔线,以区分不同的UI元素或部分。通过在XAML中使用此标签,可以在布局中加入分隔线,从而改善应用程序的视觉结构和用户体验。

效果:
image

8.编写画笔粗细枚举类型并绑定到RadioButton按钮

画笔粗细
image
image

画笔颜色;
image
image

9.编写鼠标操作类型及业务接口绑定到CheckBox

在core的枚举包

/// <summary>
/// 鼠标操作类型
/// </summary>
public  enum MouseOperationType
{
    /// <summary>
    /// 矩形
    /// </summary>
    DrawRectangle,
    /// <summary>
    /// 椭圆
    /// </summary>
    DrawEllipse,
    /// <summary>
    /// 箭头
    /// </summary>
    DrawArrow,
    /// <summary>
    /// 画笔
    /// </summary>
    DrawPen,
    /// <summary>
    /// 输入文字
    /// </summary>
    DrawText,
    /// <summary>
    /// 框选
    /// </summary>
    DrawSelect,
}

创建一个画图模型:
image
继承
image
实现
image
DrawToolViewModel构造函数引入两个模型,前台页面绑定到checkbox
IsChecked="{Binding MouseOperationProvider.MouseOperationType, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static enums:MouseOperationType.DrawRectangle}}"
单选框的画笔粗细和颜色同样可以用上述绑定

10.编写椭圆、矩形和箭头的绘制实体

绘制基类DrawElementBase
image

编写椭圆

image

编写矩形

image

编写箭头

image

11.编写线段和文字的绘制实体

画线段

image

写文字

image

posted @ 2024-02-28 14:07  huihui不会写代码  阅读(37)  评论(0)    收藏  举报