func (dst *Image) EllipseOp(c image.Point, a, b, thick int, src *Image, sp image.Point, op Op) {
	dst.Display.mu.Lock()
	defer dst.Display.mu.Unlock()
	doellipse('e', dst, c, a, b, thick, src, sp, 0, 0, op)
}
EllipseOp draws an ellipse with center c and horizontal and vertical
semiaxes a and b, and thickness 1+2*thick. The source is aligned so sp
corresponds to c.
package draw
import (
	"image"
)
func doellipse(cmd byte, dst *Image, c image.Point, xr, yr, thick int, src *Image, sp image.Point, alpha uint32, phi int, op Op) {
	setdrawop(dst.Display, op)
	a := dst.Display.bufimage(1 + 4 + 4 + 2*4 + 4 + 4 + 4 + 2*4 + 2*4)
	a[0] = cmd
	bplong(a[1:], dst.id)
	bplong(a[5:], src.id)
	bplong(a[9:], uint32(c.X))
	bplong(a[13:], uint32(c.Y))
	bplong(a[17:], uint32(xr))
	bplong(a[21:], uint32(yr))
	bplong(a[25:], uint32(thick))
	bplong(a[29:], uint32(sp.X))
	bplong(a[33:], uint32(sp.Y))
	bplong(a[37:], alpha)
	bplong(a[41:], uint32(phi))
}
func (dst *Image) Ellipse(c image.Point, a, b, thick int, src *Image, sp image.Point) {
	dst.Display.mu.Lock()
	defer dst.Display.mu.Unlock()
	doellipse('e', dst, c, a, b, thick, src, sp, 0, 0, SoverD)
}