⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qrcodeimagereader.java

📁 日本人写的QRcode的编码和解码的java程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
//				if (ax == 0 && ay == 0) {
//					axis.setOrigin(centers[0][0]);
//					modulePitch[0] = getAreaModulePitch(axis.translate(0,3), centers[1][0], logicalDistance + 3);
//					modulePitch[1] = getAreaModulePitch(axis.translate(3,0), centers[0][1], logicalDistance + 3);
//					axis.setModulePitch(modulePitch[0]);
//					modulePitch[2] = getAreaModulePitch(centers[0][1], centers[1][1], logicalDistance);
//					axis.setModulePitch(modulePitch[1]);
//					modulePitch[3] = getAreaModulePitch(centers[1][0], centers[1][1], logicalDistance);
//					
//					axis.setModulePitch(modulePitch[0]);
//					baseLineX.setP1(axis.translate(-3,-3));
//
//					axis.setModulePitch(modulePitch[1]);
//					baseLineY.setP1(axis.translate(-3,-3));
//					
//					axis.setOrigin(centers[0][1]);
//					axis.setModulePitch(modulePitch[2]);
//					baseLineX.setP2(axis.translate(-6,0));
//					
//					axis.setOrigin(centers[1][0]);
//					axis.setModulePitch(modulePitch[3]);
//					baseLineY.setP2(axis.translate(0,-6));
//				}
//				else if (ax == 1 && ay == 0) {
//					modulePitch[0] = getAreaModulePitch(centers[1][0], centers[2][0], logicalDistance);
//					modulePitch[1] = getAreaModulePitch(centers[1][0], centers[1][1], logicalDistance);
//					modulePitch[2] = getAreaModulePitch(centers[1][1], centers[2][1], logicalDistance);
//					modulePitch[3] = getAreaModulePitch(centers[2][0], centers[2][1], logicalDistance);
//					
//					//baseLineX.setP1(centers[1][0]);
//					//baseLineY.setP1(centers[1][0]);
//
//					axis.setOrigin(centers[1][0]);
//					axis.setModulePitch(modulePitch[1]);
//					baseLineX.setP1(axis.translate(0,-6));
//
//					baseLineX.setP2(centers[1][1]);
//					
//					axis.setOrigin(centers[1][0]);
//					axis.setModulePitch(modulePitch[1]);
//					baseLineY.setP1(axis.translate(0,-6));
//
//					axis.setOrigin(centers[2][0]);
//					axis.setModulePitch(modulePitch[3]);
//					baseLineY.setP2(axis.translate(0,-6));
//					
//
//				}
//				else if (ax == 2 && ay == 0) {
//					axis.setOrigin(centers[2][0]);
//					modulePitch[0] = getAreaModulePitch(axis.translate(0,-3), centers[3][0], logicalDistance + 3);
//					modulePitch[1] = getAreaModulePitch(centers[2][0], centers[2][1], logicalDistance);
//					axis.setModulePitch(modulePitch[0]);
//					modulePitch[2] = getAreaModulePitch(centers[2][1], centers[3][1], logicalDistance);
//					axis.setModulePitch(modulePitch[1]);
//					axis.setOrigin(centers[3][0]);
//					modulePitch[3] = getAreaModulePitch(axis.translate(-3,0), centers[3][1], logicalDistance + 3);
//					
//					axis.setOrigin(centers[2][0]);
//					axis.setModulePitch(modulePitch[1]);
//					baseLineX.setP1(axis.translate(0,-6));
//
//					baseLineY.setP1(axis.translate(0,-6));
//					
//					baseLineX.setP2(centers[2][1]);
//					
//					axis.setOrigin(centers[3][0]);
//					axis.setModulePitch(modulePitch[3]);
//					baseLineY.setP2(axis.translate(3,-3));
//				}
//				else if (ax == 0 && ay == 1) {
//					modulePitch[0] = getAreaModulePitch(centers[0][1], centers[1][1], logicalDistance);
//					modulePitch[1] = getAreaModulePitch(centers[0][1], centers[0][2], logicalDistance);
//					modulePitch[2] = getAreaModulePitch(centers[0][2], centers[1][2], logicalDistance);
//					modulePitch[3] = getAreaModulePitch(centers[1][1], centers[1][2], logicalDistance);
//					
//					axis.setOrigin(centers[0][1]);
//					axis.setModulePitch(modulePitch[0]);
//					baseLineX.setP1(axis.translate(-6,0));
//
//					baseLineY.setP1(axis.translate(-6,0));
//					
//					axis.setOrigin(centers[0][2]);
//					axis.setModulePitch(modulePitch[2]);
//					baseLineX.setP2(axis.translate(-6, 0));
//					
//					baseLineY.setP2(centers[1][1]);					
//				}
//				else if (ax == 1 && ay == 1) {
//					modulePitch[0] = getAreaModulePitch(centers[1][1], centers[2][1], logicalDistance);
//					modulePitch[1] = getAreaModulePitch(centers[1][1], centers[1][2], logicalDistance);
//					modulePitch[2] = getAreaModulePitch(centers[1][2], centers[2][2], logicalDistance);
//					modulePitch[3] = getAreaModulePitch(centers[2][1], centers[2][2], logicalDistance);
//					
//					baseLineX.setP1(centers[1][1]);
//					baseLineY.setP1(centers[1][1]);
//
//					baseLineX.setP2(centers[1][2]);
//
//					baseLineY.setP2(centers[2][1]);
//				}
//				else if (ax == 2 && ay == 1) {
//					modulePitch[0] = getAreaModulePitch(centers[2][1], centers[3][1], logicalDistance);
//					modulePitch[1] = getAreaModulePitch(centers[2][1], centers[2][2], logicalDistance);
//					modulePitch[2] = getAreaModulePitch(centers[2][2], centers[3][2], logicalDistance);
//					modulePitch[3] = getAreaModulePitch(centers[3][1], centers[3][2], logicalDistance);
//					
//					baseLineX.setP1(centers[2][1]);
//					baseLineY.setP1(centers[2][1]);
//					baseLineX.setP2(centers[2][2]);
//
//					
//					axis.setOrigin(centers[3][1]);
//					axis.setModulePitch(modulePitch[0]);
//					baseLineY.setP2(axis.translate(6, 0));
//				}
//				else if (ax == 0 && ay == 2) {
//					modulePitch[0] = getAreaModulePitch(centers[0][2], centers[1][2], logicalDistance);
//					axis.setOrigin(centers[0][3]);
//					modulePitch[1] = getAreaModulePitch(centers[0][2], axis.translate(3,0), logicalDistance + 3);
//					//axis.setModulePitch(modulePitch[0]);
//					modulePitch[2] = getAreaModulePitch(axis.translate(0,-3), centers[1][3], logicalDistance + 3);
//					//axis.setModulePitch(modulePitch[2]);
//					modulePitch[3] = getAreaModulePitch(centers[1][2], centers[1][3], logicalDistance);
//					
//					
//					axis.setOrigin(centers[0][2]);
//					axis.setModulePitch(modulePitch[0]);
//					baseLineX.setP1(axis.translate(-6,0));
//					baseLineY.setP1(axis.translate(-6,0));
//					axis.setOrigin(centers[0][3]);
//					axis.setModulePitch(modulePitch[2]);
//					baseLineX.setP2(axis.translate(-3, 3));
//					
//
//					
//					baseLineY.setP2(centers[1][2]);			
//				}
//				else if (ax == 1 && ay == 2) {
//					modulePitch[0] = getAreaModulePitch(centers[1][2], centers[2][2], logicalDistance);
//					modulePitch[1] = getAreaModulePitch(centers[1][2], centers[1][3], logicalDistance);
//					modulePitch[2] = getAreaModulePitch(centers[1][3], centers[2][3], logicalDistance);
//					modulePitch[3] = getAreaModulePitch(centers[2][2], centers[2][3], logicalDistance);
//					
//					baseLineX.setP1(centers[1][2]);
//					baseLineY.setP1(centers[1][2]);
//
//					axis.setOrigin(centers[1][3]);
//					axis.setModulePitch(modulePitch[1]);
//					baseLineX.setP2(axis.translate(0,6));
//
//					
//					baseLineY.setP2(centers[2][2]);
//				}
//				else if (ax == 2 && ay == 2) {
//					modulePitch[0] = getAreaModulePitch(centers[2][2], centers[3][2], logicalDistance);
//					modulePitch[1] = getAreaModulePitch(centers[2][2], centers[2][3], logicalDistance);
//					modulePitch[2] = getAreaModulePitch(centers[2][3], centers[3][3], logicalDistance);
//					modulePitch[3] = getAreaModulePitch(centers[3][2], centers[3][3], logicalDistance);
//					
//					baseLineX.setP1(centers[2][2]);
//					baseLineY.setP1(centers[2][2]);
//
//					axis.setOrigin(centers[2][3]);
//					axis.setModulePitch(modulePitch[1]);
//					baseLineX.setP2(axis.translate(0,6));
//
//					axis.setOrigin(centers[3][2]);
//					axis.setModulePitch(modulePitch[0]);
//					baseLineY.setP2(axis.translate(6,0));
//				}
//				
//
//
//				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[2]);
//					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[3]);
//					gridLineY.setP2(axis.translate(0,i));
//					
//
//					samplingGrid[ax][ay][0][i] = gridLineX;
//					samplingGrid[ax][ay][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;
//	}
	
	//椞堟撪偺儌僕儏乕儖僺僢僠傪摼傞
	int getAreaModulePitch(Point start, Point end, int logicalDistance) {
		Line tempLine;
		tempLine = new Line(start, end);
		int realDistance = tempLine.getLength();
		int modulePitch = (realDistance << DECIMAL_POINT) / logicalDistance;
		return modulePitch;
	}

	
	//gridLines[areaX][areaY][direction(x=0,y=1)][EachLines]	
	boolean[][] getQRCodeMatrix(boolean[][] image, Line[][][][] gridLines) throws ArrayIndexOutOfBoundsException {
		int gridSize = gridLines.length * gridLines[0][0][0].length;
		if (gridLines.length >= 2)
			gridSize--;
		boolean[][] sampledMatrix = new boolean[gridSize][gridSize];
		for (int ay = 0; ay < gridLines[0].length; ay++) {
			for (int ax = 0; ax < gridLines.length; ax++) {
				for (int y = 0; y < gridLines[0][0][1].length; y++) {
					for (int x = 0; x < gridLines[0][0][0].length; x++) {
						int x1 = gridLines[ax][ay][0][x].getP1().getX();
						int y1 = gridLines[ax][ay][0][x].getP1().getY();
						int x2 = gridLines[ax][ay][0][x].getP2().getX();
						int y2 = gridLines[ax][ay][0][x].getP2().getY();
						int x3 = gridLines[ax][ay][1][y].getP1().getX();
						int y3 = gridLines[ax][ay][1][y].getP1().getY();
						int x4 = gridLines[ax][ay][1][y].getP2().getX();
						int y4 = gridLines[ax][ay][1][y].getP2().getY();
						
						int e = (y2 - y1) * (x3 - x4) - (y4 - y3) * (x1 - x2);
						int f = (x1 * y2 - x2 * y1) * (x3 - x4) - (x3 * y4 - x4 * y3) * (x1 - x2);
						int g = (x3 * y4 - x4 * y3) * (y2 - y1) - (x1 * y2 - x2 * y1) * (y4 - y3);
						try {
							sampledMatrix[ax * gridLines[0][0][0].length + x - ax][ay * gridLines[0][0][1].length + y - ay] = 
								image[f / e][g / e];
						}
						catch (ArrayIndexOutOfBoundsException exception) {
							sampledMatrix[ax * gridLines[0][0][0].length + x - ax][ay * gridLines[0][0][1].length + y - ay] = 
								POINT_LIGHT;					
						}
						//canvas.drawPoint(new Point(f /e, g /e), Color.WHITE);
					}
				}
				
			}
		}

		return sampledMatrix;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -