From 30f434d78b58e3a4198cf5ba5a9e5a0ce1cd5292 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期四, 07 七月 2022 14:32:36 +0800
Subject: [PATCH] 'bug修复'

---
 ConsoleApplication/kernel.cl |  227 +++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 172 insertions(+), 55 deletions(-)

diff --git a/ConsoleApplication/kernel.cl b/ConsoleApplication/kernel.cl
index 9ab5447..6fe90db 100644
--- a/ConsoleApplication/kernel.cl
+++ b/ConsoleApplication/kernel.cl
@@ -61,53 +61,56 @@
 	int endx = pos_in[startP + 2];
 	int endy = pos_in[startP + 3];
 
-	int startNy = -1;
-	int endNy = -1;
-	//去除上下的白边
-	int y = 0;
-	for (y = starty;y <= endy;y++) {
-		bool empty = 1;
-		for (int x = startx;x <= endx;x++)
-		{
-			int p = get_one_level_position(width, x, y);
-			unsigned char value = get_binary_value(img_in[p]);
-			//有数据
-			if (value > 0) {
-				empty = 0;
+	if (startx > 0)
+	{
+		int startNy = -1;
+		int endNy = -1;
+		//去除上下的白边
+		int y = 0;
+		for (y = starty;y <= endy;y++) {
+			bool empty = 1;
+			for (int x = startx;x <= endx;x++)
+			{
+				int p = get_one_level_position(width, x, y);
+				unsigned char value = get_binary_value(img_in[p]);
+				//有数据
+				if (value > 0) {
+					empty = 0;
+					break;
+				}
+			}
+			if (!empty) {
+				startNy = y;
 				break;
 			}
 		}
-		if (!empty) {
-			startNy = y;
-			break;
-		}
-	}
 
-	for (y = endy;y >= starty;y--) {
-		bool empty = 1;
-		for (int x = startx;x <= endx;x++)
-		{
-			int p = get_one_level_position(width, x, y);
-			unsigned char value = get_binary_value(img_in[p]);
-			//有数据
-			if (value > 0) {
-				empty = 0;
+		for (y = endy;y >= starty;y--) {
+			bool empty = 1;
+			for (int x = startx;x <= endx;x++)
+			{
+				int p = get_one_level_position(width, x, y);
+				unsigned char value = get_binary_value(img_in[p]);
+				//有数据
+				if (value > 0) {
+					empty = 0;
+					break;
+				}
+			}
+			if (!empty) {
+				endNy = y;
 				break;
 			}
 		}
-		if (!empty) {
-			endNy = y;
-			break;
-		}
+		starty = startNy;
+		endy = endNy;
 	}
-
-	starty = startNy;
-	endy = endNy;
 	int cols = endx - startx + 1;
 	int rows = endy - starty + 1;
 
 	int nps[12];
-	if (index % 3 == 0) {
+	if (index % 4 == 0) {
+		//时间
 		int s = cols / 2;
 		int i;
 		//往前查找冒号
@@ -183,12 +186,68 @@
 		nps[11] = endy;
 
 	}
+	else if (index % 4 == 1) {
+		if (startx > 0 && endx > 0) {
+			//分隔s/m/h
+			int emptyX = -1;
+			for (int x = endx;x >= startx;x--) {
 
-	else if (index % 3 == 1) {
+				bool empty = 1;
+				for (int y = starty;y <= endy;y++)
+				{
+					int p = get_one_level_position(width, x, y);
+					unsigned char value = get_binary_value(img_in[p]);
+					//有数据
+					if (value > 0) {
+						empty = 0;
+						break;
+					}
+				}
+				if (empty) {
+					emptyX = x;
+					break;
+				}
+			}
 
+			if (emptyX > 0) {
+				nps[0] = startx;
+				nps[1] = starty;
+				nps[2] = emptyX - 1;
+				nps[3] = endy;
+			}
+			else {
+				//printf("撤单时间未解析到分隔符:%d", index);
+				nps[0] = -1;
+				nps[1] = -1;
+				nps[2] = -1;
+				nps[3] = -1;
+			}
+		}
+		else {
+			nps[0] = -1;
+			nps[1] = -1;
+			nps[2] = -1;
+			nps[3] = -1;
+		}
+
+		nps[4] = -1;
+		nps[5] = -1;
+		nps[6] = -1;
+		nps[7] = -1;
+
+		nps[8] = -1;
+		nps[9] = -1;
+		nps[10] = -1;
+		nps[11] = -1;
+
+
+	}
+
+	else if (index % 4 == 2) {
+		//股价
 
 		//printf("startx:%d starty:%d endx:%d endy:%d\n",startx,starty,endx,endy);
-		//股价
+
 			//往前查找小数点
 		int m_s = -1, m_e = -1;
 		uchar temp[6];
@@ -249,7 +308,7 @@
 
 	}
 
-	else if (index % 3 == 2) {
+	else if (index % 4 == 3) {
 		//手数
 		nps[0] = startx;
 		nps[1] = starty;
@@ -329,9 +388,12 @@
 	}
 
 	int maxNumberCount = 6;
-	if (index % 3 == 2)
+	if (index % 4 == 3)
 	{
 		maxNumberCount = 5;
+	}
+	else if (index % 4 == 1) {
+		maxNumberCount = 2;
 	}
 
 	int zeroCount = maxNumberCount - numCount;
@@ -383,18 +445,21 @@
 		}
 
 		int rowData = num_height * num_width * 10 * num_count;
-		int rowIndex = index / 3;
+		int rowIndex = index / 4;
 		int index_0 = rowData * rowIndex;
 		//设置坐标值
 		int index_2 = 0;
-		if (index % 3 == 0) {
+		if (index % 4 == 0) {
 			index_2 += num_width * 10 * i;
 		}
-		else if (index % 3 == 1) {
+		else if (index % 4 == 1) {
 			index_2 += (num_width * 10) * (6 + i);
 		}
+		else if (index % 4 == 2) {
+			index_2 += (num_width * 10) * (6 + 2 + i);
+		}
 		else {
-			index_2 += (num_width * 10) * (6 + 6 + i);
+			index_2 += (num_width * 10) * (6 + 2 + 6 + i);
 		}
 
 		for (int re = 0;re < 10;re++) {
@@ -538,14 +603,14 @@
 			emptyColIndex2 = 3;
 		}
 		else if (rowDataSize == 6) {
-			//第二个元素开始坐标减去第一个元素结束坐标小于20
-			if (rowDataIndexs[4 * 1 + 0] - rowDataIndexs[4 * 0 + 2] < 20) {
-				//有买撤,需要补涨停
-				emptyColIndex1 = 3;
+			//第3个元素的宽度小于第2个元素
+			if ((rowDataIndexs[4 * 2 + 2] - rowDataIndexs[4 * 2 + 0]) < (rowDataIndexs[4 * 1 + 2] - rowDataIndexs[4 * 1 + 0])) {
+				//有涨停,补买撤
+				emptyColIndex1 = 1;
 			}
 			else {
 				//无买撤
-				emptyColIndex1 = 1;
+				emptyColIndex1 = 3;
 			}
 		}
 		else {
@@ -620,9 +685,61 @@
 	__global int* result) {
 
 	int index = get_global_id(0);
-	int row = index / 2;
+	int row = index / 3;
 	int baseIndex = row * 4 * 7;
-	if (index % 2 == 0) {
+	if (index % 3 == 0) {
+		//撤销单位识别
+		int startx = baseIndex + 1 * 4;
+		int starty = startx + 1;
+		int endx = startx + 2;
+		int endy = startx + 3;
+		if (rowIndexs[startx] > 0) {
+			int emptyX = -1;
+			for (int x = rowIndexs[endx];x >= rowIndexs[startx];x--)
+			{
+				bool empty = true;
+				for (int y = rowIndexs[starty];y <= rowIndexs[endy];y++) {
+					unsigned char value = imgs[get_one_level_position(width, x, y)];
+					if (get_binary_value(value)) {
+						empty = 0;
+						break;
+					}
+				}
+				if (empty) {
+					emptyX = x;
+					break;
+				}
+			}
+			if (emptyX > 0) {
+				//计算值
+				unsigned char count = 0;
+				for (int x = emptyX + 1;x <= rowIndexs[endx];x++)
+				{
+					for (int y = rowIndexs[starty];y <= rowIndexs[endy];y++) {
+						unsigned char value = imgs[get_one_level_position(width, x, y)];
+						count += get_binary_value(value) ? 1 : 0;
+					}
+				}
+				//printf("row:%d count:%d\n", row, count);
+				if (abs(count - 12) <= 1) {//S
+					result[row * 3] = 0;
+				}
+				else if (abs(count - 16) <= 1) {//M
+					result[row * 3] = 1;
+				}
+				else if (abs(count - 19) <= 1) {//H
+					result[row * 3] = 2;
+				}
+				
+			}
+		}
+		else {
+			//默认s
+			result[row * 3] = 0;
+			//printf("row:%d count:0\n", row);
+		}
+	}
+	else if (index % 3 == 1) {
 		//涨跌停价
 		//获取数据坐标
 		int startx = baseIndex + 3 * 4;
@@ -630,7 +747,7 @@
 		int endx = startx + 2;
 		int endy = startx + 3;
 		if (rowIndexs[startx] <= 0 && rowIndexs[starty] <= 0 && rowIndexs[endx] <= 0 && rowIndexs[endy] <= 0) {
-			result[row * 2] = 0;
+			result[row * 3 + 1] = 0;
 		}
 		else {
 			startx = rowIndexs[startx];
@@ -694,11 +811,11 @@
 
 			if (topValue > bottomValue) {
 				//涨停
-				result[row * 2] = 1;
+				result[row * 3 + 1] = 1;
 			}
 			else {
 				//跌停
-				result[row * 2] = 2;
+				result[row * 3 + 1] = 2;
 			}
 		}
 	}
@@ -721,7 +838,7 @@
 		{
 			for (int c = startx;c <= endx;c++) {
 				unsigned char val = imgs[get_one_level_position(width, c, r)];
-				pixelCount+=get_binary_value(val);
+				pixelCount += get_binary_value(val);
 			}
 		}
 
@@ -743,7 +860,7 @@
 			//卖撤
 			value = 3;
 		}
-		result[row * 2 + 1] = value;
+		result[row * 3 + 2] = value;
 	}
 
 }
\ No newline at end of file

--
Gitblit v1.8.0