nYTiles = nYTiles + 1
			for y in range(nYTiles):
				for x in range(nXTiles):
					# Calculate the correct size and offset for each tile
					tileX = x * tileSizeX
					tileY = y * tileSizeY
					effTileSizeX = tileSizeX * currentScale
					if ((tileX * currentScale) + effTileSizeX) >= width:
						effTileSizeX = width - (tileX * currentScale)
					effTileSizeY = tileSizeY * currentScale
					if ((tileY * currentScale) + effTileSizeY) >= height:
						effTileSizeY = height - (tileY * currentScale)

					# Read the tile, create the downsampled version and then write to output
					tile = reader.openBytes(image, tileX * currentScale, tileY * currentScale, effTileSizeX, effTileSizeY)
					downsample = scaler.downsample(tile, effTileSizeX, effTileSizeY, currentScale, FormatTools.getBytesPerPixel(type), reader.isLittleEndian(), 
					    FormatTools.isFloatingPoint(type), reader.getRGBChannelCount(), reader.isInterleaved())
					writer.saveBytes(image, downsample, tileX, tileY, effTileSizeX / currentScale, effTileSizeY / currentScale)

writer.close();
reader.close();

IJ.log("Done")

options = ImporterOptions()
options.setColorMode(ImporterOptions.COLOR_MODE_COMPOSITE)
options.setId(outFile)
options.setSeriesOn(2, True);
imps = BF.openImagePlus(options)
for imp in imps:
    imp.show()
for i in range(resolutions):
    divScale = Math.pow(scale, i + 1)
    omeMeta.setResolutionSizeX(PositiveInteger(int(reader.getSizeX() / divScale)), 0, i + 1)
    omeMeta.setResolutionSizeY(PositiveInteger(int(reader.getSizeY() / divScale)), 0, i + 1)

# setup writer
writer = OMETiffWriter()
writer.setMetadataRetrieve(omeMeta)
writer.setId(outFile)
type = reader.getPixelType()

# read and write main image
img = reader.openBytes(0)
writer.saveBytes(0, img)

# create ImageScaler for downsampling
scaler = SimpleImageScaler()

# generate downsampled resolutions and write to output
for i in range(resolutions):
    writer.setResolution(i + 1)
    x = omeMeta.getResolutionSizeX(0, i + 1).getValue()
    y = omeMeta.getResolutionSizeY(0, i + 1).getValue()
    downsample = scaler.downsample(img, reader.getSizeX(), reader.getSizeY(), Math.pow(scale, i + 1),
         FormatTools.getBytesPerPixel(type), reader.isLittleEndian(),
         FormatTools.isFloatingPoint(type), reader.getRGBChannelCount(),
         reader.isInterleaved())
    writer.saveBytes(0, downsample)

writer.close()
reader.close()