Commit a3372bd6 authored by Nigel Tao's avatar Nigel Tao

New image.A type, to represent anti-aliased font glyphs.

R=r, rsc
CC=golang-dev
https://golang.org/cl/199052
parent d00210f5
...@@ -100,6 +100,18 @@ func (c NRGBA64Color) RGBA() (r, g, b, a uint32) { ...@@ -100,6 +100,18 @@ func (c NRGBA64Color) RGBA() (r, g, b, a uint32) {
return return
} }
// An AlphaColor represents an 8-bit alpha.
type AlphaColor struct {
A uint8
}
func (c AlphaColor) RGBA() (r, g, b, a uint32) {
a = uint32(c.A)
a |= a << 8
a |= a << 16
return a, a, a, a
}
// A ColorModel can convert foreign Colors, with a possible loss of precision, to a Color // A ColorModel can convert foreign Colors, with a possible loss of precision, to a Color
// from its own color model. // from its own color model.
type ColorModel interface { type ColorModel interface {
...@@ -176,6 +188,14 @@ func toNRGBA64Color(c Color) Color { ...@@ -176,6 +188,14 @@ func toNRGBA64Color(c Color) Color {
return NRGBA64Color{uint16(r), uint16(g), uint16(b), uint16(a)} return NRGBA64Color{uint16(r), uint16(g), uint16(b), uint16(a)}
} }
func toAlphaColor(c Color) Color {
if _, ok := c.(AlphaColor); ok { // no-op conversion
return c
}
_, _, _, a := c.RGBA()
return AlphaColor{uint8(a >> 24)}
}
// The ColorModel associated with RGBAColor. // The ColorModel associated with RGBAColor.
var RGBAColorModel ColorModel = ColorModelFunc(toRGBAColor) var RGBAColorModel ColorModel = ColorModelFunc(toRGBAColor)
...@@ -187,3 +207,6 @@ var NRGBAColorModel ColorModel = ColorModelFunc(toNRGBAColor) ...@@ -187,3 +207,6 @@ var NRGBAColorModel ColorModel = ColorModelFunc(toNRGBAColor)
// The ColorModel associated with NRGBA64Color. // The ColorModel associated with NRGBA64Color.
var NRGBA64ColorModel ColorModel = ColorModelFunc(toNRGBA64Color) var NRGBA64ColorModel ColorModel = ColorModelFunc(toNRGBA64Color)
// The ColorModel associated with AlphaColor.
var AlphaColorModel ColorModel = ColorModelFunc(toAlphaColor)
...@@ -135,6 +135,36 @@ func NewNRGBA64(w, h int) *NRGBA64 { ...@@ -135,6 +135,36 @@ func NewNRGBA64(w, h int) *NRGBA64 {
return &NRGBA64{pixel} return &NRGBA64{pixel}
} }
// An Alpha is an in-memory image backed by a 2-D slice of AlphaColor values.
type Alpha struct {
// The Pixel field's indices are y first, then x, so that At(x, y) == Pixel[y][x].
Pixel [][]AlphaColor
}
func (p *Alpha) ColorModel() ColorModel { return AlphaColorModel }
func (p *Alpha) Width() int {
if len(p.Pixel) == 0 {
return 0
}
return len(p.Pixel[0])
}
func (p *Alpha) Height() int { return len(p.Pixel) }
func (p *Alpha) At(x, y int) Color { return p.Pixel[y][x] }
func (p *Alpha) Set(x, y int, c Color) { p.Pixel[y][x] = toAlphaColor(c).(AlphaColor) }
// NewAlpha returns a new Alpha with the given width and height.
func NewAlpha(w, h int) *Alpha {
pixel := make([][]AlphaColor, h)
for y := 0; y < h; y++ {
pixel[y] = make([]AlphaColor, w)
}
return &Alpha{pixel}
}
// A PalettedColorModel represents a fixed palette of colors. // A PalettedColorModel represents a fixed palette of colors.
type PalettedColorModel []Color type PalettedColorModel []Color
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment