亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? finderpattern.cs

?? 可以自動調用手機的攝像頭以當作二維碼掃描頭來使用
?? CS
?? 第 1 頁 / 共 2 頁
字號:
			else if (originPoint.X >= remoteLine.getP1().X & originPoint.X >= remoteLine.getP2().X)
				if (remoteLine.getP1().Y < remoteLine.getP2().Y)
					remotePoint = remoteLine.getP2();
				else
					remotePoint = remoteLine.getP1();
			else if (originPoint.Y >= remoteLine.getP1().Y & originPoint.Y >= remoteLine.getP2().Y)
				if (remoteLine.getP1().X < remoteLine.getP2().X)
					remotePoint = remoteLine.getP1();
				else
					remotePoint = remoteLine.getP2();
			//1st or 4th quadrant
			else if (remoteLine.getP1().Y < remoteLine.getP2().Y)
				remotePoint = remoteLine.getP1();
			else
				remotePoint = remoteLine.getP2();
			
			int r = new Line(originPoint, remotePoint).Length;
			//canvas.println(Integer.toString(((remotePoint.getX() - originPoint.getX()) << QRCodeImageReader.DECIMAL_POINT)));
			int[] angle = new int[2];
			angle[0] = ((remotePoint.Y - originPoint.Y) << QRCodeImageReader.DECIMAL_POINT) / r; //Sin
			angle[1] = ((remotePoint.X - originPoint.X) << (QRCodeImageReader.DECIMAL_POINT)) / r; //Cos
			
			return angle;
		}
		
		internal static Point[] getCenter(Line[] crossLines)
		{
			System.Collections.ArrayList centers = System.Collections.ArrayList.Synchronized(new System.Collections.ArrayList(10));
			for (int i = 0; i < crossLines.Length - 1; i++)
			{
				Line compareLine = crossLines[i];
				for (int j = i + 1; j < crossLines.Length; j++)
				{
					Line comparedLine = crossLines[j];
					if (Line.isCross(compareLine, comparedLine))
					{
						int x = 0;
						int y = 0;
						if (compareLine.Horizontal)
						{
							x = compareLine.Center.X;
							y = comparedLine.Center.Y;
						}
						else
						{
							x = comparedLine.Center.X;
							y = compareLine.Center.Y;
						}
						centers.Add(new Point(x, y));
					}
				}
			}
			
			Point[] foundPoints = new Point[centers.Count];
			
			for (int i = 0; i < foundPoints.Length; i++)
			{
				foundPoints[i] = (Point) centers[i];
				//Console.out.println(foundPoints[i]);
			}
			//Console.out.println(foundPoints.length);
			
			if (foundPoints.Length == 3)
			{
				canvas.drawPolygon(foundPoints, ThoughtWorks.QRCode.Codec.Util.Color_Fields.RED);
				return foundPoints;
			}
			else
				throw new FinderPatternNotFoundException("Invalid number of Finder Pattern detected");
		}
		
		//sort center of finder patterns as Left-Up: points[0], Right-Up: points[1], Left-Down: points[2].
		internal static Point[] sort(Point[] centers, int[] angle)
		{
			
			Point[] sortedCenters = new Point[3];
			
			int quadant = getURQuadant(angle);
			switch (quadant)
			{
				
				case 1: 
					sortedCenters[1] = getPointAtSide(centers, Point.RIGHT, Point.BOTTOM);
					sortedCenters[2] = getPointAtSide(centers, Point.BOTTOM, Point.LEFT);
					break;
				
				case 2: 
					sortedCenters[1] = getPointAtSide(centers, Point.BOTTOM, Point.LEFT);
					sortedCenters[2] = getPointAtSide(centers, Point.TOP, Point.LEFT);
					break;
				
				case 3: 
					sortedCenters[1] = getPointAtSide(centers, Point.LEFT, Point.TOP);
					sortedCenters[2] = getPointAtSide(centers, Point.RIGHT, Point.TOP);
					break;
				
				case 4: 
					sortedCenters[1] = getPointAtSide(centers, Point.TOP, Point.RIGHT);
					sortedCenters[2] = getPointAtSide(centers, Point.BOTTOM, Point.RIGHT);
					break;
				}
			
			//last of centers is Left-Up patterns one
			for (int i = 0; i < centers.Length; i++)
			{
				if (!centers[i].equals(sortedCenters[1]) && !centers[i].equals(sortedCenters[2]))
				{
					sortedCenters[0] = centers[i];
				}
			}
			
			return sortedCenters;
		}
		
		internal static int getURQuadant(int[] angle)
		{
			int sin = angle[0];
			int cos = angle[1];
			if (sin >= 0 && cos > 0)
				return 1;
			else if (sin > 0 && cos <= 0)
				return 2;
			else if (sin <= 0 && cos < 0)
				return 3;
			else if (sin < 0 && cos >= 0)
				return 4;
			
			return 0;
		}
		
		internal static Point getPointAtSide(Point[] points, int side1, int side2)
		{
			Point sidePoint = new Point();
			int x = ((side1 == Point.RIGHT || side2 == Point.RIGHT)?0:System.Int32.MaxValue);
			int y = ((side1 == Point.BOTTOM || side2 == Point.BOTTOM)?0:System.Int32.MaxValue);
			sidePoint = new Point(x, y);
			
			for (int i = 0; i < points.Length; i++)
			{
				switch (side1)
				{
					
					case Point.RIGHT: 
						if (sidePoint.X < points[i].X)
						{
							sidePoint = points[i];
						}
						else if (sidePoint.X == points[i].X)
						{
							if (side2 == Point.BOTTOM)
							{
								if (sidePoint.Y < points[i].Y)
								{
									sidePoint = points[i];
								}
							}
							else
							{
								if (sidePoint.Y > points[i].Y)
								{
									sidePoint = points[i];
								}
							}
						}
						break;
					
					case Point.BOTTOM: 
						if (sidePoint.Y < points[i].Y)
						{
							sidePoint = points[i];
						}
						else if (sidePoint.Y == points[i].Y)
						{
							if (side2 == Point.RIGHT)
							{
								if (sidePoint.X < points[i].X)
								{
									sidePoint = points[i];
								}
							}
							else
							{
								if (sidePoint.X > points[i].X)
								{
									sidePoint = points[i];
								}
							}
						}
						break;
					
					case Point.LEFT: 
						if (sidePoint.X > points[i].X)
						{
							sidePoint = points[i];
						}
						else if (sidePoint.X == points[i].X)
						{
							if (side2 == Point.BOTTOM)
							{
								if (sidePoint.Y < points[i].Y)
								{
									sidePoint = points[i];
								}
							}
							else
							{
								if (sidePoint.Y > points[i].Y)
								{
									sidePoint = points[i];
								}
							}
						}
						break;
					
					case Point.TOP: 
						if (sidePoint.Y > points[i].Y)
						{
							sidePoint = points[i];
						}
						else if (sidePoint.Y == points[i].Y)
						{
							if (side2 == Point.RIGHT)
							{
								if (sidePoint.X < points[i].X)
								{
									sidePoint = points[i];
								}
							}
							else
							{
								if (sidePoint.X > points[i].X)
								{
									sidePoint = points[i];
								}
							}
						}
						break;
					}
			}
			return sidePoint;
		}
		
		internal static int[] getWidth(bool[][] image, Point[] centers, int[] sincos)
		{
			
			int[] width = new int[3];
			
			for (int i = 0; i < 3; i++)
			{
				bool flag = false;
				int lx, rx;
				int y = centers[i].Y;
				for (lx = centers[i].X; lx > 0; lx--)
				{
					if (image[lx][y] == QRCodeImageReader.POINT_DARK && image[lx - 1][y] == QRCodeImageReader.POINT_LIGHT)
					{
						if (flag == false)
							flag = true;
						else
							break;
					}
				}
				flag = false;
				for (rx = centers[i].X; rx < image.Length; rx++)
				{
					if (image[rx][y] == QRCodeImageReader.POINT_DARK && image[rx + 1][y] == QRCodeImageReader.POINT_LIGHT)
					{
						if (flag == false)
							flag = true;
						else
							break;
					}
				}
				width[i] = (rx - lx + 1);
			}
			return width;
		}
		
		internal static int calcRoughVersion(Point[] center, int[] width)
		{
			int dp = QRCodeImageReader.DECIMAL_POINT;
			int lengthAdditionalLine = (new Line(center[UL], center[UR]).Length) << dp;
			int avarageWidth = ((width[UL] + width[UR]) << dp) / 14;
			int roughVersion = ((lengthAdditionalLine / avarageWidth) - 10) / 4;
			if (((lengthAdditionalLine / avarageWidth) - 10) % 4 >= 2)
			{
				roughVersion++;
			}
			
			return roughVersion;
		}
		
		internal static int calcExactVersion(Point[] centers, int[] angle, int[] moduleSize, bool[][] image)
		{
			bool[] versionInformation = new bool[18];
			Point[] points = new Point[18];
			Point target;
			Axis axis = new Axis(angle, moduleSize[UR]); //UR
			axis.Origin = centers[UR];
			
			for (int y = 0; y < 6; y++)
			{
				for (int x = 0; x < 3; x++)
				{
					target = axis.translate(x - 7, y - 3);
					versionInformation[x + y * 3] = image[target.X][target.Y];
					points[x + y * 3] = target;
				}
			}
			canvas.drawPoints(points, ThoughtWorks.QRCode.Codec.Util.Color_Fields.RED);
			
			int exactVersion = 0;
			try
			{
				exactVersion = checkVersionInfo(versionInformation);
			}
			catch (InvalidVersionInfoException e)
			{
				canvas.println("Version info error. now retry with other place one.");
				axis.Origin = centers[DL];
				axis.ModulePitch = moduleSize[DL]; //DL
				
				for (int x = 0; x < 6; x++)
				{
					for (int y = 0; y < 3; y++)
					{
						target = axis.translate(x - 3, y - 7);
						versionInformation[y + x * 3] = image[target.X][target.Y];
						points[x + y * 3] = target;
					}
				}
				canvas.drawPoints(points, ThoughtWorks.QRCode.Codec.Util.Color_Fields.RED);
				
				try
				{
					exactVersion = checkVersionInfo(versionInformation);
				}
				catch (VersionInformationException e2)
				{
					throw e2;
				}
			}
			return exactVersion;
		}
		
		internal static int checkVersionInfo(bool[] target)
		{
			// note that this method includes BCH 18-6 Error Correction
			// see page 67 on JIS-X-0510(2004) 
			int errorCount = 0, versionBase;
			for (versionBase = 0; versionBase < VersionInfoBit.Length; versionBase++)
			{
				errorCount = 0;
				for (int j = 0; j < 18; j++)
				{
					if (target[j] ^ (VersionInfoBit[versionBase] >> j) % 2 == 1)
						errorCount++;
				}
				if (errorCount <= 3)
					break;
			}
			if (errorCount <= 3)
				return 7 + versionBase;
			else
				throw new InvalidVersionInfoException("Too many errors in version information");
		}
		static FinderPattern()
		{
			canvas = QRCodeDecoder.Canvas;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
性做久久久久久免费观看欧美| 欧美成人三级在线| 亚洲免费观看高清完整| 99久久精品国产精品久久| 国产精品福利影院| 色婷婷激情综合| 首页国产欧美日韩丝袜| 欧美一区二区视频在线观看| 美腿丝袜在线亚洲一区| 久久综合九色综合97婷婷女人| 成人中文字幕在线| 亚洲精品视频在线观看免费| 欧美三级中文字幕| 国内国产精品久久| 国产精品久久国产精麻豆99网站 | 日韩av在线免费观看不卡| 91.com视频| 福利91精品一区二区三区| 亚洲三级在线播放| 91麻豆精品91久久久久久清纯| 国产一区二区在线观看免费| √…a在线天堂一区| 欧美高清一级片在线| 国产精品一区二区在线观看网站| 亚洲欧美激情小说另类| 欧美二区乱c少妇| 大白屁股一区二区视频| 亚洲资源中文字幕| 欧美成人video| 在线看不卡av| 国产大片一区二区| 午夜精品久久久久久久久久久| 久久久久免费观看| 欧美综合一区二区| 国产乱子轮精品视频| 亚洲一区二区中文在线| 国产日产欧美精品一区二区三区| 欧美日韩国产电影| av在线综合网| 国产精品一区二区三区网站| 亚洲成人在线免费| 日韩理论片中文av| 精品三级在线观看| 欧美日韩一二区| 99视频超级精品| 国产精品18久久久久| 日本vs亚洲vs韩国一区三区二区| 国产精品免费看片| 精品国产一区二区三区不卡| 欧美日韩精品一区视频| 91色婷婷久久久久合中文| 韩国视频一区二区| 日韩成人av影视| 午夜视频一区二区三区| 中文字幕一区在线| 久久色在线视频| 日韩一级免费观看| 欧美美女直播网站| 95精品视频在线| 成人综合在线观看| 大白屁股一区二区视频| 国产一区啦啦啦在线观看| 男人的天堂亚洲一区| 亚洲一区二三区| 亚洲精品福利视频网站| 日韩伦理电影网| 亚洲欧洲制服丝袜| 日韩美女久久久| 日韩一区有码在线| 国产精品久久一卡二卡| 国产精品美女久久久久aⅴ国产馆| 欧美大片一区二区| 精品乱人伦小说| 欧美精品一区二区三区蜜桃| 欧美一区二视频| 日韩色视频在线观看| 91精品国产91久久久久久一区二区| 欧美亚洲日本国产| 欧美日韩色综合| 日韩一区二区三区四区五区六区| 欧美精品xxxxbbbb| 日韩精品一区二区三区在线观看| 欧美电视剧免费全集观看| 日韩一区二区电影网| 精品区一区二区| 精品三级av在线| 欧美极品aⅴ影院| 亚洲欧美另类图片小说| 一区二区三区免费在线观看| 一区二区三区日韩在线观看| 亚洲一区二区三区美女| 日本欧美肥老太交大片| 九九精品视频在线看| 国产精品一区一区| 91在线视频播放地址| 在线视频亚洲一区| 日韩视频在线观看一区二区| 久久久高清一区二区三区| 中文字幕日本乱码精品影院| 亚洲无线码一区二区三区| 日韩—二三区免费观看av| 国产综合色精品一区二区三区| 国产成人精品1024| 91精品福利在线| 精品入口麻豆88视频| 中文字幕日韩一区| 日韩在线a电影| 国产精品一区免费视频| 色婷婷国产精品| 日韩久久久精品| 自拍偷拍国产亚洲| 热久久免费视频| 国产91精品一区二区麻豆网站| 日本韩国一区二区三区| 日韩一区二区中文字幕| 国产精品国产三级国产| 奇米影视在线99精品| av欧美精品.com| 日韩视频中午一区| 亚洲免费av观看| 国产呦精品一区二区三区网站| 91视频在线看| 久久久国产午夜精品| 亚洲一区二区在线免费观看视频| 男人的j进女人的j一区| 色88888久久久久久影院按摩| 亚洲精品一区二区三区精华液 | 国产精品污网站| 日韩黄色一级片| 91毛片在线观看| 精品嫩草影院久久| 亚洲影院理伦片| 成人国产亚洲欧美成人综合网| 欧美二区乱c少妇| 亚洲色图丝袜美腿| 国产精品一二三四五| 欧美精品久久99| 亚洲免费视频成人| 国产传媒日韩欧美成人| 日韩欧美国产午夜精品| 亚洲综合在线第一页| 成人h动漫精品一区二区| 欧美xxxxx牲另类人与| 午夜精品123| 在线精品视频一区二区三四| 国产欧美一区二区精品秋霞影院| 日韩av中文字幕一区二区| 欧美亚洲高清一区二区三区不卡| 国产日韩一级二级三级| 国产精品资源在线看| 日韩你懂的电影在线观看| 亚洲国产成人av| 欧洲亚洲精品在线| 亚洲精品自拍动漫在线| 99精品视频一区| 国产精品美女久久久久aⅴ| 国产成人av在线影院| 久久久无码精品亚洲日韩按摩| 久久99精品久久久久久动态图| 欧美一区午夜精品| 免费的成人av| 日韩一区二区三区在线观看| 蜜臀av性久久久久蜜臀av麻豆| 91精品黄色片免费大全| 日韩av二区在线播放| 欧美一区二区三区视频在线观看| 丝袜美腿高跟呻吟高潮一区| 精品视频资源站| 青青草原综合久久大伊人精品| 日韩欧美一二区| 国产一区欧美二区| 国产欧美日本一区视频| jiyouzz国产精品久久| 中文字幕亚洲区| 在线观看视频欧美| 偷拍亚洲欧洲综合| 日韩免费视频线观看| 久久99热这里只有精品| 久久综合久久鬼色| 成人avav在线| 亚洲第一福利一区| 日韩视频免费观看高清完整版在线观看| 蜜臀av性久久久久蜜臀av麻豆| 久久影院视频免费| 99国产精品久久久久久久久久久| 自拍视频在线观看一区二区| 欧美在线免费视屏| 久久99精品网久久| 国产精品女主播av| 欧洲av一区二区嗯嗯嗯啊| 日本女优在线视频一区二区| 精品国产123| 91亚洲男人天堂| 婷婷六月综合网| 欧美激情中文字幕| 欧美揉bbbbb揉bbbbb| 精品一区二区在线视频| 国产精品不卡一区二区三区| 欧美性淫爽ww久久久久无| 麻豆91精品91久久久的内涵|