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

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

?? finderpattern.java

?? QR code是日本人開發的現在很流行的國際通用的二維條形碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package jp.sourceforge.qrcode.pattern;import jp.sourceforge.qrcode.QRCodeDecoder;import jp.sourceforge.qrcode.reader.*;import jp.sourceforge.qrcode.exception.FinderPatternNotFoundException;import jp.sourceforge.qrcode.exception.InvalidVersionInfoException;import jp.sourceforge.qrcode.exception.InvalidVersionException;import jp.sourceforge.qrcode.exception.VersionInformationException;import jp.sourceforge.qrcode.geom.*;import java.util.*;import jp.sourceforge.qrcode.util.*;public class FinderPattern {	public static final int UL = 0;	public static final int UR = 1;	public static final int DL = 2;		// this constant used for VersionInformation's error correction (BCC	static final int[] VersionInfoBit = {			0x07C94,0x085BC,0x09A99,0x0A4D3,0x0BBF6,0x0C762,0x0D847,			0x0E60D,0x0F928,0x10B78,0x1145D,0x12A17,0x13532,0x149A6,			0x15683,0x168C9,0x177EC,0x18EC4,0x191E1,0x1AFAB,0x1B08E,			0x1CC1A,0x1D33F,0x1ED75,0x1F250,0x209D5,0x216F0,0x228BA,			0x2379F,0x24B0B,0x2542E,0x26A64,0x27541,0x28C69	};		static DebugCanvas canvas = QRCodeDecoder.getCanvas();	Point[] center;	int version;	int[] sincos;	int[] width;	int[] moduleSize;		public static FinderPattern findFinderPattern(boolean[][] image)			throws FinderPatternNotFoundException,			VersionInformationException {		Line[] lineAcross = findLineAcross(image);		Line[] lineCross = findLineCross(lineAcross);		Point[] center = null;		try {			center = getCenter(lineCross);		} catch (FinderPatternNotFoundException e) {			throw e;		}		int[] sincos = getAngle(center);		center = sort(center, sincos);		int[] width = getWidth(image, center, sincos);		// moduleSize for version recognition		int[] moduleSize = {(width[UL] << QRCodeImageReader.DECIMAL_POINT) / 7,							(width[UR] << QRCodeImageReader.DECIMAL_POINT) / 7,							(width[DL] << QRCodeImageReader.DECIMAL_POINT) / 7};		int version = calcRoughVersion(center, width);		if (version > 6) {			try {				version = calcExactVersion(center, sincos, moduleSize, image);			} catch (VersionInformationException e) {				//use rough version data				// throw e;							}		}		return new FinderPattern (center, version, sincos, width, moduleSize);	}		FinderPattern (Point[] center, int version, int[] sincos, int[] width, int[] moduleSize) {		this.center = center;		this.version = version;		this.sincos = sincos;		this.width = width;		this.moduleSize = moduleSize;	}		public Point[] getCenter() {		return center;	}		public Point getCenter(int position) {		if (position >= UL && position <= DL)			return center[position];			else			return null;	}		public int getWidth(int position) {		return width[position];	}		public int[] getAngle() {		return sincos;	}		public int getVersion() {		return version;	}		public int getModuleSize() {		return moduleSize[UL];	}	public int getModuleSize(int place) {		return moduleSize[place];	}	public int getSqrtNumModules() {		return 17 + 4 * version;	}		/*	 * At first, to detect Finder Pattern, liner pattern (D:L:D:L:D)=(1:1:3:1:1) 	 * (D:dark point L:Light point) are extracted as line (both vertical and horizontal).	 * INFO: Although this method detects lines does not across Finder Patterns too, 	 *       these are ignored safely in after process (FinderPattern.findLineCross())	 */	static Line[] findLineAcross(boolean[][] image) {		final int READ_HORIZONTAL = 0;		final int READ_VERTICAL = 1;		int imageWidth = image.length;		int imageHeight = image[0].length;		//int currentX = 0, currentY = 0;		Point current = new Point();		Vector lineAcross = new Vector();				//buffer contains recent length of modules which has same brightness		int[] lengthBuffer = new int[5];		int  bufferPointer = 0;				int direction = READ_HORIZONTAL; //start to read horizontally		boolean lastElement = QRCodeImageReader.POINT_LIGHT;			while(true) {			//check points in image			boolean currentElement = image[current.getX()][current.getY()];			if (currentElement == lastElement) { //target point has same brightness with last point				lengthBuffer[bufferPointer]++;			}			else { //target point has different brightness with last point				if (currentElement == QRCodeImageReader.POINT_LIGHT) {					if (checkPattern(lengthBuffer, bufferPointer)) { //detected pattern						int x1, y1, x2, y2;						if (direction == READ_HORIZONTAL) {							//obtain X coordinates of both side of the detected horizontal pattern							x1 = current.getX(); 							for (int j = 0; j < 5; j++) {								x1 -= lengthBuffer[j];							}							x2 = current.getX() - 1; //right side is last X coordinate							y1 = y2 = current.getY();						}						else {							x1 = x2 = current.getX();							//obtain Y coordinates of both side of the detected vertical pattern							// upper side is sum of length of buffer							y1 = current.getY(); 							for (int j = 0; j < 5; j++) {								y1 -= lengthBuffer[j];							}							y2 = current.getY() - 1; // bottom side is last Y coordinate						}						lineAcross.addElement(new Line(x1, y1, x2, y2));					}				}				bufferPointer = (bufferPointer + 1) % 5; 				lengthBuffer[bufferPointer] = 1;				lastElement = !lastElement;			}						// determine if read next, change read direction or terminate this loop			if (direction == READ_HORIZONTAL) {				if (current.getX() < imageWidth - 1) {					current.translate(1, 0);				}				else if (current.getY() < imageHeight - 1) {					current.set(0, current.getY() + 1);					lengthBuffer =  new int[5];				}				else {					current.set(0, 0); //reset target point					lengthBuffer =  new int[5];					direction = READ_VERTICAL; //start to read vertically				}			}			else { //reading vertically				if (current.getY() < imageHeight - 1)					current.translate(0, 1);				else if (current.getX() < imageWidth - 1) {					current.set(current.getX() + 1, 0);					lengthBuffer = new int[5];				}				else {					break;				}			}		}				Line[] foundLines = new Line[lineAcross.size()];		for (int i = 0; i < foundLines.length; i++)			foundLines[i] = (Line) lineAcross.elementAt(i);				canvas.drawLines(foundLines,Color.LIGHTGREEN);		return foundLines;	}		static boolean checkPattern(int[] buffer, int pointer) {		final int[] modelRatio = {1, 1, 3, 1, 1};			int baselength = 0;		for (int i = 0; i < 5; i++) {			baselength += buffer[i];		}		// pseudo fixed point calculation. I think it needs smarter code		baselength <<= QRCodeImageReader.DECIMAL_POINT; 		baselength /= 7;		for  (int i = 0; i < 5; i++) {			int leastlength = baselength * modelRatio[i] - baselength / 2;			int mostlength = baselength * modelRatio[i] + baselength / 2;						//TODO rough finder pattern detection						int targetlength = buffer[(pointer + i + 1) % 5] << QRCodeImageReader.DECIMAL_POINT;			if (targetlength < leastlength || targetlength > mostlength) {				return false;			}		}		return true;	}		//obtain lines cross at the center of Finder Patterns		static Line[] findLineCross(Line[] lineAcross) {		Vector crossLines = new Vector();		Vector lineNeighbor = new Vector();		Vector lineCandidate = new Vector();		Line compareLine;		for (int i = 0; i < lineAcross.length; i++)			lineCandidate.addElement(lineAcross[i]);				for (int i = 0; i < lineCandidate.size() - 1; i++) {			lineNeighbor.removeAllElements();			lineNeighbor.addElement(lineCandidate.elementAt(i));			for (int j = i + 1; j < lineCandidate.size(); j++) {				if (Line.isNeighbor((Line)lineNeighbor.lastElement(), (Line)lineCandidate.elementAt(j))) {					lineNeighbor.addElement(lineCandidate.elementAt(j));					compareLine = (Line)lineNeighbor.lastElement();					if (lineNeighbor.size() * 5 > compareLine.getLength() &&							j == lineCandidate.size() - 1) {						crossLines.addElement(lineNeighbor.elementAt(lineNeighbor.size() / 2));						for (int k = 0; k < lineNeighbor.size(); k++)							lineCandidate.removeElement(lineNeighbor.elementAt(k));					}				}				//terminate comparison if there are no possibility for found neighbour lines				else if (cantNeighbor((Line)lineNeighbor.lastElement(), (Line)lineCandidate.elementAt(j)) ||					(j == lineCandidate.size() - 1)) {					compareLine = (Line)lineNeighbor.lastElement();					/*					 * determine lines across Finder Patterns when number of neighbour lines are 					 * bigger than 1/6 length of theirselves					 */										if (lineNeighbor.size() * 6 > compareLine.getLength()) {						crossLines.addElement(lineNeighbor.elementAt(lineNeighbor.size() / 2));						for (int k = 0; k < lineNeighbor.size(); k++) {							lineCandidate.removeElement(lineNeighbor.elementAt(k));						}					}					break;				}			}		}			Line[] foundLines = new Line[crossLines.size()];		for (int i = 0; i < foundLines.length; i++) {			foundLines[i] = (Line) crossLines.elementAt(i);		}		return foundLines;	}		static boolean cantNeighbor(Line line1, Line line2) {		if (Line.isCross(line1, line2))			return true;		return line1.isHorizontal()? Math.abs(line1.getP1().getY() - line2.getP1().getY()) > 1 : Math.abs(line1.getP1().getX() - line2.getP1().getX()) > 1;	}		//obtain slope of symbol	static int[] getAngle(Point[] centers) {		Line[] additionalLine = new Line[3];		for (int i = 0; i < additionalLine.length; i++) {			additionalLine[i] = new Line(centers[i],					centers[(i + 1) % additionalLine.length]);		}		// remoteLine - does not contain UL center		Line remoteLine = Line.getLongest(additionalLine);		Point originPoint = new Point();		for (int i = 0; i < centers.length; i++) {			if (!remoteLine.getP1().equals(centers[i]) &&				 !remoteLine.getP2().equals(centers[i])) {				originPoint = centers[i];				break;			}		}		canvas.println("originPoint is: " + originPoint);		Point remotePoint = new Point();		//with origin that the center of Left-Up Finder Pattern, determine other two patterns center.		//then calculate symbols angle

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看av一区二区| 欧美在线观看18| 中文字幕亚洲欧美在线不卡| 丁香一区二区三区| 一个色在线综合| 日韩午夜av一区| 波多野结衣在线aⅴ中文字幕不卡| 中文字幕国产一区二区| 91福利视频网站| 国产老肥熟一区二区三区| 有码一区二区三区| 欧美手机在线视频| 国产一区二区三区免费看 | 国产精品毛片无遮挡高清| 日本韩国欧美国产| 国精产品一区一区三区mba视频| 综合激情成人伊人| 亚洲精品在线电影| 成人av在线一区二区三区| 亚洲成人免费看| 欧美激情一区二区在线| 欧美疯狂做受xxxx富婆| 强制捆绑调教一区二区| 一区二区高清在线| 国产亚洲一二三区| 欧美日韩国产精选| 蜜臀av性久久久久蜜臀av麻豆| 亚洲天堂2014| 国产亚洲一区二区在线观看| 在线播放日韩导航| 国产精品 日产精品 欧美精品| 亚洲午夜久久久久中文字幕久| 国产午夜亚洲精品羞羞网站| 欧美一区二区三区视频免费 | 北岛玲一区二区三区四区| 五月婷婷另类国产| 日本一区免费视频| 欧美日韩久久久一区| av不卡免费在线观看| 国产一区二区在线视频| 天天影视色香欲综合网老头| 亚洲图片你懂的| 国产日韩欧美一区二区三区乱码| 欧美日韩第一区日日骚| 成人美女在线观看| 韩日精品视频一区| 久久成人精品无人区| 亚洲成人精品影院| 亚洲综合在线视频| 亚洲精品免费播放| 亚洲天堂2016| 国产网站一区二区三区| 久久久99久久| 久久日韩精品一区二区五区| 精品国产一区二区亚洲人成毛片| 91精品国产综合久久福利| 欧美视频在线播放| 在线观看欧美精品| 在线亚洲欧美专区二区| 97精品久久久午夜一区二区三区| 成人一区二区三区中文字幕| 久久97超碰国产精品超碰| 裸体歌舞表演一区二区| 日韩va欧美va亚洲va久久| 亚洲国产日韩一区二区| 亚洲成人精品一区二区| 五月婷婷综合激情| 免费成人深夜小野草| 极品美女销魂一区二区三区免费| 日韩电影一区二区三区| 老司机免费视频一区二区 | 久久综合精品国产一区二区三区| 亚洲精品一区在线观看| 久久久久久电影| 国产精品国产三级国产| 亚洲欧美另类久久久精品 | 777xxx欧美| 日韩一级二级三级| 久久在线观看免费| 亚洲婷婷综合色高清在线| 亚洲精品欧美在线| 亚洲第一成人在线| 六月丁香综合在线视频| 国产成人福利片| 色综合色综合色综合色综合色综合| 色香色香欲天天天影视综合网| 欧美日韩在线一区二区| 欧美电影精品一区二区| 中文在线一区二区| 一区二区三区在线视频观看58| 天堂av在线一区| 免费成人在线影院| 成人av第一页| 欧美日韩色综合| 欧美精品一区二区在线观看| 中文字幕一区二区三区在线播放| 亚洲综合色区另类av| 美女久久久精品| 成人免费视频视频| 在线一区二区视频| 精品国产凹凸成av人导航| 国产精品进线69影院| 日韩精品每日更新| 国产东北露脸精品视频| 欧美少妇bbb| 久久久久久久综合色一本| 亚洲精品一卡二卡| 精彩视频一区二区| 色婷婷亚洲婷婷| 精品国产3级a| 亚洲综合一区在线| 国内精品视频666| 91色视频在线| 91精品欧美久久久久久动漫| 国产精品色一区二区三区| 图片区小说区区亚洲影院| 成人免费电影视频| 日韩欧美一卡二卡| 国产精品久久免费看| 麻豆精品在线播放| 欧亚一区二区三区| 国产欧美精品区一区二区三区 | 亚洲高清视频的网址| 国产精品自在欧美一区| 欧美二区在线观看| 亚洲精品免费电影| 粉嫩嫩av羞羞动漫久久久 | 国产传媒久久文化传媒| 欧美视频完全免费看| 亚洲欧洲日韩女同| 国模套图日韩精品一区二区| 欧美日韩亚洲高清一区二区| 国产精品国产三级国产| 国产精品综合在线视频| 欧美大胆人体bbbb| 日韩成人精品在线观看| 91高清视频在线| 一区二区视频免费在线观看| 成人免费的视频| 久久久久久电影| 国内成人免费视频| 日韩精品中文字幕一区二区三区| 香蕉成人伊视频在线观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 亚洲欧美日韩国产成人精品影院| 国产老女人精品毛片久久| 日韩精品一区二区三区三区免费| 午夜精品aaa| 91啪亚洲精品| 日韩一区在线播放| 波多野结衣在线一区| 国产精品国产自产拍在线| 国产成人av电影在线播放| 精品日韩欧美在线| 奇米色777欧美一区二区| 欧美军同video69gay| 天天色 色综合| 欧美精品色综合| 日韩 欧美一区二区三区| 91精品国产色综合久久| 首页国产欧美久久| 这里是久久伊人| 久久精品国产99国产精品| 精品国产一区二区国模嫣然| 九九久久精品视频| 久久色.com| av在线播放一区二区三区| 亚洲欧洲www| 欧美天天综合网| 首页国产丝袜综合| 欧美精品免费视频| 肉丝袜脚交视频一区二区| 精品伦理精品一区| 日本亚洲欧美天堂免费| 欧美福利电影网| 黑人巨大精品欧美黑白配亚洲| 久久精品夜色噜噜亚洲a∨| 成人美女视频在线看| 最近中文字幕一区二区三区| 欧美性做爰猛烈叫床潮| 日韩在线观看一区二区| 精品国产免费视频| 精品系列免费在线观看| 国产欧美日韩三级| 91在线国产福利| 五月激情综合网| 久久久久久电影| 在线视频一区二区免费| 美洲天堂一区二卡三卡四卡视频 | 欧美麻豆精品久久久久久| 日本免费新一区视频| 欧美xfplay| 波多野结衣精品在线| 亚洲va国产天堂va久久en| 精品久久久网站| 成人在线一区二区三区| 亚洲成人1区2区| 国产亚洲精品福利| 欧美亚洲综合久久| 韩国女主播成人在线观看|