diff --git a/batch.go b/batch.go
index 712b15ca59cab96b0111cde038a99778fc4b9345..b82253620915e5a8ba42debb0c53819e211f812b 100644
--- a/batch.go
+++ b/batch.go
@@ -66,7 +66,7 @@ func (b *Batch) SetColorMask(c color.Color) {
 		b.col = NRGBA{1, 1, 1, 1}
 		return
 	}
-	b.col = NRGBAModel.Convert(c).(NRGBA)
+	b.col = ToNRGBA(c)
 }
 
 // MakeTriangles returns a specialized copy of the provided Triangles that draws onto this Batch.
diff --git a/data.go b/data.go
index 1057880e745b22a6c896aba1f6afcf15697fb8d7..dbe44f30df78bc1a58a1fee7455e891dc7e2fdcd 100644
--- a/data.go
+++ b/data.go
@@ -284,7 +284,7 @@ func (pd *PictureData) Color(at Vec) NRGBA {
 	if !pd.Rect.Contains(at) {
 		return NRGBA{0, 0, 0, 0}
 	}
-	return NRGBAModel.Convert(pd.Pix[pd.Index(at)]).(NRGBA)
+	return ToNRGBA(pd.Pix[pd.Index(at)])
 }
 
 // SetColor changes the color located at the given position.
@@ -292,5 +292,11 @@ func (pd *PictureData) SetColor(at Vec, col color.Color) {
 	if !pd.Rect.Contains(at) {
 		return
 	}
-	pd.Pix[pd.Index(at)] = color.NRGBAModel.Convert(col).(color.NRGBA)
+	nrgba := ToNRGBA(col)
+	pd.Pix[pd.Index(at)] = color.NRGBA{
+		R: uint8(nrgba.R * 255),
+		G: uint8(nrgba.G * 255),
+		B: uint8(nrgba.B * 255),
+		A: uint8(nrgba.A * 255),
+	}
 }
diff --git a/imdraw/imdraw.go b/imdraw/imdraw.go
index 3f678db832349e81ed1e0695802aa8916f599b29..39ac87e024cebbb2d73375d0878e4581ac2c87e2 100644
--- a/imdraw/imdraw.go
+++ b/imdraw/imdraw.go
@@ -127,7 +127,7 @@ func (imd *IMDraw) pushPt(pos pixel.Vec, pt point) {
 
 // Color sets the color of the next Pushed points.
 func (imd *IMDraw) Color(color color.Color) {
-	imd.opts.col = pixel.NRGBAModel.Convert(color).(pixel.NRGBA)
+	imd.opts.col = pixel.ToNRGBA(color)
 }
 
 // Picture sets the Picture coordinates of the next Pushed points.
@@ -160,7 +160,7 @@ func (imd *IMDraw) SetMatrix(m pixel.Matrix) {
 
 // SetColorMask sets a color that all further point's color will be multiplied by.
 func (imd *IMDraw) SetColorMask(color color.Color) {
-	imd.mask = pixel.NRGBAModel.Convert(color).(pixel.NRGBA)
+	imd.mask = pixel.ToNRGBA(color)
 	imd.batch.SetColorMask(imd.mask)
 }
 
diff --git a/pixelgl/canvas.go b/pixelgl/canvas.go
index 4b37078963a2768e7c3c5c890c38ef90c4b1d760..01a36bf497a5f981958baa414f7a7d092e9f5c7d 100644
--- a/pixelgl/canvas.go
+++ b/pixelgl/canvas.go
@@ -162,7 +162,7 @@ func (c *Canvas) SetMatrix(m pixel.Matrix) {
 func (c *Canvas) SetColorMask(col color.Color) {
 	nrgba := pixel.NRGBA{R: 1, G: 1, B: 1, A: 1}
 	if col != nil {
-		nrgba = pixel.NRGBAModel.Convert(col).(pixel.NRGBA)
+		nrgba = pixel.ToNRGBA(col)
 	}
 	c.col = mgl32.Vec4{
 		float32(nrgba.R),
@@ -238,7 +238,7 @@ func (c *Canvas) setGlhfBounds() {
 func (c *Canvas) Clear(color color.Color) {
 	c.orig.dirty = true
 
-	nrgba := pixel.NRGBAModel.Convert(color).(pixel.NRGBA)
+	nrgba := pixel.ToNRGBA(color)
 
 	// color masking
 	nrgba = nrgba.Mul(pixel.NRGBA{
diff --git a/sprite.go b/sprite.go
index dee7e3790b8cfa7e966201e1fdc0e4776287011c..55e396849a6fd2392aa28f1f47d0115975f4741b 100644
--- a/sprite.go
+++ b/sprite.go
@@ -67,7 +67,7 @@ func (s *Sprite) Matrix() Matrix {
 // Note, that this has nothing to do with BasicTarget's SetColorMask method. This only affects this
 // Sprite and is usable with any Target.
 func (s *Sprite) SetColorMask(mask color.Color) {
-	s.mask = NRGBAModel.Convert(mask).(NRGBA)
+	s.mask = ToNRGBA(mask)
 	s.calcData()
 }