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  }