【WPF学习手记】OxyPlot制作ImageCanvas

自定义控件系列,基于OxyPlot开发。

ImageCanvas控件

    功能包括:二维数组图像显示;伪彩(十七种标准Colormap,支持自定义Colormap);支持绘制直线、折线、角度、椭圆(包括圆)、矩阵(包括正方形)、多边形即ROI、文本标注、箭头标注、标题;自动计算长度、角度、面积(像素点个数、总和、平均值);保存、加载绘制对象;保存 ROI数据模板;缩放、平移;旋转、翻转。

    更多功能更新中:图像处理部分。

 部分测试代码

private void Button_Click(object sender, RoutedEventArgs e)
{
	if ((sender as Button).Name.ToString() == "btnImageData")
	{
		var singleData = new double[row];
		for (int x = 0; x < row; ++x)
		{
			singleData[x] = Math.Exp((-1.0 / 2.0) * Math.Pow((x - 40.0) / 10, 2.0));
		}
		var data = new double[row, col];
		for (int i = 0; i < row; i++)
		{
			for (int j = 0; j < col; j++)
			{
				data[i, j] = singleData[i] * singleData[(j + 20) % col];
			}
		}
		File.WriteAllLines("data.txt", SetMatToString(data));
		myImageCanvas1.SetObjData(data);
		myImageCanvas2.SetObjData(data);
		myImageCanvas2.SetObjSize(col * 3, row * 3);
		myImageCanvas1.SetPixelSize(2, 1);
		myImageCanvas2.SetPixelSize(1, 1);

		// 操作列表
		operationFlag = myImageCanvas1.GetObjDrawingFlag();
		operationList.Items.Clear();
		for (int i = 0; i < operationFlag.Length; i++)
		{
			operationList.Items.Add(operationFlag[i]);
		}
		operationList.SelectedIndex = 1;

		// 标题信息
		infoList.Items.Clear();
		infoList.Items.Add("LeftTopInfo");
		infoList.Items.Add("RightTopInfo");
		infoList.Items.Add("LeftBottomInfo");
		infoList.Items.Add("RightBottomInfo");
		infoList.SelectedIndex = 0;

		// 颜色列表
		colorbarFlag = myImageCanvas1.GetObjColorbarFlag();
		colorList.Items.Clear();
		for (int i = 0; i < colorbarFlag.Length; i++)
		{
			colorList.Items.Add(colorbarFlag[i]);
		}
		colorList.SelectedIndex = -1;

		// 订阅事件
		myImageCanvas1.UpdateEvent += UpdateTransferFunction;
		myImageCanvas2.UpdateEvent += UpdateTransferFunction;
	}
	else if ((sender as Button).Name.ToString() == "btnZoom")
	{
		isZoom = !isZoom;
		myImageCanvas1.SetObjZoomEnabled(isZoom);
		myImageCanvas2.SetObjZoomEnabled(isZoom);
	}
	else if ((sender as Button).Name.ToString() == "btnSize")
	{
		myImageCanvas2.SetObjSize(col * 2, row * 2);
		double ratio = Math.Min(myImageCanvas2.ActualWidth / col, myImageCanvas2.ActualHeight / row);
		myImageCanvas2.SetObjRightTopText("Zoom: " + (int)(ratio * myImageCanvas2.GetObjZoomRatio()));
	}
	else if ((sender as Button).Name.ToString() == "btnClear")
	{
		myImageCanvas1.SetObjClear();
		myImageCanvas2.SetObjClear();
	}
	else if ((sender as Button).Name.ToString() == "btnDefault")
	{
		myImageCanvas1.SetObjDefault();
		myImageCanvas2.SetObjDefault();
	}
	else if ((sender as Button).Name.ToString() == "btnSave")
	{
		myImageCanvas2.SaveObjDrawings("test.draw");
	}
	else if ((sender as Button).Name.ToString() == "btnLoad")
	{
		myImageCanvas2.LoadObjDrawings("test.draw");
	}
	else if ((sender as Button).Name.ToString() == "btnSaveROI")
	{
		myImageCanvas2.SaveObjROIModel("test.roi");
	}
	else if ((sender as Button).Name.ToString() == "btnROIArea")
	{
		List<double> areas = myImageCanvas2.GetObjROIArea();
		if (areas.Count >= 2)
		{
			MessageBox.Show(areas[0].ToString() + "\n" + areas[1]);
		}
	}
	else if ((sender as Button).Name.ToString() == "btnMirror")
	{
		myImageCanvas2.SetObjMirror("Horizontal");
	}
	else if ((sender as Button).Name.ToString() == "btnMirrorVertical")
	{
		myImageCanvas2.SetObjMirror("Vertical");
	}
	else if ((sender as Button).Name.ToString() == "btnRotate")
	{
		myImageCanvas2.SetObjRotate();
	}
	else if ((sender as Button).Name.ToString() == "btnClearTransform")
	{

		myImageCanvas2.SetObjTransformClear();
	}
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值