44 lines · 940 B · Go
RawDownload
package draw9 import (	"fmt"	"image") func (dst *Image) Cload(r image.Rectangle, data []byte) (int, error) {	dst.Display.mu.Lock()	defer dst.Display.mu.Unlock()	i := dst	if !r.In(i.R) {		return 0, fmt.Errorf("cloadimage: bad rectangle")	} 	miny := r.Min.Y	m := 0	ncblock := compblocksize(r, i.Depth)	for miny != r.Max.Y {		maxy := atoi(data[0*12:])		nb := atoi(data[1*12:])		if maxy <= miny || r.Max.Y < maxy {			return 0, fmt.Errorf("creadimage: bad maxy %d", maxy)		}		data = data[2*12:]		m += 2 * 12		if nb <= 0 || ncblock < nb || nb > len(data) {			return 0, fmt.Errorf("creadimage: bad count %d", nb)		}		// TODO: error check?		a := i.Display.bufimage(21 + nb)		a[0] = 'Y'		bplong(a[1:], i.ID)		bplong(a[5:], uint32(r.Min.Y))		bplong(a[9:], uint32(miny))		bplong(a[13:], uint32(r.Max.Y))		bplong(a[17:], uint32(maxy))		copy(a[21:], data)		miny = maxy		data = data[nb:]		m += nb	}	return m, nil}