void renderTilemap(final Bitmap tileMap) {
		
		// Finds the bounds (in world space) of the pixels that are both visible and are on the tile map
		final int startX = (xOffset < 0) ? 0 : xOffset;
		final int endX = (xOffset + imageWidth > tileMap.width<<tileSize) ?  tileMap.width<<tileSize :imageWidth + xOffset;
		final int startY = (yOffset < 0) ? 0 : yOffset;
		final int endY = (yOffset + imageHeight > tileMap.height<<tileSize) ?  tileMap.height<<tileSize : imageHeight + yOffset;
		
		int pixelsY, mapY, worldX;
		
		// For each visible row in world space defined by the bounds above
		for (int worldY = startY; worldY < endY; worldY++) {
			
			// Find the corresponding row on the view port and multiply it by image.getWidth() to get its absolute position on pixels[]
			pixelsY = (worldY - yOffset) * imageWidth;
			
			// Finds the y of the map tile the pixel occupies and multiply it by tileMap.width
			mapY = (worldY>>tileSize) * tileMap.width;
			
			// For each visible column in world space defined by the bounds above
			for (worldX = startX; worldX < endX; worldX++) {
				
				// Temporary
				pixels[(worldX - xOffset) + pixelsY] = tileMap.pixels[(worldX>>tileSize) + mapY];
				
			}
			
		}
		
	}