public void process(char c)
  {
    if (output == null || lastChar != c)
    {
      createOutputImage(c);
      lastChar = c;
    }

    Graphics2D g = output.createGraphics();

      int height = input.getHeight(),
          width = input.getWidth(),
          ascent = metrics.getAscent(),
          charWidth = metrics.charWidth(c),
          charHeight = ascent + metrics.getDescent(),
          charSize = Math.max(charWidth, charHeight);

      String s = Character.toString(c);

      g.setFont(font);

      for (int y = 0; y < height; y++)
      {
        for (int x = 0; x < width; x++)
        {
          g.setColor(colors.get(input.getRGB(x, y)));
          g.drawString(s, x * charSize, y * charSize + ascent);
        }
      }

      g.dispose();
  }