private BufferedImage createImage() {
		final int boldWidth = 3;
		final int sudoHeight = 9 * cellHeight + 2 * yOffset + boldWidth;
		final int sudoWidth = 9 * cellWidth + 2 * xOffset + boldWidth;

		final EmptyImageBuilder builder = new EmptyImageBuilder(sudoWidth, sudoHeight + textTotalHeight, Color.WHITE);
		final BufferedImage im = builder.getBufferedImage();
		final Graphics2D g2d = builder.getGraphics2D();

		g2d.translate(xOffset, yOffset);

		for (int x = 0; x < 9; x++) {
			for (int y = 0; y < 9; y++) {
				final int num = sudoku.getGiven(x, y);
				if (num > 0) {
					final TextBlock text = TextBlockUtils.create(Arrays.asList("" + num), new FontConfiguration(
							numberFont, HtmlColor.BLACK), HorizontalAlignement.CENTER);
					text.drawTOBEREMOVED(new ColorMapperIdentity(), g2d, numberxOffset + x * cellWidth, numberyOffset
							+ y * cellHeight);
				}
			}
		}

		for (int i = 0; i < 10; i++) {
			final boolean bold = i % boldWidth == 0;
			final int w = bold ? boldWidth : 1;
			g2d.fillRect(0, i * cellHeight, 9 * cellWidth + boldWidth, w);
		}
		for (int i = 0; i < 10; i++) {
			final boolean bold = i % boldWidth == 0;
			final int w = bold ? boldWidth : 1;
			g2d.fillRect(i * cellWidth, 0, w, 9 * cellHeight + boldWidth);
		}

		g2d.translate(0, sudoHeight);
		final List<String> texts = new ArrayList<String>();
		texts.add("http://plantuml.sourceforge.net");
		texts.add("Seed " + Long.toString(sudoku.getSeed(), 36));
		texts.add("Difficulty " + sudoku.getRatting());
		final TextBlock textBlock = TextBlockUtils.create(texts, new FontConfiguration(font, HtmlColor.BLACK),
				HorizontalAlignement.LEFT);
		textBlock.drawTOBEREMOVED(new ColorMapperIdentity(), g2d, 0, 0);

		g2d.dispose();
		return im;
	}