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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? qrcodedecoder.java

?? QR code是日本人開發(fā)的現(xiàn)在很流行的國際通用的二維條形碼
?? JAVA
字號:
/* * created 2004/09/12 */package jp.sourceforge.qrcode;import java.util.Vector;import jp.sourceforge.qrcode.data.QRCodeImage;import jp.sourceforge.qrcode.data.QRCodeSymbol;import jp.sourceforge.qrcode.exception.DecodingFailedException;import jp.sourceforge.qrcode.exception.InvalidDataBlockException;import jp.sourceforge.qrcode.exception.SymbolNotFoundException;import jp.sourceforge.qrcode.geom.Point;//import jp.sourceforge.qrcode.ecc.ReedSolomon;import jp.sourceforge.qrcode.util.DebugCanvas;import jp.sourceforge.qrcode.util.DebugCanvasAdapter;import jp.sourceforge.qrcode.reader.QRCodeDataBlockReader;import jp.sourceforge.qrcode.reader.QRCodeImageReader;import jp.sourceforge.reedsolomon.RsDecode;public class QRCodeDecoder {	int numTryDecode;	QRCodeSymbol qrCodeSymbol;	Vector results;	Vector lastResults = new Vector();	static DebugCanvas canvas;	QRCodeImageReader imageReader;	int numLastCorrectionFailures;	class DecodeResult {		int numCorrectionFailures;		byte[] decodedBytes;		public DecodeResult(byte[] decodedBytes,int numCorrectionFailures) {			this.decodedBytes = decodedBytes;			this.numCorrectionFailures = numCorrectionFailures;		}		public byte[] getDecodedBytes() {			return decodedBytes;		}		public int getNumCorrectuionFailures() {			return numCorrectionFailures;		}		public boolean isCorrectionSucceeded() {			return numLastCorrectionFailures == 0;		}	}		public static void setCanvas(DebugCanvas canvas) {		QRCodeDecoder.canvas = canvas;	}	public static DebugCanvas getCanvas() {		return QRCodeDecoder.canvas;	}	public QRCodeDecoder() {		numTryDecode = 0;		results = new Vector();		QRCodeDecoder.canvas = new DebugCanvasAdapter();	}		public byte[] decode(QRCodeImage qrCodeImage) throws DecodingFailedException {		Point[] adjusts = getAdjustPoints();		Vector results = new Vector();    numTryDecode = 0;		while (numTryDecode < adjusts.length) {			try {				DecodeResult result = decode(qrCodeImage, adjusts[numTryDecode]);				if (result.isCorrectionSucceeded()) {					return result.getDecodedBytes();				}				else {					results.addElement(result);					canvas.println("Decoding succeeded but could not correct");					canvas.println("all errors. Retrying..");				}			} catch (DecodingFailedException dfe) {				if (dfe.getMessage().indexOf("Finder Pattern") >= 0)					throw dfe;			} finally {				numTryDecode += 1;			}		}				if (results.size() == 0)			throw new DecodingFailedException("Give up decoding");				int minErrorIndex = -1;		int minError = Integer.MAX_VALUE;		for (int i = 0; i < results.size(); i++) {			DecodeResult result = (DecodeResult)results.elementAt(i);			if (result.getNumCorrectuionFailures() < minError) {				minError = result.getNumCorrectuionFailures();				minErrorIndex = i;			}		}		canvas.println("All trials need for correct error");		canvas.println("Reporting #" + (minErrorIndex)+" that,");		canvas.println("corrected minimum errors (" +minError + ")");		canvas.println("Decoding finished.");		return ((DecodeResult)results.elementAt(minErrorIndex)).getDecodedBytes();	}		Point[] getAdjustPoints() {		// note that adjusts affect dependently		// i.e. below means (0,0), (2,3), (3,4), (1,2), (2,1), (1,1), (-1,-1)		//		Point[] adjusts = {new Point(0,0), new Point(2,3), new Point(1,1), //				new Point(-2,-2), new Point(1,-1), new Point(-1,0), new Point(-2,-2)};		Vector adjustPoints = new Vector();		for (int d = 0; d < 4; d++)			adjustPoints.addElement(new Point(1, 1));		int lastX = 0, lastY = 0;		for (int y = 0; y > -4; y--) {			for (int x = 0; x > -4; x--) {				if (x != y && ((x+y) % 2 == 0)) {					adjustPoints.addElement(new Point(x-lastX, y-lastY));					lastX = x;					lastY = y;				}			}		}		Point[] adjusts = new Point[adjustPoints.size()];		for (int i = 0; i < adjusts.length; i++)			adjusts[i] = (Point)adjustPoints.elementAt(i);		return adjusts;	}		DecodeResult decode(QRCodeImage qrCodeImage, Point adjust) 		throws DecodingFailedException {		try {			if (numTryDecode == 0) {				canvas.println("Decoding started");				int[][] intImage = imageToIntArray(qrCodeImage);				imageReader = new QRCodeImageReader();				qrCodeSymbol = imageReader.getQRCodeSymbol(intImage);			} else {				canvas.println("--");				canvas.println("Decoding restarted #" + (numTryDecode));				qrCodeSymbol = imageReader.getQRCodeSymbolWithAdjustedGrid(adjust);			}		} catch (SymbolNotFoundException e) {			throw new DecodingFailedException(e.getMessage());		}		canvas.println("Created QRCode symbol.");		canvas.println("Reading symbol.");		canvas.println("Version: " + qrCodeSymbol.getVersionReference());				canvas.println("Mask pattern: " + qrCodeSymbol.getMaskPatternRefererAsString());		// blocks contains all (data and RS) blocks in QR Code symbol		int[] blocks = qrCodeSymbol.getBlocks();		canvas.println("Correcting data errors.");		// now blocks turn to data blocks (corrected and extracted from original blocks)    blocks = correctDataBlocks(blocks);		try {			byte[] decodedByteArray = 				getDecodedByteArray(blocks, qrCodeSymbol.getVersion(), qrCodeSymbol.getNumErrorCollectionCode());			return new DecodeResult(decodedByteArray, numLastCorrectionFailures);		} catch (InvalidDataBlockException e) {			canvas.println(e.getMessage());			throw new DecodingFailedException(e.getMessage());		}	}			int[][] imageToIntArray(QRCodeImage image) {		int width = image.getWidth();		int height = image.getHeight();		int[][] intImage = new int[width][height];		for (int y = 0; y < height; y++) {			for (int x = 0; x < width; x++) {				intImage[x][y] = image.getPixel(x,y);			}		}		return intImage;	}		int[] correctDataBlocks(int[] blocks) {		int numSucceededCorrections = 0;    int numCorrectionFailures = 0;		int dataCapacity = qrCodeSymbol.getDataCapacity();		int[] dataBlocks = new int[dataCapacity];		int numErrorCollectionCode = qrCodeSymbol.getNumErrorCollectionCode();		int numRSBlocks = qrCodeSymbol.getNumRSBlocks();		int eccPerRSBlock = numErrorCollectionCode / numRSBlocks;		if (numRSBlocks == 1) {      RsDecode corrector = new RsDecode(eccPerRSBlock / 2);      int ret = corrector.decode(blocks);      if (ret > 0)        numSucceededCorrections += ret;      else if (ret < 0)        numCorrectionFailures++;			return blocks;		}		else  { //we have to interleave data blocks because symbol has 2 or more RS blocks			int numLongerRSBlocks = dataCapacity % numRSBlocks;			if (numLongerRSBlocks == 0) { //symbol has only 1 type of RS block				int lengthRSBlock = dataCapacity / numRSBlocks;				int[][] RSBlocks = new int[numRSBlocks][lengthRSBlock];				//obtain RS blocks				for (int i = 0; i < numRSBlocks; i++) {					for (int j = 0; j < lengthRSBlock; j++) {						RSBlocks[i][j] = blocks[j * numRSBlocks + i];					}          canvas.println("eccPerRSBlock=" + eccPerRSBlock );          RsDecode corrector = new RsDecode(eccPerRSBlock / 2);          int ret = corrector.decode(RSBlocks[i]);          if (ret > 0)            numSucceededCorrections += ret;          else if (ret < 0)            numCorrectionFailures++;				}				//obtain only data part				int p = 0;				for (int i = 0; i < numRSBlocks; i++) {					for (int j = 0; j < lengthRSBlock - eccPerRSBlock; j++) {						dataBlocks[p++] = RSBlocks[i][j];					}				}			}			else { //symbol has 2 types of RS blocks				int lengthShorterRSBlock = dataCapacity / numRSBlocks;				int lengthLongerRSBlock = dataCapacity / numRSBlocks + 1;				int numShorterRSBlocks = numRSBlocks - numLongerRSBlocks;				int[][] shorterRSBlocks = new int[numShorterRSBlocks][lengthShorterRSBlock];				int[][] longerRSBlocks = new int[numLongerRSBlocks][lengthLongerRSBlock];				for (int i = 0; i < numRSBlocks; i++) {					if (i < numShorterRSBlocks) { //get shorter RS Block(s)						int mod = 0;						for (int j = 0; j < lengthShorterRSBlock; j++) {							if (j == lengthShorterRSBlock - eccPerRSBlock) mod = numLongerRSBlocks;							shorterRSBlocks[i][j] = blocks[j * numRSBlocks + i + mod];						}            canvas.println("eccPerRSBlock(shorter)=" + eccPerRSBlock );            RsDecode corrector = new RsDecode(eccPerRSBlock / 2);            int ret = corrector.decode(shorterRSBlocks[i]);            if (ret > 0)              numSucceededCorrections += ret;            else if (ret < 0)              numCorrectionFailures++;					}					else { 	//get longer RS Blocks						int mod = 0;						for (int j = 0; j < lengthLongerRSBlock; j++) {							if (j == lengthShorterRSBlock - eccPerRSBlock) mod = numShorterRSBlocks;							longerRSBlocks[i - numShorterRSBlocks][j] = blocks[j * numRSBlocks + i - mod];						}            canvas.println("eccPerRSBlock(longer)=" + eccPerRSBlock );            RsDecode corrector = new RsDecode(eccPerRSBlock / 2);            int ret = corrector.decode(longerRSBlocks[i - numShorterRSBlocks]);            if (ret > 0)              numSucceededCorrections += ret;            else if (ret < 0)              numCorrectionFailures++;					}				}				int p = 0;				for (int i = 0; i < numRSBlocks; i++) {					if (i < numShorterRSBlocks) {						for (int j = 0; j < lengthShorterRSBlock - eccPerRSBlock; j++) {							dataBlocks[p++] = shorterRSBlocks[i][j];						}					}					else {						for (int j = 0; j < lengthLongerRSBlock - eccPerRSBlock; j++) {							dataBlocks[p++] = longerRSBlocks[i - numShorterRSBlocks][j];						}					}				}			}			if (numSucceededCorrections > 0)				canvas.println(String.valueOf(numSucceededCorrections) + " data errors corrected successfully.");			else				canvas.println("No errors found.");					numLastCorrectionFailures = numCorrectionFailures;			return dataBlocks;		}	}		byte[] getDecodedByteArray(int[] blocks, int version, int numErrorCorrectionCode) throws InvalidDataBlockException {		byte[] byteArray;		QRCodeDataBlockReader reader = new QRCodeDataBlockReader(blocks, version, numErrorCorrectionCode);		try {			byteArray = reader.getDataByte();		} catch (InvalidDataBlockException e) {			throw e;		}		return byteArray;	}}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人做爰69片免费看网站| 久久久精品一品道一区| 亚洲午夜激情网站| 欧美无砖专区一中文字| 婷婷久久综合九色综合绿巨人| 欧美性色综合网| 色av综合在线| 亚洲一区二区四区蜜桃| 欧美乱妇23p| 久久国产日韩欧美精品| 久久蜜桃一区二区| 成人动漫一区二区| 亚洲精品ww久久久久久p站| 欧美丝袜丝nylons| 久久99精品久久久久久久久久久久| 久久色视频免费观看| 成人动漫一区二区| 亚洲成人av福利| 精品国产一区二区三区忘忧草| 国产精品亚洲第一| 亚洲一区二区三区不卡国产欧美| 91精品国产aⅴ一区二区| 成人一区二区视频| 亚洲国产三级在线| 精品理论电影在线观看 | 国产日韩欧美综合一区| 色综合一个色综合亚洲| 奇米综合一区二区三区精品视频| 国产精品女同互慰在线看| 欧美三级在线视频| 高清久久久久久| 日韩精品国产欧美| 国产精品国产精品国产专区不片| 欧美日韩一区二区在线观看视频| 国产最新精品免费| 亚洲一区二区三区在线播放| 精品1区2区在线观看| 日本道免费精品一区二区三区| 精品一区二区成人精品| 亚洲精品视频免费观看| 亚洲精品在线观看网站| 日本道精品一区二区三区| 国产精品主播直播| 日韩av一级片| 亚洲综合视频在线观看| 国产精品视频免费| 欧美成人性福生活免费看| 色婷婷亚洲综合| 国内精品伊人久久久久av影院| 亚洲精品高清在线| 国产日韩欧美综合在线| 日韩欧美精品在线视频| 91精品福利视频| 成人黄色免费短视频| 韩国午夜理伦三级不卡影院| 91丨九色丨尤物| 国产自产v一区二区三区c| 日本不卡不码高清免费观看| 亚洲国产毛片aaaaa无费看| 中日韩av电影| 精品国精品自拍自在线| 日韩一区二区三区在线| 欧美三级电影在线看| 91丝袜国产在线播放| 成人精品gif动图一区| 国产制服丝袜一区| 美女国产一区二区三区| 日韩成人一区二区三区在线观看| 亚洲最新在线观看| 亚洲人成网站影音先锋播放| 中文字幕一区二区三区在线观看| 精品成人私密视频| 欧美成人三级电影在线| 欧美一级xxx| 5858s免费视频成人| 欧美二区三区91| 51午夜精品国产| 3d动漫精品啪啪1区2区免费| 制服视频三区第一页精品| 欧美日韩精品一区二区天天拍小说| 91久久精品国产91性色tv| 97国产精品videossex| 一本大道久久a久久精品综合| 91原创在线视频| 国产精品成人在线观看| 中文字幕中文乱码欧美一区二区| 国产精品―色哟哟| 国产精品伦一区| 国产精品久久久久久久午夜片| 国产精品天天看| 成人免费在线观看入口| 一区二区三区国产精品| 天天影视色香欲综合网老头| 亚洲成人av电影| 免费人成网站在线观看欧美高清| 久久av老司机精品网站导航| 激情久久五月天| 成人精品免费网站| 色哟哟一区二区三区| 欧美日韩一级片网站| 欧美zozo另类异族| 中文字幕+乱码+中文字幕一区| 亚洲三级电影网站| 午夜久久久久久| 美女高潮久久久| av福利精品导航| 3d成人动漫网站| 中文字幕va一区二区三区| 亚洲午夜精品在线| 久久69国产一区二区蜜臀| caoporen国产精品视频| 欧美日韩精品久久久| 欧美成人精品1314www| 中文字幕精品在线不卡| 午夜精品福利一区二区三区av | 国产精品美女久久久久久久 | 午夜av一区二区| 狠狠色丁香久久婷婷综合_中 | 欧美在线观看一区二区| 欧美一区二区播放| 国产精品免费看片| 日韩精品电影一区亚洲| 成人美女在线视频| 欧美另类高清zo欧美| 国产欧美日韩一区二区三区在线观看| 一区二区三区欧美| 国产一区在线观看麻豆| 欧美亚洲动漫精品| 欧美激情一区在线观看| 日韩电影在线一区二区三区| 99在线精品一区二区三区| 日韩你懂的电影在线观看| 亚洲制服丝袜av| 大胆亚洲人体视频| 天天影视网天天综合色在线播放| 国产.欧美.日韩| 欧美videossexotv100| 亚洲一区二区在线免费观看视频| 丁香激情综合五月| 精品国产区一区| 日韩精品每日更新| 91福利在线看| 中文字幕一区二区三区在线不卡| 久久99久久久久久久久久久| 欧美性色黄大片手机版| 中文字幕色av一区二区三区| 国产精品资源网| 日韩欧美高清dvd碟片| 五月婷婷久久丁香| 在线亚洲免费视频| 亚洲欧美一区二区三区极速播放| 国产麻豆一精品一av一免费| 欧美大片在线观看| 蜜桃视频在线观看一区二区| 欧美精品高清视频| 亚洲高清免费视频| 欧美日韩亚洲综合在线| 亚洲激情综合网| 99久久综合精品| 综合亚洲深深色噜噜狠狠网站| 国产精品亚洲成人| 国产日韩欧美亚洲| 国产精品一品二品| 久久亚洲综合av| 韩国成人在线视频| 久久只精品国产| 国产一区二区在线视频| 欧美成人精品二区三区99精品| 蜜臀av一区二区在线观看| 日韩免费高清电影| 精品一区二区免费在线观看| 精品国产乱码久久久久久蜜臀| 久久国产精品色婷婷| 精品卡一卡二卡三卡四在线| 国产一区在线不卡| 国产女主播视频一区二区| 国产jizzjizz一区二区| 中文字幕亚洲一区二区va在线| 91在线精品一区二区| 亚洲欧洲中文日韩久久av乱码| 色婷婷一区二区| 日韩精品一二三四| 久久综合五月天婷婷伊人| 国产乱人伦偷精品视频免下载 | 欧美一区二区精品久久911| 麻豆国产精品官网| 国产女人18水真多18精品一级做| 成人av午夜影院| 亚洲午夜激情av| 欧美大片一区二区| k8久久久一区二区三区| 亚洲一二三专区| 婷婷综合五月天| 久久综合成人精品亚洲另类欧美| 成人性色生活片免费看爆迷你毛片| 国产精品福利av| 欧美浪妇xxxx高跟鞋交| 国产精品一区三区| 亚洲综合色噜噜狠狠| 日韩欧美美女一区二区三区|