You need a random base location for each of the image copies, but from there, the rows and columns must be in order. That base is best seen as the top,left corner and you should pick it outside the loops so it doesn't change during the pixel copy operation. Try something like:
targetX = random.randint(startX, endX)
targetY = random.randint(startY, endY)
for count in range (0, count):
for sourceX in range(0, getWidth(pic)):
for sourceY in range(0, getHeight(pic)):
color = getColor(getPixel(pic, sourceX, sourceY))
setColor(getPixel(canv, targetX+sourceX, targetY+sourceY), color)