commit:3ec508b7c46a608066b608f0b39052927c6971e8
author:Chip Black
committer:Chip Black
date:Mon Oct 26 02:39:36 2015 -0500
parents:d3be8a31ee5b53ce979c48510882a84f38b78452
Add palettes and RGB8 color type
diff --git a/palette/palettes.go b/palette/palettes.go
line changes: +196/-0
index 0000000..5ff08b7
--- /dev/null
+++ b/palette/palettes.go
@@ -0,0 +1,196 @@
+package palette
+
+import "image/color";
+
+var Palettes []color.Palette = []color.Palette {
+    // 0 - EGA 16-color
+    color.Palette{
+        RGB8{0x00, 0x00, 0x00},
+        RGB8{0x00, 0x00, 0xAA},
+        RGB8{0x00, 0xAA, 0x00},
+        RGB8{0x00, 0xAA, 0xAA},
+        RGB8{0xAA, 0x00, 0x00},
+        RGB8{0xAA, 0x00, 0xAA},
+        RGB8{0xAA, 0x55, 0x00},
+        RGB8{0xAA, 0xAA, 0xAA},
+        RGB8{0x55, 0x55, 0x55},
+        RGB8{0x55, 0x55, 0xFF},
+        RGB8{0x55, 0xFF, 0x55},
+        RGB8{0x55, 0xFF, 0xFF},
+        RGB8{0xFF, 0x55, 0x55},
+        RGB8{0xFF, 0x55, 0xFF},
+        RGB8{0xFF, 0xFF, 0x55},
+        RGB8{0xFF, 0xFF, 0xFF},
+    },
+    // 1 - Gray/R/G/B
+    color.Palette{
+        RGB8{0x00, 0x00, 0x00},
+        RGB8{0x3B, 0x3B, 0x3B},
+        RGB8{0x76, 0x76, 0x76},
+        RGB8{0xB8, 0xB8, 0xB8},
+        RGB8{0x68, 0x00, 0x00},
+        RGB8{0x9E, 0x00, 0x00},
+        RGB8{0xD7, 0x00, 0x00},
+        RGB8{0xFE, 0x41, 0x41},
+        RGB8{0x00, 0x39, 0x00},
+        RGB8{0x00, 0x59, 0x00},
+        RGB8{0x00, 0x7C, 0x00},
+        RGB8{0x00, 0xA0, 0x00},
+        RGB8{0x00, 0x2B, 0x71},
+        RGB8{0x00, 0x46, 0xAA},
+        RGB8{0x00, 0x61, 0xE7},
+        RGB8{0x54, 0x83, 0xFE},
+    },
+    // 2 - Red/Blue/Yellow
+    color.Palette{
+        RGB8{0x00, 0x00, 0x00},
+        RGB8{0x54, 0x00, 0x00},
+        RGB8{0x7D, 0x00, 0x00},
+        RGB8{0xA9, 0x00, 0x00},
+        RGB8{0xD7, 0x00, 0x00},
+        RGB8{0xFE, 0x27, 0x28},
+        RGB8{0x00, 0x22, 0x5B},
+        RGB8{0x00, 0x36, 0x87},
+        RGB8{0x00, 0x4B, 0xB6},
+        RGB8{0x00, 0x61, 0xE7},
+        RGB8{0x44, 0x7C, 0xFE},
+        RGB8{0x43, 0x43, 0x00},
+        RGB8{0x70, 0x70, 0x00},
+        RGB8{0xA1, 0xA1, 0x00},
+        RGB8{0xD4, 0xD5, 0x00},
+        RGB8{0xFF, 0xFE, 0xFE},
+    },
+    // 3 - Purple/Orange/Green
+    color.Palette{
+        RGB8{0x00, 0x00, 0x00},
+        RGB8{0x4B, 0x00, 0x43},
+        RGB8{0x70, 0x00, 0x65},
+        RGB8{0x98, 0x00, 0x89},
+        RGB8{0xC1, 0x00, 0xAF},
+        RGB8{0xED, 0x00, 0xD6},
+        RGB8{0x48, 0x2D, 0x00},
+        RGB8{0x73, 0x4B, 0x00},
+        RGB8{0xA2, 0x6B, 0x00},
+        RGB8{0xD2, 0x8D, 0x00},
+        RGB8{0xFF, 0xB2, 0x48},
+        RGB8{0x00, 0x2D, 0x00},
+        RGB8{0x00, 0x46, 0x00},
+        RGB8{0x00, 0x60, 0x00},
+        RGB8{0x00, 0x7C, 0x00},
+        RGB8{0x00, 0x99, 0x00},
+    },
+    // 4 - Red/Green
+    color.Palette{
+        RGB8{0x41, 0x00, 0x00},
+        RGB8{0x68, 0x00, 0x00},
+        RGB8{0x7D, 0x00, 0x00},
+        RGB8{0x93, 0x00, 0x00},
+        RGB8{0xA9, 0x00, 0x00},
+        RGB8{0xC0, 0x00, 0x00},
+        RGB8{0xD7, 0x00, 0x00},
+        RGB8{0xEF, 0x00, 0x00},
+        RGB8{0x00, 0x21, 0x00},
+        RGB8{0x00, 0x39, 0x00},
+        RGB8{0x00, 0x46, 0x00},
+        RGB8{0x00, 0x53, 0x00},
+        RGB8{0x00, 0x60, 0x00},
+        RGB8{0x00, 0x6E, 0x00},
+        RGB8{0x00, 0x7C, 0x00},
+        RGB8{0x00, 0x8A, 0x00},
+    },
+    // 5 - Orange/Blue
+    color.Palette{
+        RGB8{0x34, 0x1F, 0x00},
+        RGB8{0x5D, 0x3C, 0x00},
+        RGB8{0x73, 0x4B, 0x00},
+        RGB8{0x8A, 0x5B, 0x00},
+        RGB8{0xA2, 0x6B, 0x00},
+        RGB8{0xBA, 0x7B, 0x00},
+        RGB8{0xD2, 0x8D, 0x00},
+        RGB8{0xEC, 0x9E, 0x00},
+        RGB8{0x00, 0x18, 0x46},
+        RGB8{0x00, 0x2B, 0x71},
+        RGB8{0x00, 0x36, 0x87},
+        RGB8{0x00, 0x40, 0x9E},
+        RGB8{0x00, 0x4B, 0xB6},
+        RGB8{0x00, 0x56, 0xCE},
+        RGB8{0x00, 0x61, 0xE7},
+        RGB8{0x0D, 0x6D, 0xFE},
+    },
+    // 6 - Yellow/Purple
+    color.Palette{
+        RGB8{0x2E, 0x2E, 0x00},
+        RGB8{0x59, 0x59, 0x00},
+        RGB8{0x70, 0x70, 0x00},
+        RGB8{0x88, 0x88, 0x00},
+        RGB8{0xA1, 0xA1, 0x00},
+        RGB8{0xBA, 0xBB, 0x00},
+        RGB8{0xD4, 0xD5, 0x00},
+        RGB8{0xEF, 0xEF, 0x00},
+        RGB8{0x39, 0x00, 0x33},
+        RGB8{0x5D, 0x00, 0x53},
+        RGB8{0x70, 0x00, 0x65},
+        RGB8{0x83, 0x00, 0x77},
+        RGB8{0x98, 0x00, 0x89},
+        RGB8{0xAC, 0x00, 0x9C},
+        RGB8{0xC1, 0x00, 0xAF},
+        RGB8{0xD7, 0x00, 0xC2},
+    },
+    // 7 - Red
+    color.Palette{
+        RGB8{0x22, 0x00, 0x00},
+        RGB8{0x32, 0x00, 0x00},
+        RGB8{0x3E, 0x00, 0x00},
+        RGB8{0x4A, 0x00, 0x00},
+        RGB8{0x56, 0x00, 0x00},
+        RGB8{0x63, 0x00, 0x00},
+        RGB8{0x70, 0x00, 0x00},
+        RGB8{0x7D, 0x00, 0x00},
+        RGB8{0x8B, 0x00, 0x00},
+        RGB8{0x98, 0x00, 0x00},
+        RGB8{0xA6, 0x00, 0x00},
+        RGB8{0xB4, 0x00, 0x00},
+        RGB8{0xC3, 0x00, 0x00},
+        RGB8{0xD1, 0x00, 0x00},
+        RGB8{0xE0, 0x00, 0x00},
+        RGB8{0xEF, 0x00, 0x00},
+    },
+    // 8 - Green
+    color.Palette{
+        RGB8{0x00, 0x18, 0x00},
+        RGB8{0x00, 0x27, 0x00},
+        RGB8{0x00, 0x36, 0x00},
+        RGB8{0x00, 0x46, 0x00},
+        RGB8{0x00, 0x56, 0x00},
+        RGB8{0x00, 0x67, 0x00},
+        RGB8{0x00, 0x78, 0x00},
+        RGB8{0x00, 0x8A, 0x00},
+        RGB8{0x00, 0x9D, 0x00},
+        RGB8{0x00, 0xAF, 0x00},
+        RGB8{0x00, 0xC2, 0x00},
+        RGB8{0x00, 0xD6, 0x00},
+        RGB8{0x01, 0xEA, 0x00},
+        RGB8{0x01, 0xFE, 0x00},
+        RGB8{0xB5, 0xFE, 0xB5},
+        RGB8{0xFF, 0xFE, 0xFE},
+    },
+    // 9 - Blue
+    color.Palette{
+        RGB8{0x00, 0x09, 0x25},
+        RGB8{0x00, 0x11, 0x37},
+        RGB8{0x00, 0x17, 0x44},
+        RGB8{0x00, 0x1D, 0x50},
+        RGB8{0x00, 0x23, 0x5E},
+        RGB8{0x00, 0x29, 0x6B},
+        RGB8{0x00, 0x2F, 0x79},
+        RGB8{0x00, 0x36, 0x87},
+        RGB8{0x00, 0x3C, 0x95},
+        RGB8{0x00, 0x43, 0xA4},
+        RGB8{0x00, 0x4A, 0xB3},
+        RGB8{0x00, 0x51, 0xC2},
+        RGB8{0x00, 0x58, 0xD1},
+        RGB8{0x00, 0x5F, 0xE1},
+        RGB8{0x00, 0x66, 0xF1},
+        RGB8{0x0D, 0x6D, 0xFE},
+    },
+}

diff --git a/palette/rgb8.go b/palette/rgb8.go
line changes: +31/-0
index 0000000..5b8b6b0
--- /dev/null
+++ b/palette/rgb8.go
@@ -0,0 +1,31 @@
+package palette
+
+import (
+    "math"
+    "image/color"
+)
+
+// No alpha
+type RGB8 struct {
+    R uint8
+    G uint8
+    B uint8
+}
+
+// Implement Color interface on RGB8
+func (c RGB8) RGBA() (r, g, b, a uint32) {
+    r = uint32(c.R) << 8
+    g = uint32(c.G) << 8
+    b = uint32(c.B) << 8
+    a = 0xFFFF
+    return
+}
+
+func (c RGB8) Distance(other color.Color) float64 {
+    cR, cG, cB, _ := c.RGBA()
+    oR, oG, oB, _ := other.RGBA()
+    dr := float64(cR) - float64(oR)
+    dg := float64(cG) - float64(oG)
+    db := float64(cB) - float64(oB)
+    return math.Sqrt(dr * dr + dg * dg + db * db)
+}