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 }