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

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

?? qrcodeimagereader.java

?? QRcode二維碼生成源代碼,一個做條形碼的代碼
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
package jp.sourceforge.qrcode.codec.reader;


import jp.sourceforge.qrcode.codec.data.*;
import jp.sourceforge.qrcode.codec.exception.AlignmentPatternEdgeNotFoundException;
import jp.sourceforge.qrcode.codec.exception.FinderPatternNotFoundException;
import jp.sourceforge.qrcode.codec.exception.VersionInformationException;
import jp.sourceforge.qrcode.codec.geom.*;
import jp.sourceforge.qrcode.codec.reader.pattern.*;
import jp.sourceforge.qrcode.codec.util.*;

public class QRCodeImageReader {

	DebugCanvas canvas;
	//boolean[][] image;
	//DP = 
	//23 ... max 255
	//22 .. max 511
	//21 .. max 1023
	public static  int DECIMAL_POINT = 23;
	public static final boolean POINT_DARK = true;
	public static final boolean POINT_LIGHT = false;

	//int numModuleAtSide; //僨僐乕僪懳徾偺僔儞儃儖偵偍偗傞堦曈偺儌僕儏乕儖偺悢

	public QRCodeImageReader() {
		//this.image = image;
		this.canvas = DebugCanvas.getCanvas();
	}
	
	
	boolean[][] applyMedianFilter(boolean[][] image, int threshold) {
		boolean[][] filteredMatrix = new boolean[image.length][image[0].length];
		//僲僀僘僼傿儖僞(儊僨傿傾儞僼傿儖僞)
		int numPointDark;
		for (int y = 1; y < image[0].length - 1; y++) {
			for (int x = 1; x < image.length - 1; x++) {
			//if (image[x][y] == true) {
			numPointDark = 0;
			for (int fy = -1; fy < 2; fy++) {
				for (int fx = -1; fx < 2; fx++) {
					if (image[x + fx][y + fy] == true) {
						numPointDark++;
					}
				}
			}
			if (numPointDark > threshold) 
				filteredMatrix[x][y] = POINT_DARK;
			}
		}
		
		return filteredMatrix;
	}
	boolean[][] applyMedianFilter_(boolean[][] image, int threshold, int internalScale) {
		boolean[][] filteredMatrix = new boolean[image.length][image[0].length];
		//僲僀僘僼傿儖僞(儊僨傿傾儞僼傿儖僞)
		int numPointDark;
		for (int y = internalScale; y < image[0].length - internalScale; y+=internalScale) {
			for (int x = internalScale; x < image.length - internalScale; x+=internalScale) {
				//if (image[x][y] == true) {
					numPointDark = 0;
					for (int fy = -internalScale; fy < internalScale + 1; fy+=internalScale) {
						for (int fx = -internalScale; fx < internalScale + 1; fx+=internalScale) {
							if (image[x + fx][y + fy] == true) {
								numPointDark++;
							}
						}
					}
					if (numPointDark > threshold) {
						for (int dy = 0; dy < internalScale; dy++)
							for (int dx = 0; dx < internalScale; dx++)
						filteredMatrix[x + dx][y + dy] = POINT_DARK;
					}
				//}
			}
		}
		return filteredMatrix;
	}
	
	public QRCodeSymbol getQRCodeSymbol(boolean[][] image, int internalScale) 
			throws FinderPatternNotFoundException ,
			VersionInformationException ,
			AlignmentPatternEdgeNotFoundException {
		int longSide = (image.length < image[0].length) ? image[0].length : image.length;
		QRCodeImageReader.DECIMAL_POINT = 23 - QRCodeUtility.sqrt(longSide / 256);
			
		canvas.println("Drawing matrix.");
		canvas.drawMatrix(image);
		//for(int i = 0; i < 500000; i++) System.out.println("");

		canvas.println("Scanning Finder Pattern.");
		FinderPattern finderPattern = null;
		try {
			finderPattern = FinderPattern.findFinderPattern(image);
		} catch (FinderPatternNotFoundException e) {
			canvas.println("Not found, now retrying...");
			image = applyMedianFilter(image, 5);
			canvas.drawMatrix(image);
			try {
				finderPattern = FinderPattern.findFinderPattern(image);
			} catch (FinderPatternNotFoundException e2) {
				e2.printStackTrace();
				throw e2;
			} catch (VersionInformationException e3) {
				e3.printStackTrace();
				throw e3;
			}
			
//			if (finderPattern.getCenter() == null) {
//				canvas.println("ERROR: Finder pattern not found");				
//			}
		} catch (VersionInformationException e4) {
			e4.printStackTrace();
			throw e4;
		}


		canvas.println("FinderPattern at");
		String finderPatternCoordinates = 
			finderPattern.getCenter(FinderPattern.UL).toString() + 
			finderPattern.getCenter(FinderPattern.UR).toString() +
			finderPattern.getCenter(FinderPattern.DL).toString();
		canvas.println(finderPatternCoordinates);
 		int[] sincos = finderPattern.getAngle();
		canvas.println("Angle*4098: Sin " + Integer.toString(sincos[0]) + "  " + "Cos " + Integer.toString(sincos[1]));

		Line[][][][] samplingGrid = new Line[1][1][1][1];
		int version = finderPattern.getVersion();

		canvas.println("Version: " + Integer.toString(version));

		AlignmentPattern alignmentPattern = null;
		if (version > 1) {
			try {
				alignmentPattern = AlignmentPattern.findAlignmentPattern(image, finderPattern);
			} catch (AlignmentPatternEdgeNotFoundException e) {
				e.printStackTrace();
				throw e;
			}
			
			int matrixLength = alignmentPattern.getCenter().length;
			canvas.println("AlignmentPatterns at");
			for (int y = 0; y < matrixLength; y++) {
				String alignmentPatternCoordinates = "";
				for (int x = 0; x < matrixLength; x++) {
					alignmentPatternCoordinates += alignmentPattern.getCenter()[x][y].toString();
				}
				canvas.println(alignmentPatternCoordinates);
			}
		}
		//for(int i = 0; i < 500000; i++) System.out.println("");

		canvas.println("Creating sampling grid.");
		//[TODO] need all-purpose method
		if (version == 1)
			samplingGrid = getSamplingGrid1(finderPattern);
		else if (version >= 2 && version <= 6)
			samplingGrid = getSamplingGrid2_6(finderPattern, alignmentPattern);
		else if (version >= 7 && version <= 13)
			samplingGrid = getSamplingGrid7_13(finderPattern, alignmentPattern);
//		else if (version >= 14 && version <= 20)
//			samplingGrid = getSamplingGrid14_20(finderPattern, alignmentPattern);			
		canvas.println("Reading grid.");
		boolean[][] qRCodeMatrix = getQRCodeMatrix(image, samplingGrid);
		//canvas.drawMatrix(qRCodeMatrix, 5);
		
		return new QRCodeSymbol(qRCodeMatrix);
	}
	
	//埵抲崌偣僷僞乕儞偑側偄宆斣1愱梡
	Line[][][][] getSamplingGrid1(FinderPattern finderPattern) {
		int sqrtNumArea = 1;
		int sqrtNumModules = finderPattern.getSqrtNumModules(); //堦曈摉偨傝偺儌僕儏乕儖悢傪摼傞
		int sqrtNumAreaModules = sqrtNumModules / sqrtNumArea;
		Point[] centers = finderPattern.getCenter();
		int logicalDistance = 14;
		Line[][][][] samplingGrid = new Line[sqrtNumArea][sqrtNumArea][2][sqrtNumAreaModules];
		Line baseLineX, baseLineY, gridLineX, gridLineY;

		//儌僕儏乕儖僺僢僠傪摼傞
		int[] modulePitch = new int[2]; //up left 偺弴偵奿擺
		modulePitch[0] = getAreaModulePitch(centers[0], centers[1], logicalDistance);
		modulePitch[1] = getAreaModulePitch(centers[0], centers[2], logicalDistance);

		//X幉偵悅捈偺婎慄(堦斒偵廲)
		baseLineX = new Line(
				finderPattern.getCenter(FinderPattern.UL), 
				finderPattern.getCenter(FinderPattern.DL));

		int sin = finderPattern.getAngle()[0];
		int cos = finderPattern.getAngle()[1];

		Axis axis = new Axis(sin, cos, modulePitch[0]);
		axis.setOrigin(baseLineX.getP1());
		baseLineX.setP1(axis.translate(-3, -3));


		axis.setModulePitch(modulePitch[1]);
		axis.setOrigin(baseLineX.getP2());
		baseLineX.setP2(axis.translate(-3, 3));
						

		
		//Y幉偵悅捈偺婎慄(堦斒偵墶)
	  baseLineY =
			new Line(finderPattern.getCenter(FinderPattern.UL),
					finderPattern.getCenter(FinderPattern.UR));
	  
		axis.setModulePitch(modulePitch[1]);
		axis.setOrigin(baseLineY.getP1());
		baseLineY.setP1(axis.translate(-3, -3));


		axis.setModulePitch(modulePitch[1]);
		axis.setOrigin(baseLineY.getP2());
		baseLineY.setP2(axis.translate(3, -3));
		
		baseLineX.translate(1,1);
		baseLineY.translate(1,1);

		for (int i = 0; i < sqrtNumAreaModules; i++) {
			
			gridLineX = new Line(baseLineX.getP1(), baseLineX.getP2());
			
			axis.setOrigin(gridLineX.getP1());
			axis.setModulePitch(modulePitch[0]);
			gridLineX.setP1(axis.translate(i,0));

			axis.setOrigin(gridLineX.getP2());
			axis.setModulePitch(modulePitch[0]);
			gridLineX.setP2(axis.translate(i,0));
			

			gridLineY = new Line(baseLineY.getP1(), baseLineY.getP2());
			axis.setOrigin(gridLineY.getP1());
			axis.setModulePitch(modulePitch[1]);
			gridLineY.setP1(axis.translate(0,i));

			axis.setOrigin(gridLineY.getP2());
			axis.setModulePitch(modulePitch[1]);
			gridLineY.setP2(axis.translate(0,i));


			samplingGrid[0][0][0][i] = gridLineX;
			samplingGrid[0][0][1][i] = gridLineY;
		}
		for (int ay = 0; ay < samplingGrid[0].length; ay++) {
			for (int ax = 0; ax < samplingGrid.length; ax++) {
				canvas.drawLines(samplingGrid[ax][ay][0], Color.LIGHTBLUE);
				canvas.drawLines(samplingGrid[ax][ay][1], Color.LIGHTBLUE);
			}
		}
		return samplingGrid;
	}
	
	//sampllingGrid[areaX][areaY][direction(x=0,y=1)][EachLines]	
	//宆斣2 乣 6偺僒儞僾儕儞僌僌儕僢僪傪媮傔傞
	Line[][][][] getSamplingGrid2_6(FinderPattern finderPattern, AlignmentPattern alignmentPattern) {

		Point centers[][] = alignmentPattern.getCenter();
		centers[0][0] = finderPattern.getCenter(FinderPattern.UL);
		centers[1][0] = finderPattern.getCenter(FinderPattern.UR);
		centers[0][1] = finderPattern.getCenter(FinderPattern.DL);
		int sqrtNumModules = finderPattern.getSqrtNumModules(); //堦曈摉偨傝偺儌僕儏乕儖悢傪摼傞

		Line[][][][] samplingGrid = new Line[1][1][2][sqrtNumModules];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人精品一区| 成人h动漫精品| 国产一区二区三区综合| 日韩美女视频一区| 欧美激情一区二区三区四区| 久久久午夜精品| 国产精品视频在线看| 欧美国产日本视频| 一区二区三区不卡在线观看| 亚洲一区在线观看视频| 日韩高清不卡一区| 久久成人免费网| 国产精品影视网| 99久久久久久| 欧美三级电影精品| 精品久久一区二区三区| 国产精品色呦呦| 夜夜精品视频一区二区| 美女一区二区视频| 国产一二精品视频| 日本高清视频一区二区| 在线不卡中文字幕| 日本一区二区三级电影在线观看 | 国产在线一区观看| 国产成人精品影视| 欧美在线高清视频| 久久久一区二区三区| 亚洲精品视频在线观看网站| 天天影视涩香欲综合网| 国产精品18久久久久久久久久久久 | www.在线成人| 欧美人狂配大交3d怪物一区| 精品久久久久久久一区二区蜜臀| 国产精品成人一区二区艾草| 亚洲成av人片www| 国产99久久精品| 精品视频1区2区| 中文欧美字幕免费| 日韩成人一级片| 99久久er热在这里只有精品66| 日韩视频国产视频| 亚洲欧美色图小说| 国产成人免费视频网站| 7777精品伊人久久久大香线蕉经典版下载 | 欧美中文字幕一二三区视频| 国产日产精品1区| 日本欧美一区二区三区乱码| 日韩精品在线看片z| 成人欧美一区二区三区白人| 久久精品国产澳门| 欧美特级限制片免费在线观看| 中文字幕欧美三区| 麻豆久久一区二区| 欧美精品日韩综合在线| 亚洲精品乱码久久久久久| 国产成人无遮挡在线视频| 欧美一区二区三区在线观看视频| 欧美日韩免费一区二区三区| 亚洲精品在线网站| 日本不卡不码高清免费观看| 日本大香伊一区二区三区| 欧美高清一级片在线观看| 加勒比av一区二区| 精品日韩欧美一区二区| 亚洲成a人v欧美综合天堂下载| 色综合久久久久综合| 国产精品久久久久久久第一福利| 国产精品18久久久| 久久精品亚洲一区二区三区浴池 | 国产成人av影院| 久久久午夜精品理论片中文字幕| 麻豆传媒一区二区三区| 日韩一级片网址| 精品在线播放午夜| 久久综合久久鬼色| 国v精品久久久网| 国产精品丝袜黑色高跟| jlzzjlzz亚洲日本少妇| 专区另类欧美日韩| 91国产视频在线观看| 亚洲一区二区三区四区五区黄| 91网站在线观看视频| 亚洲蜜臀av乱码久久精品蜜桃| 91免费看视频| 亚洲成精国产精品女| 91精品欧美综合在线观看最新| 蜜臀91精品一区二区三区| 日韩一区二区三| 国产不卡视频一区| 亚洲另类春色校园小说| 欧美日韩www| 韩国av一区二区三区四区| 国产亚洲一区二区在线观看| www.亚洲精品| 午夜私人影院久久久久| 久久亚洲欧美国产精品乐播| proumb性欧美在线观看| 午夜不卡av免费| 国产日产欧美一区| 在线观看日产精品| 久久不见久久见中文字幕免费| 久久精品欧美一区二区三区不卡| 成人精品国产免费网站| 五月激情丁香一区二区三区| 2019国产精品| 色av综合在线| 国产精品69毛片高清亚洲| 亚洲黄色av一区| 2023国产精品自拍| 欧美色图在线观看| 国产美女精品人人做人人爽| 亚洲最大的成人av| 久久日一线二线三线suv| 一本色道亚洲精品aⅴ| 精品一区二区三区在线播放视频| 视频一区中文字幕| 中文字幕乱码久久午夜不卡| 欧美日韩综合色| av爱爱亚洲一区| 老鸭窝一区二区久久精品| 一区二区三区四区在线| 精品久久国产字幕高潮| 欧美日韩美少妇| www.欧美日韩国产在线| 国产乱国产乱300精品| 日韩精品免费专区| 一区二区三区在线看| 国产精品久久久久aaaa樱花| 精品国产一区二区三区久久影院| 欧美三级中文字幕| 91在线国内视频| www.性欧美| 国产成都精品91一区二区三| 精品亚洲国内自在自线福利| 天堂精品中文字幕在线| 一区二区三区在线免费| 国产精品成人免费| 国产欧美一区二区精品忘忧草 | 亚洲欧美日韩中文字幕一区二区三区 | 在线免费观看不卡av| 成人教育av在线| 成人永久免费视频| 国产一区二区三区国产| 精品午夜一区二区三区在线观看| 亚洲18影院在线观看| 亚洲狠狠爱一区二区三区| 亚洲日本va在线观看| 国产精品国模大尺度视频| 国产精品拍天天在线| 欧美激情综合在线| 国产农村妇女精品| 国产精品国产馆在线真实露脸| 久久精品网站免费观看| 国产欧美一区二区三区沐欲| 欧美国产日韩a欧美在线观看 | 日本欧美久久久久免费播放网| 夜夜嗨av一区二区三区| 亚洲成av人片一区二区梦乃| 午夜精品福利一区二区三区蜜桃| 视频一区在线播放| 韩国一区二区三区| 国产suv精品一区二区三区| 粉嫩蜜臀av国产精品网站| 99久久国产综合精品麻豆| 欧美一a一片一级一片| 欧美男人的天堂一二区| 日韩精品一区在线| 国产日韩av一区| 亚洲欧美aⅴ...| 日韩精品1区2区3区| 国产一区不卡精品| 色婷婷亚洲一区二区三区| 欧美精品成人一区二区三区四区| 日韩欧美高清dvd碟片| 国产日韩av一区二区| 欧美日韩一区不卡| 精品国内片67194| 精品sm在线观看| 国产精品乱码一区二三区小蝌蚪| 国产精品二三区| 日本成人在线看| 成人网页在线观看| 欧美卡1卡2卡| 中文幕一区二区三区久久蜜桃| 亚洲蜜臀av乱码久久精品蜜桃| 免费欧美在线视频| 99国产精品久久久久久久久久 | 国产精品美女久久久久aⅴ| 亚洲国产日产av| 国产精品69毛片高清亚洲| 欧美唯美清纯偷拍| 国产三级精品三级| 亚洲sss视频在线视频| 国产高清在线观看免费不卡| 欧美少妇xxx| 国产精品久久一级| 蜜桃精品视频在线| 欧美性videosxxxxx| 日本一区二区在线不卡| 日本欧美一区二区|