1package drawing 2 3import ( 4 "math" 5 6 "golang.org/x/image/math/fixed" 7 8 "github.com/golang/freetype/raster" 9 "github.com/golang/freetype/truetype" 10) 11 12// PixelsToPoints returns the points for a given number of pixels at a DPI. 13func PixelsToPoints(dpi, pixels float64) (points float64) { 14 points = (pixels * 72.0) / dpi 15 return 16} 17 18// PointsToPixels returns the pixels for a given number of points at a DPI. 19func PointsToPixels(dpi, points float64) (pixels float64) { 20 pixels = (points * dpi) / 72.0 21 return 22} 23 24func abs(i int) int { 25 if i < 0 { 26 return -i 27 } 28 return i 29} 30 31func distance(x1, y1, x2, y2 float64) float64 { 32 return vectorDistance(x2-x1, y2-y1) 33} 34 35func vectorDistance(dx, dy float64) float64 { 36 return float64(math.Sqrt(dx*dx + dy*dy)) 37} 38 39func toFtCap(c LineCap) raster.Capper { 40 switch c { 41 case RoundCap: 42 return raster.RoundCapper 43 case ButtCap: 44 return raster.ButtCapper 45 case SquareCap: 46 return raster.SquareCapper 47 } 48 return raster.RoundCapper 49} 50 51func toFtJoin(j LineJoin) raster.Joiner { 52 switch j { 53 case RoundJoin: 54 return raster.RoundJoiner 55 case BevelJoin: 56 return raster.BevelJoiner 57 } 58 return raster.RoundJoiner 59} 60 61func pointToF64Point(p truetype.Point) (x, y float64) { 62 return fUnitsToFloat64(p.X), -fUnitsToFloat64(p.Y) 63} 64 65func fUnitsToFloat64(x fixed.Int26_6) float64 { 66 scaled := x << 2 67 return float64(scaled/256) + float64(scaled%256)/256.0 68} 69