package draw9 import ( "fmt" "image") // Load accepts image(6) data and loads it into the Image dst using the draw(3) 'y' message.func (dst *Image) Load(r image.Rectangle, data []byte) (int, error) { dst.Display.mu.Lock() defer dst.Display.mu.Unlock() return dst.load(r, data)} func (dst *Image) load(r image.Rectangle, data []byte) (int, error) { i := dst chunk := i.Display.bufsize - 64 if !r.In(i.R) { return 0, fmt.Errorf("loadimage: bad rectangle") } bpl := BytesPerLine(r, i.Depth) n := bpl * r.Dy() if n > len(data) { return 0, fmt.Errorf("loadimage: insufficient data") } ndata := 0 for r.Max.Y > r.Min.Y { dy := r.Dy() if dy*bpl > chunk { dy = chunk / bpl } if dy <= 0 { return 0, fmt.Errorf("loadimage: image too wide for buffer") } n := dy * bpl a := i.Display.bufimage(21 + n) a[0] = 'y' bplong(a[1:], uint32(i.ID)) bplong(a[5:], uint32(r.Min.X)) bplong(a[9:], uint32(r.Min.Y)) bplong(a[13:], uint32(r.Max.X)) bplong(a[17:], uint32(r.Min.Y+dy)) copy(a[21:], data) ndata += n data = data[n:] r.Min.Y += dy } /* if err := i.Display.flush(false); err != nil { return ndata, err } */ return ndata, nil}
package draw9
import (
"fmt"
"image"
)
// Load accepts image(6) data and loads it into the Image dst using the draw(3) 'y' message.
func (dst *Image) Load(r image.Rectangle, data []byte) (int, error) {
dst.Display.mu.Lock()
defer dst.Display.mu.Unlock()
return dst.load(r, data)
}
func (dst *Image) load(r image.Rectangle, data []byte) (int, error) {
i := dst
chunk := i.Display.bufsize - 64
if !r.In(i.R) {
return 0, fmt.Errorf("loadimage: bad rectangle")
}
bpl := BytesPerLine(r, i.Depth)
n := bpl * r.Dy()
if n > len(data) {
return 0, fmt.Errorf("loadimage: insufficient data")
}
ndata := 0
for r.Max.Y > r.Min.Y {
dy := r.Dy()
if dy*bpl > chunk {
dy = chunk / bpl
}
if dy <= 0 {
return 0, fmt.Errorf("loadimage: image too wide for buffer")
}
n := dy * bpl
a := i.Display.bufimage(21 + n)
a[0] = 'y'
bplong(a[1:], uint32(i.ID))
bplong(a[5:], uint32(r.Min.X))
bplong(a[9:], uint32(r.Min.Y))
bplong(a[13:], uint32(r.Max.X))
bplong(a[17:], uint32(r.Min.Y+dy))
copy(a[21:], data)
ndata += n
data = data[n:]
r.Min.Y += dy
}
/*
if err := i.Display.flush(false); err != nil {
return ndata, err
}
*/
return ndata, nil
}