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

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

?? finderpattern.java

?? QRcode二維碼生成源代碼,一個做條形碼的代碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
		else if (originPoint.getY() >= longestLine.getP1().getY() & //戞3傑偨偼戞4徾尷
				originPoint.getY() >= longestLine.getP2().getY())
			if (longestLine.getP1().getX() < longestLine.getP2().getX())
				remotePoint = longestLine.getP1();
			else
				remotePoint = longestLine.getP2();
		else //戞1傑偨偼戞4徾尷
			if (longestLine.getP1().getY() < longestLine.getP2().getY())
				remotePoint = longestLine.getP1();
			else
				remotePoint = longestLine.getP2();
		
		int r = new Line(originPoint, remotePoint).getLength();
		int sincos[] = new int[2];
		sincos[0] = ((remotePoint.getY() - originPoint.getY()) << QRCodeImageReader.DECIMAL_POINT) / r; //Sin
		sincos[1] = ((remotePoint.getX() - originPoint.getX()) << QRCodeImageReader.DECIMAL_POINT) / r; //Cos
//		sincos[0] = (sincos[0] == 0) ? 1 : sincos[0];
//		sincos[1] = (sincos[1] == 0) ? 1 : sincos[1];
		return sincos;
	}
	

	
	
	static Point[] getCenter(Line[] crossLines) 
			throws FinderPatternNotFoundException {
		Vector centers = new Vector();
		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.isHorizontal()) {
						x = compareLine.getCenter().getX();
						y = comparedLine.getCenter().getY();		
					}
					else {
						x = comparedLine.getCenter().getX();
						y = compareLine.getCenter().getY();
					}
					centers.addElement(new Point(x,y));
				}
			}
		}
		
		Point[] foundPoints = new Point[centers.size()];
		
		for (int i = 0; i < foundPoints.length; i++) {
			foundPoints[i] = (Point)centers.elementAt(i);
			System.out.println(foundPoints[i]);
		}
		System.out.println(foundPoints.length);
		
		if (foundPoints.length == 3) {
			canvas.drawPolygon(foundPoints, Color.LIGHTRED);	
			return foundPoints;
		}
		else
			throw new FinderPatternNotFoundException();
	}

	
	//奺埵抲梫慺専弌僷僞乕儞偺拞怱揰傪奿擺偟偨攝楍傪丄
	//嵍忋 points[0] 塃忋 points[1] 嵍壓 points[2]偵側傞傛偆偵僜乕僩偡傞
	static Point[] sort(Point[] centers, int[] sincos) {

		Point[] sortedCenters = new Point[3];
		
		int quadant = getURQuadant(sincos);
		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;
		}

		//嵟屻偵嵍忋偺僷僞乕儞傪挷傋傞
		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;
	}
	
	static int getURQuadant(int[] sincos) {
		int sin = sincos[0];
		int cos = sincos[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;
	}
	
	static Point getPointAtSide(Point[] points, int side1, int side2) {
		Point sidePoint = new Point();
		int x = ((side1 == Point.RIGHT || side2 == Point.RIGHT) ? 0 : Integer.MAX_VALUE);
		int y = ((side1 == Point.BOTTOM || side2 == Point.BOTTOM) ? 0 : Integer.MAX_VALUE);
		sidePoint = new Point(x, y);
			
		for (int i = 0; i < points.length; i++) {
			switch (side1) {
			case Point.RIGHT:
				if (sidePoint.getX() < points[i].getX()) {
					sidePoint = points[i];
				}
				else if (sidePoint.getX() == points[i].getX()) {
					if (side2 == Point.BOTTOM) {
						if (sidePoint.getY() < points[i].getY()) {
							sidePoint = points[i];
						}
					}
					else {
						if (sidePoint.getY() > points[i].getY()) {
							sidePoint = points[i];
						}
					}
				}
				break;
			case Point.BOTTOM:
				if (sidePoint.getY() < points[i].getY()) {
					sidePoint = points[i];
				}
				else if (sidePoint.getY() == points[i].getY()) {
					if (side2 == Point.RIGHT) {
						if (sidePoint.getX() < points[i].getX()) {
							sidePoint = points[i];
						}
					}
					else {
						if (sidePoint.getX() > points[i].getX()) {
							sidePoint = points[i];
						}
					}
				}
				break;
			case Point.LEFT:
				if (sidePoint.getX() > points[i].getX()) {
					sidePoint = points[i];
				}
				else if (sidePoint.getX() == points[i].getX()) {
					if (side2 == Point.BOTTOM) {
						if (sidePoint.getY() < points[i].getY()) {
							sidePoint = points[i];
						}
					}
					else {
						if (sidePoint.getY() > points[i].getY()) {
							sidePoint = points[i];
						}
					}
				}
				break;
			case Point.TOP:
				if (sidePoint.getY() > points[i].getY()) {
					sidePoint = points[i];
				}
				else if (sidePoint.getY() == points[i].getY()) {
					if (side2 == Point.RIGHT) {
						if (sidePoint.getX() < points[i].getX()) {
							sidePoint = points[i];
						}
					}
					else {
						if (sidePoint.getX() > points[i].getX()) {
							sidePoint = points[i];
						}
					}
				}
				break;
			}
		}
		return sidePoint;
	}
	
	static int[] getWidth(boolean[][] image, Point[] centers,  int[] sincos) {

		int[] width = new int[3];
		
		for (int i = 0; i < 3; i++) {
			boolean flag = false;
			int lx, rx;
			int y = centers[i].getY();
			for (lx = centers[i].getX(); 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].getX(); 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;
	}
	
	//宆斣傪壖偵媮傔傞
	static int calcRoughVersion(Point[] center, int[] width) {
		final int dp = QRCodeImageReader.DECIMAL_POINT;
		int lengthAdditionalLine = (new Line(center[UL], center[UR]).getLength()) << dp ;
		//System.out.println("lengthAdditionalLine" + Integer.toString(lengthAdditionalLine));
		int avarageWidth = ((width[UL] + width[UR]) << dp) / 14;
		//System.out.println("avarageWidth:" + Integer.toBinaryString(avarageWidth));
		int roughVersion = ((lengthAdditionalLine / avarageWidth) - 10) / 4;
		if (((lengthAdditionalLine / avarageWidth) - 10) % 4 >= 2) {
			roughVersion++;
		}
		//if (tempVersion % 4096 < 2048)
			//tempVersion >>= QRCodeImageReader.DECIMAL_POINT;
		//else {
		//	tempVersion >>= QRCodeImageReader.DECIMAL_POINT;
		//	tempVersion++; //寘棊偪懳嶔
		//}
		//if (tempVersion <= 6)
		return roughVersion;

		
	}
	
	static int calcExactVersion(Point[] centers, int[] sincos, int[] moduleSize, boolean[][] image) 
	throws InvalidVersionInformationException,
					UnsupportedVersionException {
		boolean[] versionInformation = new boolean[18];
		//int offsetX = -(moduleSize * 8) >> 12;
		//int offsetY = -(moduleSize * 3) >> 12;
		Point[] points = new Point[18];
		int targetX, targetY;
		int sin = sincos[0];
		int cos = sincos[1];
		Axis axis = new Axis(sin, cos, moduleSize[0]); //UR
		axis.setOrigin(centers[UR]);

		for (int y = 0; y < 6; y++) {
			for (int x = 0; x < 3; x++) {

				//targetX = finderX + ((moduleSize * (x-7)) >> QRCodeImageReader.DECIMAL_POINT);
				targetX = axis.translate(x - 7, 0).getX();
				//targetY = finderY + ((moduleSize * (y-3)) >> QRCodeImageReader.DECIMAL_POINT);
				targetY = axis.translate(0, y - 3).getY();
				versionInformation[x + y * 3] = image[targetX][targetY];
				points[x + y * 3] = new Point(targetX, targetY);
				//System.out.println(points[x + y * 3]);
				//points[x + y * 3] = axis.translate(x - 7, y - 3);
			}
			//System.out.println("");
		}
		//System.out.println("");
		canvas.drawPoints(points, Color.LIGHTRED);
		
		int exactVersion = 0;
		try {
			exactVersion = checkVersionInfo(versionInformation);
		} catch (VersionInformationException e) {
			canvas.println("Version info error. now retry with other place one.");
			axis.setOrigin(centers[DL]);
			axis.setModulePitch(moduleSize[1]); //DL
			
			for (int x = 0; x < 6; x++) {
				for (int y = 0; y < 3; y++) {
					targetX = axis.translate(x - 3, 0).getX();
					targetY = axis.translate(0, y - 7).getY();
					versionInformation[y + x * 3] = image[targetX][targetY];
					points[x + y * 3] = new Point(targetX, targetY);
				}
			}
			canvas.drawPoints(points, Color.LIGHTRED);
			
			try {
				exactVersion = checkVersionInfo(versionInformation);
			} catch (VersionInformationException e2) {
				e.printStackTrace();
				throw e2;
			}
		}
		return exactVersion;
	}
	
	static int checkVersionInfo(boolean[] target)
			throws InvalidVersionInformationException{
		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 InvalidVersionInformationException();
	}


}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品中文字幕日韩精品| 精品国产免费视频| 中文天堂在线一区| 韩日精品视频一区| 26uuu成人网一区二区三区| 美女网站色91| 久久久蜜臀国产一区二区| 石原莉奈在线亚洲三区| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲永久免费av| 欧美性受极品xxxx喷水| 3d成人动漫网站| 久色婷婷小香蕉久久| 久久精品男人天堂av| 91在线国产福利| 亚洲第一成人在线| 久久色视频免费观看| 成人黄色在线视频| 亚洲国产另类av| 亚洲成人黄色影院| 欧美极品aⅴ影院| 91精品国产全国免费观看 | 中文字幕亚洲欧美在线不卡| 一区二区三区欧美日| 日韩一区二区三| 色哟哟国产精品| 久久久久久久一区| 欧美在线综合视频| 成人免费视频免费观看| 日韩黄色小视频| 亚洲久本草在线中文字幕| 一级特黄大欧美久久久| 久久久久久久久一| 日韩一卡二卡三卡| 欧美日韩精品欧美日韩精品一综合| 中文在线免费一区三区高中清不卡| 图片区日韩欧美亚洲| 国产精品麻豆久久久| 成人午夜激情影院| 欧美亚洲高清一区二区三区不卡| 一区二区三区精品视频| 国产偷v国产偷v亚洲高清| 在线不卡一区二区| 欧美日韩国产高清一区二区| 色哦色哦哦色天天综合| aa级大片欧美| 亚洲动漫第一页| 日韩三级中文字幕| 国产福利一区在线| 亚洲精品久久久蜜桃| 777色狠狠一区二区三区| 韩国理伦片一区二区三区在线播放| 欧美成人乱码一区二区三区| 激情综合色综合久久综合| 麻豆国产欧美日韩综合精品二区| 国产三级精品在线| 国产精品电影一区二区三区| 国产精品久久久久婷婷二区次| 在线观看av一区二区| 欧美色国产精品| 欧美电视剧在线观看完整版| 成人小视频在线| 色欧美日韩亚洲| 精品国产一区二区亚洲人成毛片| 99在线精品视频| 欧美人牲a欧美精品| 久久综合一区二区| 亚洲美女视频一区| 狠狠色丁香婷婷综合久久片| 午夜精品久久久久久| 国产精品国产三级国产aⅴ中文| 91精品久久久久久久久99蜜臂| 成人精品gif动图一区| 在线观看亚洲专区| 国产亚洲成av人在线观看导航| 欧美一级片在线| 日韩毛片精品高清免费| 国模一区二区三区白浆| 在线观看91精品国产麻豆| 国产精品久久久久久久久晋中| 久久久青草青青国产亚洲免观| 日韩亚洲欧美综合| 亚洲va欧美va人人爽| 在线视频国产一区| 欧美乱妇15p| 欧美一区二区视频网站| 一区二区三区国产豹纹内裤在线| 亚洲欧洲性图库| 国产一区二区久久| 精品精品欲导航| 免费不卡在线观看| 国产一区二区日韩精品| 日韩精品一区二区三区在线播放| 精品免费视频一区二区| 日本不卡一二三区黄网| 7777精品伊人久久久大香线蕉的 | 激情六月婷婷久久| 欧美一级片在线看| 中文字幕永久在线不卡| 成人高清免费观看| 18成人在线观看| 美日韩一级片在线观看| 精品粉嫩超白一线天av| 国产盗摄一区二区三区| 国产精品福利一区| 美女精品一区二区| 久久精品一区八戒影视| 91色视频在线| 奇米888四色在线精品| 久久免费偷拍视频| 99精品黄色片免费大全| 天堂在线一区二区| 国产欧美一区二区精品性 | 99久久久国产精品免费蜜臀| 一区2区3区在线看| 精品成人在线观看| 91极品视觉盛宴| 国产一区二区三区免费看 | 日韩久久久久久| 99久久精品99国产精品| 久久久国产一区二区三区四区小说 | 秋霞午夜av一区二区三区| 2023国产一二三区日本精品2022| 亚洲日本一区二区三区| 成人性视频免费网站| 午夜精品aaa| 亚洲人成在线播放网站岛国| 欧美疯狂性受xxxxx喷水图片| 一区二区三区日韩| 欧美国产视频在线| 成人国产精品免费观看视频| 免费看黄色91| 日韩二区三区在线观看| 亚洲国产精品一区二区久久恐怖片| 精品一区二区三区免费| 夜夜亚洲天天久久| 日韩美女久久久| 亚洲欧美怡红院| 亚洲色图在线播放| 日韩美女视频一区二区| 国产精品久久一级| 国产精品网站在线观看| 国产不卡视频在线播放| 天堂va蜜桃一区二区三区 | 精品一区二区三区视频在线观看| 一本一道波多野结衣一区二区 | 国产偷国产偷精品高清尤物| 国产v综合v亚洲欧| 国产在线精品一区二区不卡了| 欧美国产日韩亚洲一区| 日本道免费精品一区二区三区| 亚洲观看高清完整版在线观看| 日韩欧美精品三级| 久久免费偷拍视频| 国产精品欧美一区喷水| 亚洲乱码日产精品bd| 亚洲午夜精品网| 激情六月婷婷综合| 91麻豆精品一区二区三区| 欧美视频在线播放| 日韩欧美国产一区二区三区| 国产91高潮流白浆在线麻豆 | 久久久av毛片精品| 亚洲欧洲日本在线| 久久午夜色播影院免费高清| 久久久久久久一区| 亚洲成人午夜电影| 国产一区二区不卡在线 | 国产欧美一区二区精品性色| 亚洲黄网站在线观看| 亚洲国产精华液网站w| 亚洲一级二级在线| 国产99久久久国产精品免费看 | 亚洲成人自拍偷拍| 成人午夜av在线| 欧美一级电影网站| 夜夜嗨av一区二区三区中文字幕 | 九色综合国产一区二区三区| 99精品视频在线播放观看| 日韩免费观看2025年上映的电影| 欧美日韩高清一区| 欧美日韩视频第一区| 91超碰这里只有精品国产| 久久这里都是精品| 精品乱人伦小说| 午夜精品久久久久久久99水蜜桃| 亚洲丝袜精品丝袜在线| 国产成人综合在线| 一本大道久久精品懂色aⅴ| 国产欧美精品一区二区色综合| 中文字幕av资源一区| 国产成人精品午夜视频免费| 久久女同性恋中文字幕| 极品少妇xxxx偷拍精品少妇| 国产一区二区电影| 久久精品视频在线看| 成人高清av在线| 一区二区三区四区不卡视频 | 国产婷婷一区二区| 国产传媒久久文化传媒|