测试型号: 智能相机 MV-SC3050XC-12M-WBN
项目下载:海康智能相机二开资源
官方的二开资源中,只显示了基础图片
在官方的基础上,增加了OK/NG的渲染,已经测试工具的区域边框显示,已经工具结果的显示
左上角 方案结果的显示 OK或NG
物料上的边框,一个是检测区域,一个是工具结果,OK-绿色边框 NG-红色边框

目录
官方流程
文档中,介绍了二开的流程
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.最后将渲染好的图片,返回到你想要显示的控件中
