9fans.net/go@v0.0.5/draw/memdraw/unload.go (about) 1 // #include <u.h> 2 // #include <libc.h> 3 // #include <draw.h> 4 // #include <memdraw.h> 5 6 package memdraw 7 8 import ( 9 "fmt" 10 11 "9fans.net/go/draw" 12 ) 13 14 func unloadmemimage(i *Image, r draw.Rectangle, data []uint8) (int, error) { 15 if !draw.RectInRect(r, i.R) { 16 return 0, fmt.Errorf("invalid rectangle") 17 } 18 l := draw.BytesPerLine(r, i.Depth) 19 if len(data) < l*r.Dy() { 20 return 0, fmt.Errorf("buffer too small") 21 } 22 ndata := l * r.Dy() 23 q := byteaddr(i, r.Min) 24 for y := r.Min.Y; y < r.Max.Y; y++ { 25 copy(data[:l], q[:l]) 26 q = q[i.Width*4:] 27 data = data[l:] 28 } 29 return ndata, nil 30 }