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

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

?? alignmentpattern.cs

?? 可以自動調用手機的攝像頭以當作二維碼掃描頭來使用
?? CS
字號:
using System;
using QRCodeDecoder = ThoughtWorks.QRCode.Codec.QRCodeDecoder;
using ThoughtWorks.QRCode.Codec.Reader;
using AlignmentPatternNotFoundException = ThoughtWorks.QRCode.ExceptionHandler.AlignmentPatternNotFoundException;
using InvalidVersionException = ThoughtWorks.QRCode.ExceptionHandler.InvalidVersionException;
using ThoughtWorks.QRCode.Geom;
using ThoughtWorks.QRCode.Codec.Util;

namespace ThoughtWorks.QRCode.Codec.Reader.Pattern
{
	
	public class AlignmentPattern
	{
        internal const int RIGHT = 1;
        internal const int BOTTOM = 2;
        internal const int LEFT = 3;
        internal const int TOP = 4;

        internal static DebugCanvas canvas;
        internal Point[][] center;
        internal int patternDistance;

        virtual public int LogicalDistance
		{
			get
			{
				return patternDistance;
			}
			
		}
		
		internal AlignmentPattern(Point[][] center, int patternDistance)
		{
			this.center = center;
			this.patternDistance = patternDistance;
		}
		
		public static AlignmentPattern findAlignmentPattern(bool[][] image, FinderPattern finderPattern)
		{			
			Point[][] logicalCenters = getLogicalCenter(finderPattern);
			int logicalDistance = logicalCenters[1][0].X - logicalCenters[0][0].X;
			//With it converts in order to handle in the same way
			Point[][] centers = null;
			centers = getCenter(image, finderPattern, logicalCenters);
			return new AlignmentPattern(centers, logicalDistance);
		}
		
		public virtual Point[][] getCenter()
		{
			return center;
		}
		
		// for only trancparency access in version 1, which has no alignement pattern
		public virtual void  setCenter(Point[][] center)
		{
			this.center = center;
		}
		
		internal static Point[][] getCenter(bool[][] image, FinderPattern finderPattern, Point[][] logicalCenters)
		{
			int moduleSize = finderPattern.getModuleSize();
			
			Axis axis = new Axis(finderPattern.getAngle(), moduleSize);
			int sqrtCenters = logicalCenters.Length;
			Point[][] centers = new Point[sqrtCenters][];
			for (int i = 0; i < sqrtCenters; i++)
			{
				centers[i] = new Point[sqrtCenters];
			}
			
			axis.Origin = finderPattern.getCenter(FinderPattern.UL);
			centers[0][0] = axis.translate(3, 3);
			canvas.drawCross(centers[0][0], ThoughtWorks.QRCode.Codec.Util.Color_Fields.BLUE);
			
			axis.Origin = finderPattern.getCenter(FinderPattern.UR);
			centers[sqrtCenters - 1][0] = axis.translate(- 3, 3);
			canvas.drawCross(centers[sqrtCenters - 1][0], ThoughtWorks.QRCode.Codec.Util.Color_Fields.BLUE);
			
			axis.Origin = finderPattern.getCenter(FinderPattern.DL);
			centers[0][sqrtCenters - 1] = axis.translate(3, - 3);
			canvas.drawCross(centers[0][sqrtCenters - 1], ThoughtWorks.QRCode.Codec.Util.Color_Fields.BLUE);
			
			Point tmpPoint = centers[0][0];
			
			for (int y = 0; y < sqrtCenters; y++)
			{
				for (int x = 0; x < sqrtCenters; x++)
				{
					if ((x == 0 && y == 0) || (x == 0 && y == sqrtCenters - 1) || (x == sqrtCenters - 1 && y == 0))
					{
						//					canvas.drawCross(centers[x][y], java.awt.Color.MAGENTA);
						continue;
					}
					Point target = null;
					if (y == 0)
					{
						if (x > 0 && x < sqrtCenters - 1)
						{
							target = axis.translate(centers[x - 1][y], logicalCenters[x][y].X - logicalCenters[x - 1][y].X, 0);
						}
						centers[x][y] = new Point(target.X, target.Y);
						canvas.drawCross(centers[x][y], ThoughtWorks.QRCode.Codec.Util.Color_Fields.RED);
					}
					else if (x == 0)
					{
						if (y > 0 && y < sqrtCenters - 1)
						{
							target = axis.translate(centers[x][y - 1], 0, logicalCenters[x][y].Y - logicalCenters[x][y - 1].Y);
						}
						centers[x][y] = new Point(target.X, target.Y);
						canvas.drawCross(centers[x][y], ThoughtWorks.QRCode.Codec.Util.Color_Fields.RED);
					}
					else
					{
						Point t1 = axis.translate(centers[x - 1][y], logicalCenters[x][y].X - logicalCenters[x - 1][y].X, 0);
						Point t2 = axis.translate(centers[x][y - 1], 0, logicalCenters[x][y].Y - logicalCenters[x][y - 1].Y);
						centers[x][y] = new Point((t1.X + t2.X) / 2, (t1.Y + t2.Y) / 2 + 1);
					}
					if (finderPattern.Version > 1)
					{
						Point precisionCenter = getPrecisionCenter(image, centers[x][y]);
						
						if (centers[x][y].distanceOf(precisionCenter) < 6)
						{
							canvas.drawCross(centers[x][y], ThoughtWorks.QRCode.Codec.Util.Color_Fields.RED);
							int dx = precisionCenter.X - centers[x][y].X;
							int dy = precisionCenter.Y - centers[x][y].Y;
							canvas.println("Adjust AP(" + x + "," + y + ") to d(" + dx + "," + dy + ")");
							
							centers[x][y] = precisionCenter;
						}
					}
					canvas.drawCross(centers[x][y], ThoughtWorks.QRCode.Codec.Util.Color_Fields.BLUE);
					canvas.drawLine(new Line(tmpPoint, centers[x][y]), ThoughtWorks.QRCode.Codec.Util.Color_Fields.LIGHTBLUE);
					tmpPoint = centers[x][y];					
				}
			}
			return centers;
		}
		
		
		
		internal static Point getPrecisionCenter(bool[][] image, Point targetPoint)
		{
			// find nearest dark point and update it as new rough center point 
			// when original rough center points light point 
			int tx = targetPoint.X, ty = targetPoint.Y;
			if ((tx < 0 || ty < 0) || (tx > image.Length - 1 || ty > image[0].Length - 1))
				throw new AlignmentPatternNotFoundException("Alignment Pattern finder exceeded out of image");
			
			if (image[targetPoint.X][targetPoint.Y] == QRCodeImageReader.POINT_LIGHT)
			{
				int scope = 0;
				bool found = false;
				while (!found)
				{
					scope++;
					for (int dy = scope; dy > - scope; dy--)
					{
						for (int dx = scope; dx > - scope; dx--)
						{
							int x = targetPoint.X + dx;
							int y = targetPoint.Y + dy;
							if ((x < 0 || y < 0) || (x > image.Length - 1 || y > image[0].Length - 1))
								throw new AlignmentPatternNotFoundException("Alignment Pattern finder exceeded out of image");
							if (image[x][y] == QRCodeImageReader.POINT_DARK)
							{
								targetPoint = new Point(targetPoint.X + dx, targetPoint.Y + dy);
								found = true;
							}
						}
					}
				}
			}
			int x2, lx, rx, y2, uy, dy2;
			x2 = lx = rx = targetPoint.X;
			y2 = uy = dy2 = targetPoint.Y;
			
			// GuoQing Hu's FIX
			while (lx >= 1 && !targetPointOnTheCorner(image, lx, y2, lx - 1, y2))
				lx--;
			while (rx < image.Length - 1 && !targetPointOnTheCorner(image, rx, y2, rx + 1, y2))
				rx++;
			while (uy >= 1 && !targetPointOnTheCorner(image, x2, uy, x2, uy - 1))
				uy--;
			while (dy2 < image[0].Length - 1 && !targetPointOnTheCorner(image, x2, dy2, x2, dy2 + 1))
				dy2++;
			
			return new Point((lx + rx + 1) / 2, (uy + dy2 + 1) / 2);
		}
		
		internal static bool targetPointOnTheCorner(bool[][] image, int x, int y, int nx, int ny)
		{
			if (x < 0 || y < 0 || nx < 0 || ny < 0 || x > image.Length || y > image[0].Length || nx > image.Length || ny > image[0].Length)
			{
				// Console.out.println("Overflow: x="+x+", y="+y+" nx="+nx+" ny="+ny+" x.max="+image.length+", y.max="+image[0].length);
				throw new AlignmentPatternNotFoundException("Alignment Pattern Finder exceeded image edge");
				//return true;
			}
			else
			{
				return (image[x][y] == QRCodeImageReader.POINT_LIGHT && image[nx][ny] == QRCodeImageReader.POINT_DARK);
			}
		}
		
		//get logical center coordinates of each alignment patterns
		public static Point[][] getLogicalCenter(FinderPattern finderPattern)
		{
			int version = finderPattern.Version;
			Point[][] logicalCenters = new Point[1][];
			for (int i = 0; i < 1; i++)
			{
				logicalCenters[i] = new Point[1];
			}
			int[] logicalSeeds = new int[1];
			//create "column(row)-coordinates" which based on relative coordinates
			//int sqrtCenters = (version / 7) + 2;
			//logicalSeeds = new int[sqrtCenters];
			//for(int i=0 ; i<sqrtCenters ; i++) {
			//	logicalSeeds[i] = 6 + i * (4 + 4 * version) / (sqrtCenters - 1);
			//	logicalSeeds[i] -= (logicalSeeds[i] - 2) % 4;
			//}
			logicalSeeds = LogicalSeed.getSeed(version);
			logicalCenters = new Point[logicalSeeds.Length][];
			for (int i2 = 0; i2 < logicalSeeds.Length; i2++)
			{
				logicalCenters[i2] = new Point[logicalSeeds.Length];
			}
			
			//create real relative coordinates
			for (int col = 0; col < logicalCenters.Length; col++)
			{
				for (int row = 0; row < logicalCenters.Length; row++)
				{
					logicalCenters[row][col] = new Point(logicalSeeds[row], logicalSeeds[col]);
				}
			}
			return logicalCenters;
		}
		static AlignmentPattern()
		{
			canvas = QRCodeDecoder.Canvas;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩黄色小视频| 久久在线免费观看| 免费在线观看视频一区| 中文字幕第一区| 国产日韩欧美一区二区三区乱码 | 亚洲国产精品久久人人爱| 精品免费视频.| 国产精品久久毛片| 一区二区三区四区在线| 中文字幕在线不卡一区二区三区| 国产精品乱码一区二区三区软件| 欧美一级高清片在线观看| 精品成人免费观看| 亚洲人成在线播放网站岛国| 亚洲国产综合色| 国产精品影视在线| 国产精品99久久久| 91在线一区二区三区| 日韩欧美黄色影院| 久久久久久久久蜜桃| 亚洲欧美日韩国产综合在线| 午夜私人影院久久久久| 蜜桃一区二区三区在线观看| 成人av动漫网站| 欧美日韩一区在线| 国产精品午夜在线观看| 蜜桃久久久久久| 色婷婷精品久久二区二区蜜臀av| 日韩视频123| 亚洲一二三专区| 喷白浆一区二区| 岛国精品在线观看| 91网址在线看| 亚洲欧洲另类国产综合| 国产九色精品成人porny| 91精品国产aⅴ一区二区| 天天色天天操综合| 精品视频全国免费看| 国产欧美日韩精品a在线观看| 激情小说欧美图片| 一区二区三区在线观看视频| 精品电影一区二区三区| 国产日韩精品视频一区| 国产中文字幕一区| 4438成人网| 午夜久久久久久| 欧美图区在线视频| 亚洲国产精品嫩草影院| 欧美手机在线视频| 日韩一区欧美小说| 丁香婷婷综合色啪| 国产精品日产欧美久久久久| 91网页版在线| 午夜私人影院久久久久| 欧美国产精品一区| 午夜一区二区三区视频| 国产福利91精品| 国产精品大尺度| 一本大道久久a久久综合| 日韩精品一级中文字幕精品视频免费观看| 国产成人精品免费视频网站| 一级中文字幕一区二区| 久久久久久97三级| 欧美久久久久中文字幕| 国产精品18久久久久久久久| 国产精品色婷婷久久58| 91久久精品网| 国产美女娇喘av呻吟久久| 一级日本不卡的影视| 欧美精品vⅰdeose4hd| 国产精品白丝jk黑袜喷水| 调教+趴+乳夹+国产+精品| 一区二区三区在线不卡| 日韩免费电影一区| 欧美在线视频不卡| 国产精品一线二线三线| 亚洲午夜电影网| 亚洲免费av在线| 亚洲欧美在线视频观看| 中文字幕一区二区三| 国产亚洲精久久久久久| 欧美唯美清纯偷拍| 欧美精品日韩一本| 欧美三区在线观看| 欧美羞羞免费网站| 91精品办公室少妇高潮对白| 色伊人久久综合中文字幕| 国内精品免费**视频| 开心九九激情九九欧美日韩精美视频电影 | 亚洲综合色噜噜狠狠| 亚洲自拍都市欧美小说| 亚洲一二三区不卡| 亚洲激情图片一区| 一二三区精品视频| 极品少妇一区二区三区精品视频 | av网站免费线看精品| 欧美日韩国产在线观看| 777奇米成人网| 国产午夜精品久久久久久免费视 | 国产精品久久国产精麻豆99网站| 亚洲欧洲av色图| 日本不卡一区二区三区高清视频| 久久成人羞羞网站| 国产精品一二三四| 7777精品伊人久久久大香线蕉完整版| 久久尤物电影视频在线观看| 亚洲人成网站在线| 久久久久久久久免费| 日韩欧美久久久| 亚洲一二三四区| 成人黄色av电影| 精品88久久久久88久久久| 亚洲无人区一区| 91美女片黄在线| 亚洲日本青草视频在线怡红院| 国产精品一级黄| 久久久国际精品| 大美女一区二区三区| 国产精品欧美一级免费| 国产成人8x视频一区二区| 精品国产百合女同互慰| 精品一区二区三区影院在线午夜| 91精品国产综合久久久久| 午夜精品免费在线观看| 欧美日韩国产小视频| 日本va欧美va瓶| 国产精品天天看| 色综合久久九月婷婷色综合| 国产精品久久久久永久免费观看 | 午夜精品影院在线观看| 欧美一区二区福利视频| 国产一区二区h| 亚洲裸体在线观看| 欧美日韩精品一区二区三区四区| 亚洲成av人在线观看| 日韩手机在线导航| 激情综合色播激情啊| 亚洲人吸女人奶水| 久久亚洲免费视频| 在线观看中文字幕不卡| 麻豆一区二区99久久久久| 亚洲欧美乱综合| 日韩精品在线一区| 免费人成在线不卡| 日韩欧美一区二区在线视频| 色婷婷av久久久久久久| 色综合久久综合网97色综合| 91麻豆国产福利在线观看| 国产精品亚洲专一区二区三区| 亚洲天天做日日做天天谢日日欢| 91精品久久久久久蜜臀| 99精品桃花视频在线观看| 激情综合五月天| 奇米精品一区二区三区在线观看一| 中文字幕欧美激情一区| 日韩一级二级三级| 欧美日韩精品综合在线| 不卡av在线免费观看| 国产不卡视频一区二区三区| 日本aⅴ亚洲精品中文乱码| 水野朝阳av一区二区三区| 午夜久久久久久久久| 日日夜夜精品免费视频| 日韩av网站在线观看| 美国欧美日韩国产在线播放| 国产高清在线观看免费不卡| 成人综合在线观看| a在线欧美一区| 色国产精品一区在线观看| 欧美美女直播网站| 欧美一区二区播放| 亚洲精品一线二线三线| 久久夜色精品一区| 中文字幕欧美国产| 亚洲美女精品一区| 日韩激情在线观看| 国产精品一区二区视频| av中文字幕不卡| 欧美一级艳片视频免费观看| 国产三级精品三级在线专区| 日产精品久久久久久久性色| 99精品热视频| 欧美天堂一区二区三区| 国产在线精品视频| 不卡的电视剧免费网站有什么| 日韩色在线观看| 国产精品污网站| 国产三级精品三级| 精品视频1区2区| 欧美美女网站色| 欧美极品另类videosde| 麻豆久久久久久| 欧美一区二区三区思思人| 一个色在线综合| 欧美在线高清视频| 亚洲国产精品一区二区久久恐怖片| 99精品欧美一区二区三区小说| 欧美激情一区二区三区不卡 | 久久综合色婷婷| 亚洲狼人国产精品|