9fans.net/go@v0.0.5/draw/bytesperline.go (about)

     1  package draw
     2  
     3  // WordsPerLine returns the number of 32-bit words touched by a scan line of
     4  // the rectangle of specified depth.
     5  func WordsPerLine(r Rectangle, depth int) int {
     6  	return unitsPerLine(r, depth, 32)
     7  }
     8  
     9  // BytesPerLine returns the number of 8-bit bytes touched by a scan line of
    10  // the rectangle of specified depth.
    11  func BytesPerLine(r Rectangle, depth int) int {
    12  	return unitsPerLine(r, depth, 8)
    13  }
    14  
    15  func unitsPerLine(r Rectangle, depth, bitsperunit int) int {
    16  	if depth <= 0 || depth > 32 {
    17  		panic("invalid depth")
    18  	}
    19  
    20  	var l int
    21  	if r.Min.X >= 0 {
    22  		l = (r.Max.X*depth + bitsperunit - 1) / bitsperunit
    23  		l -= (r.Min.X * depth) / bitsperunit
    24  	} else {
    25  		// make positive before divide
    26  		t := (-r.Min.X*depth + bitsperunit - 1) / bitsperunit
    27  		l = t + (r.Max.X*depth+bitsperunit-1)/bitsperunit
    28  	}
    29  	return l
    30  }