mirror of
https://github.com/golang/go
synced 2024-11-26 05:27:57 -07:00
5c2c57e5db
R=r DELTA=471 (471 added, 0 deleted, 0 changed) OCL=35090 CL=35099
118 lines
2.5 KiB
Go
118 lines
2.5 KiB
Go
// Copyright 2009 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package draw
|
|
|
|
import "image"
|
|
|
|
// A Color represents a color with 8-bit R, G, B, and A values,
|
|
// packed into a uint32—0xRRGGBBAA—so that comparison
|
|
// is defined on colors.
|
|
// Color implements image.Color.
|
|
// Color also implements image.Image: it is a
|
|
// 10⁹x10⁹-pixel image of uniform color.
|
|
type Color uint32
|
|
|
|
// Check that Color implements image.Color and image.Image
|
|
var _ image.Color = Black
|
|
var _ image.Image = Black
|
|
|
|
var (
|
|
Opaque Color = 0xFFFFFFFF;
|
|
Transparent Color = 0x00000000;
|
|
Black Color = 0x000000FF;
|
|
White Color = 0xFFFFFFFF;
|
|
Red Color = 0xFF0000FF;
|
|
Green Color = 0x00FF00FF;
|
|
Blue Color = 0x0000FFFF;
|
|
Cyan Color = 0x00FFFFFF;
|
|
Magenta Color = 0xFF00FFFF;
|
|
Yellow Color = 0xFFFF00FF;
|
|
PaleYellow Color = 0xFFFFAAFF;
|
|
DarkYellow Color = 0xEEEE9EFF;
|
|
DarkGreen Color = 0x448844FF;
|
|
PaleGreen Color = 0xAAFFAAFF;
|
|
MedGreen Color = 0x88CC88FF;
|
|
DarkBlue Color = 0x000055FF;
|
|
PaleBlueGreen Color = 0xAAFFFFFF;
|
|
PaleBlue Color = 0x0000BBFF;
|
|
BlueGreen Color = 0x008888FF;
|
|
GreyGreen Color = 0x55AAAAFF;
|
|
PaleGreyGreen Color = 0x9EEEEEFF;
|
|
YellowGreen Color = 0x99994CFF;
|
|
MedBlue Color = 0x000099FF;
|
|
GreyBlue Color = 0x005DBBFF;
|
|
PaleGreyBlue Color = 0x4993DDFF;
|
|
PurpleBlue Color = 0x8888CCFF;
|
|
)
|
|
|
|
func (c Color) RGBA() (r, g, b, a uint32) {
|
|
x := uint32(c);
|
|
r, g, b, a = x>>24, (x>>16)&0xFF, (x>>8)&0xFF, x&0xFF;
|
|
r |= r<<8;
|
|
r |= r<<16;
|
|
g |= g<<8;
|
|
g |= g<<16;
|
|
b |= b<<8;
|
|
b |= b<<16;
|
|
a |= a<<8;
|
|
a |= a<<16;
|
|
return;
|
|
}
|
|
|
|
// SetAlpha returns the color obtained by changing
|
|
// c's alpha value to a and scaling r, g, and b appropriately.
|
|
func (c Color) SetAlpha(a uint8) Color {
|
|
r, g, b, oa := c>>24, (c>>16)&0xFF, (c>>8)&0xFF, c&0xFF;
|
|
if oa == 0 {
|
|
return 0
|
|
}
|
|
r = r*Color(a)/oa;
|
|
if r < 0 {
|
|
r = 0;
|
|
}
|
|
if r > 0xFF {
|
|
r = 0xFF;
|
|
}
|
|
g = g*Color(a)/oa;
|
|
if g < 0 {
|
|
g = 0;
|
|
}
|
|
if g > 0xFF {
|
|
g = 0xFF;
|
|
}
|
|
b = b*Color(a)/oa;
|
|
if b < 0 {
|
|
b = 0;
|
|
}
|
|
if b > 0xFF {
|
|
b = 0xFF;
|
|
}
|
|
return r<<24 | g<<16 | b<<8 | Color(a);
|
|
}
|
|
|
|
func (c Color) Width() int {
|
|
return 1e9;
|
|
}
|
|
|
|
func (c Color) Height() int {
|
|
return 1e9;
|
|
}
|
|
|
|
func (c Color) At(x, y int) image.Color {
|
|
return c;
|
|
}
|
|
|
|
func toColor(color image.Color) image.Color {
|
|
if c, ok := color.(Color); ok {
|
|
return c;
|
|
}
|
|
r, g, b, a := color.RGBA();
|
|
return Color(r>>24<<24 | g>>24<<16 | b>>24<<8 | a>>24);
|
|
}
|
|
|
|
func (c Color) ColorModel() image.ColorModel {
|
|
return image.ColorModelFunc(toColor);
|
|
}
|