Added Support for Drawing on GrayScale Image

This commit is contained in:
Akshit Jain 2016-10-19 20:09:14 +05:30
parent 38b4c392ad
commit c9ad941599

View file

@ -180,6 +180,53 @@ func NewRGBAPainter(m *image.RGBA) *RGBAPainter {
return &RGBAPainter{Image: m}
}
//An GrayPainter is a Painter that paints Spans onto a *image.Gray.
type GrayPainter struct {
// Image is the image to compose onto.
Image *image.Gray
//cy is the 8-bit color to paint the spans.
cy uint8
}
// Paint satisfies the Painter interface.
func (r GrayPainter) Paint(ss []Span, done bool) {
b := r.Image.Bounds()
for _, s := range ss {
if s.Y < b.Min.Y {
continue
}
if s.Y >= b.Max.Y {
return
}
if s.X0 < b.Min.X {
s.X0 = b.Min.X
}
if s.X1 > b.Max.X {
s.X1 = b.Max.X
}
if s.X0 >= s.X1 {
continue
}
base := (s.Y-r.Image.Rect.Min.Y)*r.Image.Stride - r.Image.Rect.Min.X
p := r.Image.Pix[base+s.X0 : base+s.X1]
color := r.cy
for i := range p {
p[i] = color
}
}
}
// SetColor sets the color to paint the spans.
func (r *GrayPainter) SetColor(c color.Color) {
c1 := color.GrayModel.Convert(c).(color.Gray).Y
r.cy = c1
}
//NewGRAYPainter creates a new GrayPainter for the given image
func NewGRAYPainter(m *image.Gray) *GrayPainter {
return &GrayPainter{Image: m}
}
// A MonochromePainter wraps another Painter, quantizing each Span's alpha to
// be either fully opaque or fully transparent.
type MonochromePainter struct {