from cImage import * def scaleDown(oldImage,xscale,yscale): '''Returns a new image scaled down (by integer ratios) from the oldImage''' oldW = oldImage.getWidth() oldH = oldImage.getHeight() newW = oldW//xscale newH = oldH//yscale newImage = EmptyImage(newW,newH) for newRow in range(newH): for newCol in range(newW): oldPixels = [oldImage.getPixel(xscale*newCol+dx,yscale*newRow+dy) for dx in range(xscale) for dy in range(yscale)] newImage.setPixel(newCol,newRow, averagePixel(oldPixels)) return newImage def mean(values): return sum(values)/len(values) def averagePixel(pixels): return Pixel(mean([pixel.getRed() for pixel in pixels]), mean([pixel.getGreen() for pixel in pixels]), mean([pixel.getBlue() for pixel in pixels])) def show(image): win = ImageWin('Image', image.getWidth(), image.getHeight()) image.draw(win) win.exitOnClick()