code: func Blend(dest *Image, src image.Image, sp image.Point) {
  	rsrc, dsrc := src.Bounds(), dest.Bounds()
  	_, smxx, _, smxy := rsrc.Min.X, rsrc.Max.X, rsrc.Min.Y, rsrc.Max.Y
  	dmnx, dmxx, dmny, dmxy := dsrc.Min.X, dsrc.Max.X, dsrc.Min.Y, dsrc.Max.Y
  
  	var sx, dx, sy, dy int
  	var sr, sg, sb, sa uint32
  	var bgra BGRA
  	var alpha float64
  	for sx, dx = sp.X, dmnx; sx < smxx && dx < dmxx; sx, dx = sx+1, dx+1 {
  		for sy, dy = sp.Y, dmny; sy < smxy && dy < dmxy; sy, dy = sy+1, dy+1 {
  			sr, sg, sb, sa = src.At(sx, sy).RGBA()
  			bgra = dest.At(dx, dy).(BGRA)
  			alpha = float64(uint8(sa)) / 255.0
  
  			dest.SetBGRA(dx, dy, BGRA{
  				blend(uint8(bgra.B), uint8(sb), alpha),
  				blend(uint8(bgra.G), uint8(sg), alpha),
  				blend(uint8(bgra.R), uint8(sr), alpha),
  				0xff,
  			})
  		}
  	}
  }
docs: // Blend alpha blends the src image (starting at the spt Point) into the
  // dest image.
  // If you're blending into a solid background color, use BlendBgColor
  // instead. (It's more efficient.)
  // Blend does not (currently) blend with the destination's alpha channel,
  // only the source's alpha channel.