private List<String> encode4(BufferedImage img) {
		final int width = img.getWidth();
		final int height = img.getHeight();
		// final int type = img.getType();

		final List<String> result = new ArrayList<String>();
		final AsciiEncoder encoder = new AsciiEncoder();

		for (int y = 0; y < height; y += 3) {
			final StringBuilder sb = new StringBuilder();
			for (int x = 0; x < width; x++) {
				final int level1 = getGrayOn16(img, x, y) / 4;
				assert level1 >= 0 && level1 <= 3;
				final int level2 = getGrayOn16(img, x, y + 1) / 4;
				assert level2 >= 0 && level2 <= 3;
				final int level3 = getGrayOn16(img, x, y + 2) / 4;
				assert level3 >= 0 && level3 <= 3;
				final int v = level1 * 16 + level2 * 4 + level3;
				sb.append(encoder.encode6bit((byte) v));
			}
			result.add(sb.toString());
		}
		return Collections.unmodifiableList(result);
	}