private void redrawBoard() {
		boardImage = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
		Graphics2D g = boardImage.createGraphics();

		g.setColor(Color.WHITE);
		g.fillRect(0, 0, imageWidth, imageHeight);
		g.setColor(BOARD_COLOR);
		g.fillRect(round(offsetX), round(offsetY), boardWidth, boardWidth);

		g.setColor(Color.BLACK);
		// Bounds & Grid
		for (int i = 0; i < boardSize; ++i) {
			g.drawLine(getCenterX(i), getCenterY(0), getCenterX(i), getCenterY(boardSize - 1));
			g.drawLine(getCenterX(0), getCenterY(i), getCenterX(boardSize - 1), getCenterY(i));
		}
		// Small Circles
		double small = Math.min(2, (double) boardWidth / 200);
		for (int x = 0; x < boardSize; ++x) {
			for (int y = 0; y < boardSize; ++y) {
				g.fillOval(round(getCenterX(x) - small), round(getCenterY(y) - small), round(2 * small), round(2 * small));
			}
		}
		// Large
		double large = Math.min(4, (double) boardWidth / 100);
		for (Intersection starPoint : StarPointRegistry.getStarPoints(boardSize)) {
			g.fillOval(round(getCenterX(starPoint.x) - large), round(getCenterY(starPoint.y) - large), round(2 * large), round(2 * large));
		}
	}