海康 智能相机二开 绘制底图+测试工具应用框

测试型号: 智能相机 MV-SC3050XC-12M-WBN

项目下载:海康智能相机二开资源

官方的二开资源中,只显示了基础图片

在官方的基础上,增加了OK/NG的渲染,已经测试工具的区域边框显示,已经工具结果的显示

左上角 方案结果的显示 OK或NG

物料上的边框,一个是检测区域,一个是工具结果,OK-绿色边框 NG-红色边框

目录

官方流程

渲染实现

Json解析

获取数据

底图渲染


官方流程

文档中,介绍了二开的流程

1.先枚举到相机

2.登录相机,默认账号密码: Admin Abc1234

3.设置相机属性

4.开始运行

5.循环取图

6.运行结束

枚举相机和登录这里就不多说了。官方有详细介绍

渲染实现

主要说下工具边框的渲染

Json解析

1.在取图线程中,除了返回拍照的底图外,还有测试工具结果等数据返回,Json格式的数据

第一步就是取数据出来,解析成Json数据,此处使用的JObject来做处理。

cs 复制代码
  // 获取Json数据长度
  Array.Copy(arrChunkData, (int)(stFrameData.nChunkDataLen - 4), arrConvertEndian, 0, 4);
  nChunkJsonLen = BitConverter.ToInt32(arrConvertEndian.Reverse().ToArray(), 0);

  // 拷贝Json数据
  if (arrChunkJson.Length < nChunkJsonLen)
  {
      arrChunkJson = new byte[nChunkJsonLen];
  }
  Array.Copy(arrChunkData, (int)stFrameData.nChunkDataLen - 8/*4-8中间是ChunkID*/
      - nChunkJsonLen, arrChunkJson, 0, nChunkJsonLen);

  // 解析Json,更新图像方案数据
  var jsonObj = JObject.Parse(Encoding.UTF8.GetString(arrChunkJson, 0, nChunkJsonLen));

  // 方案运行结果,1-NG、0-OK,其他值直接显示
  strResult = jsonObj["ScDeviceSolutionRunningResult"].ToString();
  if ("1" == strResult)
  {
      strResult = "NG";
  }
  else if ("0" == strResult)
  {
      strResult = "OK";
  }

  var CurrentData = jsonObj["CurrentData"] as JArray;

解析好后,你就能得到一个Json的对象,可以ToString() 出来,拷贝到文本中查看

文档中有对Json字段的解析,但不是全部,自己对字段名称琢磨琢磨也基本能知道对应啥意思

cs 复制代码
{
	"ScDeviceSolutionRunningTime": 3245,
	"ScDeviceCurrentSolutionName": "识别有无项目",
	"ScDeviceSolutionTotalNumber": 2,
	"ScDeviceSolutionNgNumber": 1,
	"ScDeviceSolutionRunningResult": 1,
	"ScDeviceSolutionProcessTime": 239,
	"FlowId": 30,
	"CurrentData": [
		{
			"nStatus": 1,
			"nModuleID": 6,
			"ModuleName": "colorarea",
			"DisplayName": "colorarea",
			"fModuleTime": 51,
			"fAlgorithmTime": 21,
			"ModuleResultDrawEnable": 0,
			"pInfo": [
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_status",
					"strResultTypeName": "SINGLE_status",
					"strEnName": "status",
					"nParamType": 1,
					"pIntValue": [
						1
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_param_status",
					"strResultTypeName": "SINGLE_param_status",
					"strEnName": "param_status",
					"nParamType": 1,
					"pIntValue": [
						0
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_param_status_string",
					"strResultTypeName": "SINGLE_param_status_string",
					"strEnName": "param_status_string",
					"nParamType": 3,
					"pStringValue": [
						{
							"nLen": 2,
							"strValue": "NG"
						}
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX_det_box_cx",
					"strResultTypeName": "BOX_det_box_cx",
					"strEnName": "det_box_cx",
					"nParamType": 2,
					"pFloatValue": [
						1170.0799561
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX_det_box_cy",
					"strResultTypeName": "BOX_det_box_cy",
					"strEnName": "det_box_cy",
					"nParamType": 2,
					"pFloatValue": [
						1289.8068848
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX_det_box_w",
					"strResultTypeName": "BOX_det_box_w",
					"strEnName": "det_box_w",
					"nParamType": 2,
					"pFloatValue": [
						252.4647064
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX_det_box_h",
					"strResultTypeName": "BOX_det_box_h",
					"strEnName": "det_box_h",
					"nParamType": 2,
					"pFloatValue": [
						217.52771
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX_det_box_ang",
					"strResultTypeName": "BOX_det_box_ang",
					"strEnName": "det_box_ang",
					"nParamType": 2,
					"pFloatValue": [
						94.8396912
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "RAWIMAGE_bin_draw_raw_img",
					"strResultTypeName": "RAWIMAGE_bin_draw_raw_img",
					"strEnName": "bin_draw_raw_img",
					"nParamType": 3,
					"pStringValue": [
						{
							"nLen": 20,
							"strValue": "0x7ed3d92320_4980736"
						}
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_total_area",
					"strResultTypeName": "SINGLE_total_area",
					"strEnName": "total_area",
					"nParamType": 1,
					"pIntValue": [
						0
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_module_type",
					"strResultTypeName": "SINGLE_rst_module_type",
					"strEnName": "rst_module_type",
					"nParamType": 1,
					"pIntValue": [
						4
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_measure",
					"strResultTypeName": "SINGLE_rst_measure",
					"strEnName": "rst_measure",
					"nParamType": 2,
					"pFloatValue": [
						0
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_measure_limit_l",
					"strResultTypeName": "SINGLE_rst_measure_limit_l",
					"strEnName": "rst_measure_limit_l",
					"nParamType": 2,
					"pFloatValue": [
						100
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_measure_limit_h",
					"strResultTypeName": "SINGLE_rst_measure_limit_h",
					"strEnName": "rst_measure_limit_h",
					"nParamType": 2,
					"pFloatValue": [
						10000000
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_group_num",
					"strResultTypeName": "SINGLE_rst_group_num",
					"strEnName": "rst_group_num",
					"nParamType": 1,
					"pIntValue": [
						51
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_group_value_x",
					"strResultTypeName": "SINGLE_rst_group_value_x",
					"strEnName": "rst_group_value_x",
					"nParamType": 1,
					"pIntValue": [
						100,
						196176,
						392252,
						588329,
						784405,
						980482,
						1176558,
						1372635,
						1568711,
						1764788,
						1960864,
						2156941,
						2353017,
						2549094,
						2745170,
						2941247,
						3137323,
						3333400,
						3529476,
						3725553,
						3921629,
						4117705,
						4313782,
						4509859,
						4705935,
						4902011,
						5098088,
						5294164,
						5490241,
						5686317,
						5882394,
						6078470,
						6274547,
						6470623,
						6666700,
						6862776,
						7058853,
						7254929,
						7451006,
						7647082,
						7843159,
						8039235,
						8235311,
						8431388,
						8627465,
						8823541,
						9019618,
						9215694,
						9411770,
						9607847,
						10000000
					],
					"nValueNum": 51
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_group_value_y",
					"strResultTypeName": "SINGLE_rst_group_value_y",
					"strEnName": "rst_group_value_y",
					"nParamType": 1,
					"pIntValue": [
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0
					],
					"nValueNum": 51
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_show_text_x",
					"strResultTypeName": "SINGLE_show_text_x",
					"strEnName": "show_text_x",
					"nParamType": 2,
					"pFloatValue": [
						1170.0799561
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_show_text_y",
					"strResultTypeName": "SINGLE_show_text_y",
					"strEnName": "show_text_y",
					"nParamType": 2,
					"pFloatValue": [
						1289.8100586
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_show_text_ang",
					"strResultTypeName": "SINGLE_show_text_ang",
					"strEnName": "show_text_ang",
					"nParamType": 2,
					"pFloatValue": [
						94.8399963
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_ok_num",
					"strResultTypeName": "SINGLE_rst_ok_num",
					"strEnName": "rst_ok_num",
					"nParamType": 1,
					"pIntValue": [
						0
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_ng_num",
					"strResultTypeName": "SINGLE_rst_ng_num",
					"strEnName": "rst_ng_num",
					"nParamType": 1,
					"pIntValue": [
						1
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_string_cn",
					"strResultTypeName": "SINGLE_rst_string_cn",
					"strEnName": "rst_string_cn",
					"nParamType": 3,
					"pStringValue": [
						{
							"nLen": 27,
							"strValue": "OK范围:100.00-10000000.00"
						}
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_string_en",
					"strResultTypeName": "SINGLE_rst_string_en",
					"strEnName": "rst_string_en",
					"nParamType": 3,
					"pStringValue": [
						{
							"nLen": 27,
							"strValue": "OK Range:100.00-10000000.00"
						}
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_string_x",
					"strResultTypeName": "SINGLE_rst_string_x",
					"strEnName": "rst_string_x",
					"nParamType": 2,
					"pFloatValue": [
						0
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_string_y",
					"strResultTypeName": "SINGLE_rst_string_y",
					"strEnName": "rst_string_y",
					"nParamType": 2,
					"pFloatValue": [
						0
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_string_ang",
					"strResultTypeName": "SINGLE_rst_string_ang",
					"strEnName": "rst_string_ang",
					"nParamType": 2,
					"pFloatValue": [
						0
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_point_type",
					"strResultTypeName": "SINGLE_point_type",
					"strEnName": "point_type",
					"nParamType": 1,
					"pIntValue": [
						1
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "FIXTURE_algo_used_init_point_x",
					"strResultTypeName": "FIXTURE_algo_used_init_point_x",
					"strEnName": "algo_used_init_point_x",
					"nParamType": 2,
					"pFloatValue": []
				},
				{
					"nValueStatus": 1,
					"strParamName": "FIXTURE_algo_used_init_point_y",
					"strResultTypeName": "FIXTURE_algo_used_init_point_y",
					"strEnName": "algo_used_init_point_y",
					"nParamType": 2,
					"pFloatValue": []
				},
				{
					"nValueStatus": 1,
					"strParamName": "FIXTURE_algo_used_init_angle",
					"strResultTypeName": "FIXTURE_algo_used_init_angle",
					"strEnName": "algo_used_init_angle",
					"nParamType": 2,
					"pFloatValue": []
				},
				{
					"nValueStatus": 1,
					"strParamName": "FIXTURE_algo_used_run_point_x",
					"strResultTypeName": "FIXTURE_algo_used_run_point_x",
					"strEnName": "algo_used_run_point_x",
					"nParamType": 2,
					"pFloatValue": [
						1182.5545654
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "FIXTURE_algo_used_run_point_y",
					"strResultTypeName": "FIXTURE_algo_used_run_point_y",
					"strEnName": "algo_used_run_point_y",
					"nParamType": 2,
					"pFloatValue": [
						1018.5428467
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "FIXTURE_algo_used_run_angle",
					"strResultTypeName": "FIXTURE_algo_used_run_angle",
					"strEnName": "algo_used_run_angle",
					"nParamType": 2,
					"pFloatValue": [
						94.8182526
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_speckle_num",
					"strResultTypeName": "SINGLE_speckle_num",
					"strEnName": "speckle_num",
					"nParamType": 1,
					"pIntValue": [
						0
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "POINT_centroid_x",
					"strResultTypeName": "POINT_centroid_x",
					"strEnName": "centroid_x",
					"nParamType": 2,
					"pFloatValue": [],
					"nValueNum": 0
				},
				{
					"nValueStatus": 1,
					"strParamName": "POINT_centroid_y",
					"strResultTypeName": "POINT_centroid_y",
					"strEnName": "centroid_y",
					"nParamType": 2,
					"pFloatValue": [],
					"nValueNum": 0
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_area",
					"strResultTypeName": "SINGLE_area",
					"strEnName": "area",
					"nParamType": 2,
					"pFloatValue": [],
					"nValueNum": 0
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_perimeter",
					"strResultTypeName": "SINGLE_perimeter",
					"strEnName": "perimeter",
					"nParamType": 2,
					"pFloatValue": [],
					"nValueNum": 0
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX1_blob_box_cx",
					"strResultTypeName": "BOX1_blob_box_cx",
					"strEnName": "blob_box_cx",
					"nParamType": 2,
					"pFloatValue": [],
					"nValueNum": 0
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX1_blob_box_cy",
					"strResultTypeName": "BOX1_blob_box_cy",
					"strEnName": "blob_box_cy",
					"nParamType": 2,
					"pFloatValue": [],
					"nValueNum": 0
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX1_blob_box_w",
					"strResultTypeName": "BOX1_blob_box_w",
					"strEnName": "blob_box_w",
					"nParamType": 2,
					"pFloatValue": [],
					"nValueNum": 0
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX1_blob_box_h",
					"strResultTypeName": "BOX1_blob_box_h",
					"strEnName": "blob_box_h",
					"nParamType": 2,
					"pFloatValue": [],
					"nValueNum": 0
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX1_blob_box_ang",
					"strResultTypeName": "BOX1_blob_box_ang",
					"strEnName": "blob_box_ang",
					"nParamType": 2,
					"pFloatValue": [],
					"nValueNum": 0
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_blob_total_area",
					"strResultTypeName": "SINGLE_blob_total_area",
					"strEnName": "blob_total_area",
					"nParamType": 1,
					"pIntValue": [
						0
					],
					"nValueNum": 1
				}
			],
			"nResultNum": 45
		},
		{
			"nStatus": 1,
			"nModuleID": 7,
			"ModuleName": "colorarea",
			"DisplayName": "colorarea",
			"fModuleTime": 72,
			"fAlgorithmTime": 21,
			"ModuleResultDrawEnable": 0,
			"pInfo": [
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_status",
					"strResultTypeName": "SINGLE_status",
					"strEnName": "status",
					"nParamType": 1,
					"pIntValue": [
						1
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_param_status",
					"strResultTypeName": "SINGLE_param_status",
					"strEnName": "param_status",
					"nParamType": 1,
					"pIntValue": [
						1
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_param_status_string",
					"strResultTypeName": "SINGLE_param_status_string",
					"strEnName": "param_status_string",
					"nParamType": 3,
					"pStringValue": [
						{
							"nLen": 2,
							"strValue": "OK"
						}
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX_det_box_cx",
					"strResultTypeName": "BOX_det_box_cx",
					"strEnName": "det_box_cx",
					"nParamType": 2,
					"pFloatValue": [
						1267.1917725
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX_det_box_cy",
					"strResultTypeName": "BOX_det_box_cy",
					"strEnName": "det_box_cy",
					"nParamType": 2,
					"pFloatValue": [
						968.9454346
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX_det_box_w",
					"strResultTypeName": "BOX_det_box_w",
					"strEnName": "det_box_w",
					"nParamType": 2,
					"pFloatValue": [
						370.5904236
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX_det_box_h",
					"strResultTypeName": "BOX_det_box_h",
					"strEnName": "det_box_h",
					"nParamType": 2,
					"pFloatValue": [
						64.7955475
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX_det_box_ang",
					"strResultTypeName": "BOX_det_box_ang",
					"strEnName": "det_box_ang",
					"nParamType": 2,
					"pFloatValue": [
						94.8396912
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "RAWIMAGE_bin_draw_raw_img",
					"strResultTypeName": "RAWIMAGE_bin_draw_raw_img",
					"strEnName": "bin_draw_raw_img",
					"nParamType": 3,
					"pStringValue": [
						{
							"nLen": 20,
							"strValue": "0x7edb966a20_4980736"
						}
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_total_area",
					"strResultTypeName": "SINGLE_total_area",
					"strEnName": "total_area",
					"nParamType": 1,
					"pIntValue": [
						117
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_module_type",
					"strResultTypeName": "SINGLE_rst_module_type",
					"strEnName": "rst_module_type",
					"nParamType": 1,
					"pIntValue": [
						4
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_measure",
					"strResultTypeName": "SINGLE_rst_measure",
					"strEnName": "rst_measure",
					"nParamType": 2,
					"pFloatValue": [
						64
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_measure_limit_l",
					"strResultTypeName": "SINGLE_rst_measure_limit_l",
					"strEnName": "rst_measure_limit_l",
					"nParamType": 2,
					"pFloatValue": [
						10
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_measure_limit_h",
					"strResultTypeName": "SINGLE_rst_measure_limit_h",
					"strEnName": "rst_measure_limit_h",
					"nParamType": 2,
					"pFloatValue": [
						10000000
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_group_num",
					"strResultTypeName": "SINGLE_rst_group_num",
					"strEnName": "rst_group_num",
					"nParamType": 1,
					"pIntValue": [
						51
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_group_value_x",
					"strResultTypeName": "SINGLE_rst_group_value_x",
					"strEnName": "rst_group_value_x",
					"nParamType": 1,
					"pIntValue": [
						10,
						196088,
						392166,
						588244,
						784322,
						980401,
						1176479,
						1372557,
						1568635,
						1764714,
						1960792,
						2156870,
						2352948,
						2549027,
						2745105,
						2941183,
						3137261,
						3333340,
						3529418,
						3725496,
						3921574,
						4117653,
						4313731,
						4509809,
						4705887,
						4901966,
						5098044,
						5294122,
						5490200,
						5686279,
						5882357,
						6078435,
						6274513,
						6470591,
						6666670,
						6862748,
						7058826,
						7254904,
						7450983,
						7647061,
						7843139,
						8039217,
						8235296,
						8431374,
						8627452,
						8823531,
						9019609,
						9215687,
						9411765,
						9607843,
						10000000
					],
					"nValueNum": 51
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_group_value_y",
					"strResultTypeName": "SINGLE_rst_group_value_y",
					"strEnName": "rst_group_value_y",
					"nParamType": 1,
					"pIntValue": [
						1,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0,
						0
					],
					"nValueNum": 51
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_show_text_x",
					"strResultTypeName": "SINGLE_show_text_x",
					"strEnName": "show_text_x",
					"nParamType": 2,
					"pFloatValue": [
						1267.1899414
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_show_text_y",
					"strResultTypeName": "SINGLE_show_text_y",
					"strEnName": "show_text_y",
					"nParamType": 2,
					"pFloatValue": [
						968.9500122
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_show_text_ang",
					"strResultTypeName": "SINGLE_show_text_ang",
					"strEnName": "show_text_ang",
					"nParamType": 2,
					"pFloatValue": [
						94.8399963
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_ok_num",
					"strResultTypeName": "SINGLE_rst_ok_num",
					"strEnName": "rst_ok_num",
					"nParamType": 1,
					"pIntValue": [
						1
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_ng_num",
					"strResultTypeName": "SINGLE_rst_ng_num",
					"strEnName": "rst_ng_num",
					"nParamType": 1,
					"pIntValue": [
						0
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_string_cn",
					"strResultTypeName": "SINGLE_rst_string_cn",
					"strEnName": "rst_string_cn",
					"nParamType": 3,
					"pStringValue": [
						{
							"nLen": 26,
							"strValue": "OK范围:10.00-10000000.00"
						}
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_string_en",
					"strResultTypeName": "SINGLE_rst_string_en",
					"strEnName": "rst_string_en",
					"nParamType": 3,
					"pStringValue": [
						{
							"nLen": 26,
							"strValue": "OK Range:10.00-10000000.00"
						}
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_string_x",
					"strResultTypeName": "SINGLE_rst_string_x",
					"strEnName": "rst_string_x",
					"nParamType": 2,
					"pFloatValue": [
						0
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_string_y",
					"strResultTypeName": "SINGLE_rst_string_y",
					"strEnName": "rst_string_y",
					"nParamType": 2,
					"pFloatValue": [
						0
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_rst_string_ang",
					"strResultTypeName": "SINGLE_rst_string_ang",
					"strEnName": "rst_string_ang",
					"nParamType": 2,
					"pFloatValue": [
						0
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_point_type",
					"strResultTypeName": "SINGLE_point_type",
					"strEnName": "point_type",
					"nParamType": 1,
					"pIntValue": [
						1
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "FIXTURE_algo_used_init_point_x",
					"strResultTypeName": "FIXTURE_algo_used_init_point_x",
					"strEnName": "algo_used_init_point_x",
					"nParamType": 2,
					"pFloatValue": []
				},
				{
					"nValueStatus": 1,
					"strParamName": "FIXTURE_algo_used_init_point_y",
					"strResultTypeName": "FIXTURE_algo_used_init_point_y",
					"strEnName": "algo_used_init_point_y",
					"nParamType": 2,
					"pFloatValue": []
				},
				{
					"nValueStatus": 1,
					"strParamName": "FIXTURE_algo_used_init_angle",
					"strResultTypeName": "FIXTURE_algo_used_init_angle",
					"strEnName": "algo_used_init_angle",
					"nParamType": 2,
					"pFloatValue": []
				},
				{
					"nValueStatus": 1,
					"strParamName": "FIXTURE_algo_used_run_point_x",
					"strResultTypeName": "FIXTURE_algo_used_run_point_x",
					"strEnName": "algo_used_run_point_x",
					"nParamType": 2,
					"pFloatValue": [
						1182.5545654
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "FIXTURE_algo_used_run_point_y",
					"strResultTypeName": "FIXTURE_algo_used_run_point_y",
					"strEnName": "algo_used_run_point_y",
					"nParamType": 2,
					"pFloatValue": [
						1018.5428467
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "FIXTURE_algo_used_run_angle",
					"strResultTypeName": "FIXTURE_algo_used_run_angle",
					"strEnName": "algo_used_run_angle",
					"nParamType": 2,
					"pFloatValue": [
						94.8182526
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_speckle_num",
					"strResultTypeName": "SINGLE_speckle_num",
					"strEnName": "speckle_num",
					"nParamType": 1,
					"pIntValue": [
						10
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "POINT_centroid_x",
					"strResultTypeName": "POINT_centroid_x",
					"strEnName": "centroid_x",
					"nParamType": 2,
					"pFloatValue": [
						1244.8529053,
						1287.166626,
						1253,
						1281.5,
						1244.9000244,
						1285.3000488,
						1295,
						1245,
						1241,
						1280.5
					],
					"nValueNum": 10
				},
				{
					"nValueStatus": 1,
					"strParamName": "POINT_centroid_y",
					"strResultTypeName": "POINT_centroid_y",
					"strEnName": "centroid_y",
					"nParamType": 2,
					"pFloatValue": [
						1089.6176758,
						1053.277832,
						1015.5,
						1119,
						1057.3000488,
						1068.5,
						991,
						1101,
						1121,
						1143.25
					],
					"nValueNum": 10
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_area",
					"strResultTypeName": "SINGLE_area",
					"strEnName": "area",
					"nParamType": 2,
					"pFloatValue": [
						17.0000019,
						9.000001,
						6.0000005,
						6.0000005,
						5.0000005,
						5.0000005,
						4,
						4,
						4,
						4
					],
					"nValueNum": 10
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_perimeter",
					"strResultTypeName": "SINGLE_perimeter",
					"strEnName": "perimeter",
					"nParamType": 2,
					"pFloatValue": [
						21.8994942,
						12.2426405,
						6,
						10,
						5.4142137,
						8.8284273,
						4,
						4,
						4,
						4.8284273
					],
					"nValueNum": 10
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX1_blob_box_cx",
					"strResultTypeName": "BOX1_blob_box_cx",
					"strEnName": "blob_box_cx",
					"nParamType": 2,
					"pFloatValue": [
						1243.6500244,
						1286.4230957,
						1252.5,
						1281,
						1244.5,
						1284.8529053,
						1294.5,
						1244.5,
						1240.5,
						1280
					],
					"nValueNum": 10
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX1_blob_box_cy",
					"strResultTypeName": "BOX1_blob_box_cy",
					"strEnName": "blob_box_cy",
					"nParamType": 2,
					"pFloatValue": [
						1089.0500488,
						1052.8846436,
						1015,
						1118.5,
						1057,
						1068.0882568,
						990.5,
						1100.5,
						1120.5,
						1143
					],
					"nValueNum": 10
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX1_blob_box_w",
					"strResultTypeName": "BOX1_blob_box_w",
					"strEnName": "blob_box_w",
					"nParamType": 2,
					"pFloatValue": [
						9.2219219,
						5.7149515,
						3,
						6,
						3,
						5.123106,
						2,
						2,
						2,
						2.4142137
					],
					"nValueNum": 10
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX1_blob_box_h",
					"strResultTypeName": "BOX1_blob_box_h",
					"strEnName": "blob_box_h",
					"nParamType": 2,
					"pFloatValue": [
						3.8460503,
						2.9414511,
						2,
						1,
						2,
						1.7276068,
						2,
						2,
						2,
						2.4142137
					],
					"nValueNum": 10
				},
				{
					"nValueStatus": 1,
					"strParamName": "BOX1_blob_box_ang",
					"strResultTypeName": "BOX1_blob_box_ang",
					"strEnName": "blob_box_ang",
					"nParamType": 2,
					"pFloatValue": [
						18.434948,
						-33.6900673,
						90,
						90,
						90,
						-75.9637604,
						90,
						90,
						90,
						45
					],
					"nValueNum": 10
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_blob_total_area",
					"strResultTypeName": "SINGLE_blob_total_area",
					"strEnName": "blob_total_area",
					"nParamType": 1,
					"pIntValue": [
						64
					],
					"nValueNum": 1
				}
			],
			"nResultNum": 45
		},
		{
			"nStatus": 1,
			"nModuleID": 100,
			"ModuleName": "tcpstrans",
			"DisplayName": "tcpstrans",
			"fModuleTime": 0,
			"fAlgorithmTime": 0,
			"ModuleResultDrawEnable": 0,
			"pInfo": [
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_status",
					"strResultTypeName": "SINGLE_status",
					"strEnName": "status",
					"nParamType": 1,
					"pIntValue": [
						1
					],
					"nValueNum": 1
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_obj_string",
					"strResultTypeName": "SINGLE_obj_string",
					"strEnName": "obj_string",
					"nParamType": 3,
					"pStringValue": []
				},
				{
					"nValueStatus": 1,
					"strParamName": "SINGLE_param_status",
					"strResultTypeName": "SINGLE_param_status",
					"strEnName": "param_status",
					"nParamType": 1,
					"pIntValue": [
						1
					],
					"nValueNum": 1
				}
			],
			"nResultNum": 3
		}
	]
}

获取数据

数据都在CurrentData里边,渲染的数据都在 "ModuleName": "colorarea" 里边

底图渲染

包括矩形的中心,宽高,角度等

1.循环将colorarea取出,放到列表中

cs 复制代码
  var modules =new List<JToken>();

  foreach(var C_data in CurrentData)
  {
      if (C_data["ModuleName"].ToString() == "colorarea")
      {
          modules.Add(C_data);
      }
  }

2.将中心,宽高,角度已经工具测试结果取出

cs 复制代码
 List<Tuple<Rectangle, float>> rectangles = new List<Tuple<Rectangle, float>>();
 for (int i=0;i< modules.Count();i++)
 {
     var module =modules[i];
     var pInfo = module["pInfo"];
     var BOX_det_box_cx = pInfo.First(x => x["strParamName"].ToString() == "BOX_det_box_cx");
     var BOX_det_box_cy = pInfo.First(x => x["strParamName"].ToString() == "BOX_det_box_cy");
     var BOX_det_box_w = pInfo.First(x => x["strParamName"].ToString() == "BOX_det_box_w");
     var BOX_det_box_h = pInfo.First(x => x["strParamName"].ToString() == "BOX_det_box_h");
     var BOX_det_box_ang = pInfo.First(x => x["strParamName"].ToString() == "BOX_det_box_ang");

     var cx = Convert.ToSingle(BOX_det_box_cx["pFloatValue"][0]);
     var cy = Convert.ToSingle(BOX_det_box_cy["pFloatValue"][0]);
     var w = Convert.ToSingle(BOX_det_box_w["pFloatValue"][0]);
     var h = Convert.ToSingle(BOX_det_box_h["pFloatValue"][0]);
     var ang = Convert.ToSingle(BOX_det_box_ang["pFloatValue"][0]);

     Rectangle rectangle = new Rectangle();
     rectangle.X = (int)cx- (int)(w/2.0f);
     rectangle.Y = (int)cy- (int)(h/2.0f);
     rectangle.Width = (int)w;
     rectangle.Height = (int)h;

     
     rectangles.Add(new Tuple<Rectangle, float>(rectangle,ang));
 }

3.最后对基础图片进行渲染

cs 复制代码
       var baseData = arrImageData;
       byte[] modifiedData; // 用于接收处理后的数据
       using (MemoryStream ms = new MemoryStream(baseData))
       {
           using (System.Drawing.Image baseImage = System.Drawing.Image.FromStream(ms))
           {
               using (Graphics g = Graphics.FromImage(baseImage))
               {
                   // 设置高质量绘制模式
                   g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                   g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;

                   Pen pen = new Pen(Brushes.Green,2);
                   
                   foreach(var rectangle in rectangles)
                   {
                       var rect = rectangle.Item1;
                       PointF center = new PointF(rect.X + rect.Width / 2, rect.Y + rect.Height / 2);

                       // 创建一个新的变换矩阵
                       Matrix matrix = new Matrix();
                       // 设置变换:先平移至中心,然后旋转,最后平移回来
                       matrix.Translate(center.X, center.Y);
                       matrix.Rotate(rectangle.Item2);
                       matrix.Translate(-center.X, -center.Y);

                       // 将矩阵设置为 graphics 的当前变换
                       g.Transform = matrix;

                       // 绘制矩形
                       g.DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height);

                       // 重置变换(或者使用 g.ResetTransform())
                       g.Transform = new Matrix();
                   }

                   //绘制OK NG

                   // 定义矩形参数
                   int rectX = 0; // 左上角X坐标
                   int rectY = 0; // 左上角Y坐标
                   int rectWidth = 150;
                   int rectHeight = 100;

                   // 创建绿色画刷用于填充矩形
                   Brush TextPen = new SolidBrush(Color.Green);
                   if (strResult == "NG")
                   {
                       TextPen = new SolidBrush(Color.Red);
                   }

                   // 绘制矩形
                   g.FillRectangle(TextPen, 0,0, rectWidth, rectHeight);

                   // 设置文本显示
                   string displayText = strResult;
                   Font font = new Font("Arial", 20, FontStyle.Bold);
                   using (Brush textBrush = new SolidBrush(Color.White))
                   {
                       // 测量文本尺寸以计算居中位置
                       SizeF textSize = g.MeasureString(strResult, font);

                       // 计算文本在矩形中的居中位置
                       float textX = rectX + (rectWidth - textSize.Width) / 2;
                       float textY = rectY + (rectHeight - textSize.Height) / 2;

                       // 绘制文本
                       g.DrawString(strResult, font, textBrush, textX, textY);
                   }

               }

               // 关键步骤:将修改后的图像保存到新的 MemoryStream,以转换为 byte[]
               using (MemoryStream msOut = new MemoryStream())
               {
                   // 保存为PNG格式,避免压缩损失。也可根据需要选择Jpeg等格式
                   baseImage.Save(msOut, System.Drawing.Imaging.ImageFormat.Jpeg);
                   modifiedData = msOut.ToArray(); // 获取新字节数组
               }
           }
       }
       // 显示图像
       DisplayImage(ref stFrameData, ref modifiedData);

4.最后将渲染好的图片,返回到你想要显示的控件中

相关推荐
王家视频教程图书馆4 小时前
C# asp.net模板代码简单API请求
开发语言·c#·asp.net
大飞pkz5 小时前
【设计模式】备忘录模式
开发语言·设计模式·c#·备忘录模式
李宥小哥10 小时前
C#基础09-面向对象关键字
开发语言·c#
ajassi200011 小时前
开源 C# 快速开发(十四)进程--内存映射
开发语言·开源·c#
ajassi200012 小时前
开源 C# 快速开发(十五)进程--windows消息
windows·开源·c#
ajassi200012 小时前
开源 C# 快速开发(十三)进程--管道通讯
开发语言·开源·c#
Rotion_深18 小时前
C# 对Bitmap 的一些处理方法,裁剪,压缩,旋转等
图像处理·c#
秋月的私语18 小时前
如何快速将当前的c#工程发布成单文件
android·java·c#
切糕师学AI1 天前
在 C# 中,如何使 $““ 字符串支持换行
c#