本文整理匯總了Golang中image/color.Palette函數的典型用法代碼示例。如果您正苦於以下問題:Golang Palette函數的具體用法?Golang Palette怎麽用?Golang Palette使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了Palette函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: makeMotionReport
func makeMotionReport(dVal []int, maxVal int) *image.Paletted {
// Make Colour Pal
width := len(dVal)
height := maxVal / 1000
tempPal := color.Palette([]color.Color{
color.RGBA{0, 0, 0, 0},
color.RGBA{255, 255, 255, 255},
})
m := image.NewPaletted(image.Rect(0, 0, width, height), tempPal)
for i, v := range dVal {
hOff := int(v / 1000)
if hOff >= height {
hOff = height - 1
fmt.Println("Height too large, corrected")
}
for off, y := i, 0; y <= hOff; off, y = off+width, y+1 {
m.Pix[off] = 1
}
}
return m
}
示例2: convertBw
func convertBw(w http.ResponseWriter, req *http.Request) {
img := imageFromURL(req.FormValue("url"))
bw := []color.Color{color.Black, color.White}
gr := &Converted{img, color.Palette(bw)}
w.Header().Set("Content-Type", "image/png")
png.Encode(w, gr)
}
示例3: init
func init() {
cs := []color.Color{}
for _, r := range []uint8{0x00, 0x80, 0xff} {
for _, g := range []uint8{0x00, 0x80, 0xff} {
for _, b := range []uint8{0x00, 0x80, 0xff} {
cs = append(cs, color.RGBA{r, g, b, 0xff})
}
}
}
cheapPalette = color.Palette(cs)
}
示例4: convertToPaletted
// convertToPaletted converts the given image into a paletted one.
// Colors are converted using a naive approache. The first 256 unique colors
// are retained, and the rest are mapped to hopefully a nearby color.
func convertToPaletted(src image.Image) *image.Paletted {
if dst, ok := src.(*image.Paletted); ok {
return dst
}
bounds := src.Bounds()
colors := uniqueColors(src)
dst := image.NewPaletted(bounds, color.Palette(colors))
draw.Draw(dst, bounds, src, bounds.Min, draw.Src)
return dst
}
示例5: makePal
func (cg ColourGrad) makePal(min, max float64, numCol int) color.Palette {
pal := make([]color.Color, numCol, numCol)
p := min
pStep := (max - min) / float64(numCol)
for i := range pal {
pal[i] = cg.getColour(p)
p += pStep
}
return color.Palette(pal)
}
示例6: TestCopyImage
func TestCopyImage(t *testing.T) {
cases := []struct {
In image.Image
Out *image.RGBA
}{
{
In: &image.Paletted{
Pix: []uint8{0, 1, 1, 0},
Stride: 2,
Rect: image.Rect(0, 0, 2, 2),
Palette: color.Palette([]color.Color{
color.Transparent, color.White,
}),
},
Out: &image.RGBA{
Pix: []uint8{0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0},
Stride: 8,
Rect: image.Rect(0, 0, 2, 2),
},
},
{
In: &image.RGBA{
Pix: []uint8{0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0},
Stride: 8,
Rect: image.Rect(0, 0, 2, 2),
},
Out: &image.RGBA{
Pix: []uint8{0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0},
Stride: 8,
Rect: image.Rect(0, 0, 2, 2),
},
},
}
for _, c := range cases {
got := CopyImage(c.In)
if got.Rect != c.Out.Rect {
t.Errorf("Rect: %v, want: %v", got.Rect, c.Out.Rect)
}
size := got.Rect.Size()
w, h := size.X, size.Y
for j := 0; j < h; j++ {
for i := 0; i < w; i++ {
got := got.At(i, j)
want := c.Out.At(i, j)
if got != want {
t.Errorf("At(%d, %d): %v, want: %v", i, j, got, want)
}
}
}
}
}
示例7: image2paletted
func image2paletted(height uint, img image.Image) *image.Paletted {
resimg := resize.Resize(0, height, img, resize.Bilinear)
pal := color.Palette(palette.Plan9)
paletted := image.NewPaletted(resimg.Bounds(), pal)
for y := 0; y < resimg.Bounds().Size().Y; y++ {
for x := 0; x < resimg.Bounds().Size().X; x++ {
paletted.Set(x, y, resimg.At(x, y))
}
}
return paletted
}
示例8: render
func render(x, y, z int) []byte {
// tileX and tileY is the absolute position of this tile at the current zoom level.
tileX, tileY := x*tileSize, y*tileSize
scale := 1 / float64(int(1<<uint(z))*tileSize)
img := image.NewPaletted(image.Rect(0, 0, tileSize, tileSize), color.Palette(color_[:]))
for i := 0; i < tileSize; i++ {
for j := 0; j < tileSize; j++ {
c := complex(float64(tileX+i)*scale, float64(tileY+j)*scale)
img.SetColorIndex(i, j, mandelbrotValue(c))
}
}
buf := new(bytes.Buffer)
png.Encode(buf, img)
return buf.Bytes()
}
示例9: parsePLTE
func (d *decoder) parsePLTE(length uint32) error {
np := int(length / 3) // The number of palette entries.
if length%3 != 0 || np <= 0 || np > 256 || np > 1<<uint(d.depth) {
return FormatError("bad PLTE length")
}
n, err := io.ReadFull(d.r, d.tmp[:3*np])
if err != nil {
return err
}
d.crc.Write(d.tmp[:n])
switch d.cb {
case cbP1, cbP2, cbP4, cbP8:
d.palette = color.Palette(make([]color.Color, np))
for i := 0; i < np; i++ {
d.palette[i] = color.RGBA{d.tmp[3*i+0], d.tmp[3*i+1], d.tmp[3*i+2], 0xff}
}
case cbTC8, cbTCA8, cbTC16, cbTCA16:
// As per the PNG spec, a PLTE chunk is optional (and for practical purposes,
// ignorable) for the ctTrueColor and ctTrueColorAlpha color types (section 4.1.2).
default:
return FormatError("PLTE, color type mismatch")
}
return d.verifyChecksum()
}
示例10: decode
// decode reads a GIF image from r and stores the result in d.
func (d *decoder) decode(r io.Reader, configOnly bool) error {
// Add buffering if r does not provide ReadByte.
if rr, ok := r.(reader); ok {
d.r = rr
} else {
d.r = bufio.NewReader(r)
}
err := d.readHeaderAndScreenDescriptor()
if err != nil {
return err
}
if configOnly {
return nil
}
if d.headerFields&fColorMapFollows != 0 {
if d.globalColorMap, err = d.readColorMap(); err != nil {
return err
}
}
for {
c, err := d.r.ReadByte()
if err != nil {
return err
}
switch c {
case sExtension:
if err = d.readExtension(); err != nil {
return err
}
case sImageDescriptor:
m, err := d.newImageFromDescriptor()
if err != nil {
return err
}
useLocalColorMap := d.imageFields&fColorMapFollows != 0
if useLocalColorMap {
m.Palette, err = d.readColorMap()
if err != nil {
return err
}
} else {
m.Palette = d.globalColorMap
}
if d.hasTransparentIndex && int(d.transparentIndex) < len(m.Palette) {
if !useLocalColorMap {
// Clone the global color map.
m.Palette = append(color.Palette(nil), d.globalColorMap...)
}
m.Palette[d.transparentIndex] = color.RGBA{}
}
litWidth, err := d.r.ReadByte()
if err != nil {
return err
}
if litWidth < 2 || litWidth > 8 {
return fmt.Errorf("gif: pixel size in decode out of range: %d", litWidth)
}
// A wonderfully Go-like piece of magic.
br := &blockReader{r: d.r}
lzwr := lzw.NewReader(br, lzw.LSB, int(litWidth))
defer lzwr.Close()
if _, err = io.ReadFull(lzwr, m.Pix); err != nil {
if err != io.ErrUnexpectedEOF {
return err
}
return errNotEnough
}
// Both lzwr and br should be exhausted. Reading from them
// should yield (0, io.EOF).
if n, err := lzwr.Read(d.tmp[:1]); n != 0 || err != io.EOF {
if err != nil {
return err
}
return errTooMuch
}
if n, err := br.Read(d.tmp[:1]); n != 0 || err != io.EOF {
if err != nil {
return err
}
return errTooMuch
}
// Check that the color indexes are inside the palette.
if len(m.Palette) < 256 {
for _, pixel := range m.Pix {
if int(pixel) >= len(m.Palette) {
return errBadPixel
}
}
}
// Undo the interlacing if necessary.
if d.imageFields&ifInterlace != 0 {
uninterlace(m)
}
//.........這裏部分代碼省略.........
示例11: testEncodeAll
func testEncodeAll(t *testing.T, go1Dot5Fields bool, useGlobalColorModel bool) {
const width, height = 150, 103
g0 := &GIF{
Image: make([]*image.Paletted, len(frames)),
Delay: make([]int, len(frames)),
LoopCount: 5,
}
for i, f := range frames {
g, err := readGIF(f)
if err != nil {
t.Fatal(f, err)
}
m := g.Image[0]
if m.Bounds().Dx() != width || m.Bounds().Dy() != height {
t.Fatalf("frame %d had unexpected bounds: got %v, want width/height = %d/%d",
i, m.Bounds(), width, height)
}
g0.Image[i] = m
}
// The GIF.Disposal, GIF.Config and GIF.BackgroundIndex fields were added
// in Go 1.5. Valid Go 1.4 or earlier code should still produce valid GIFs.
//
// On the following line, color.Model is an interface type, and
// color.Palette is a concrete (slice) type.
globalColorModel, backgroundIndex := color.Model(color.Palette(nil)), uint8(0)
if useGlobalColorModel {
globalColorModel, backgroundIndex = color.Palette(palette.WebSafe), uint8(1)
}
if go1Dot5Fields {
g0.Disposal = make([]byte, len(g0.Image))
for i := range g0.Disposal {
g0.Disposal[i] = DisposalNone
}
g0.Config = image.Config{
ColorModel: globalColorModel,
Width: width,
Height: height,
}
g0.BackgroundIndex = backgroundIndex
}
var buf bytes.Buffer
if err := EncodeAll(&buf, g0); err != nil {
t.Fatal("EncodeAll:", err)
}
encoded := buf.Bytes()
config, err := DecodeConfig(bytes.NewReader(encoded))
if err != nil {
t.Fatal("DecodeConfig:", err)
}
g1, err := DecodeAll(bytes.NewReader(encoded))
if err != nil {
t.Fatal("DecodeAll:", err)
}
if !reflect.DeepEqual(config, g1.Config) {
t.Errorf("DecodeConfig inconsistent with DecodeAll")
}
if !palettesEqual(g1.Config.ColorModel.(color.Palette), globalColorModel.(color.Palette)) {
t.Errorf("unexpected global color model")
}
if w, h := g1.Config.Width, g1.Config.Height; w != width || h != height {
t.Errorf("got config width * height = %d * %d, want %d * %d", w, h, width, height)
}
if g0.LoopCount != g1.LoopCount {
t.Errorf("loop counts differ: %d and %d", g0.LoopCount, g1.LoopCount)
}
if backgroundIndex != g1.BackgroundIndex {
t.Errorf("background indexes differ: %d and %d", backgroundIndex, g1.BackgroundIndex)
}
if len(g0.Image) != len(g1.Image) {
t.Fatalf("image lengths differ: %d and %d", len(g0.Image), len(g1.Image))
}
if len(g1.Image) != len(g1.Delay) {
t.Fatalf("image and delay lengths differ: %d and %d", len(g1.Image), len(g1.Delay))
}
if len(g1.Image) != len(g1.Disposal) {
t.Fatalf("image and disposal lengths differ: %d and %d", len(g1.Image), len(g1.Disposal))
}
for i := range g0.Image {
m0, m1 := g0.Image[i], g1.Image[i]
if m0.Bounds() != m1.Bounds() {
t.Errorf("frame %d: bounds differ: %v and %v", i, m0.Bounds(), m1.Bounds())
}
d0, d1 := g0.Delay[i], g1.Delay[i]
if d0 != d1 {
t.Errorf("frame %d: delay values differ: %d and %d", i, d0, d1)
}
p0, p1 := uint8(0), g1.Disposal[i]
if go1Dot5Fields {
p0 = DisposalNone
}
if p0 != p1 {
t.Errorf("frame %d: disposal values differ: %d and %d", i, p0, p1)
}
}
}
示例12: newDecoder
func newDecoder(r io.Reader) (*decoder, error) {
d := &decoder{
r: newReaderAt(r),
features: make(map[int][]uint),
}
p := make([]byte, len(leHeader))
if _, err := d.r.ReadAt(p, 0); err != nil {
return nil, err
}
if string(p[0:len(leHeader)]) != leHeader {
return nil, FormatError("malformed header")
}
d.byteOrder = binary.LittleEndian
ifdOffset := int64(d.byteOrder.Uint32(p[4:8]))
// The first two bytes contain the number of entries (12 bytes each).
if _, err := d.r.ReadAt(p[0:2], ifdOffset); err != nil {
return nil, err
}
numItems := int(d.byteOrder.Uint16(p[0:2]))
// All IFD entries are read in one chunk.
p = make([]byte, ifdLen*numItems)
if _, err := d.r.ReadAt(p, ifdOffset+2); err != nil {
return nil, err
}
for i := 0; i < len(p); i += ifdLen {
if err := d.parseIFD(p[i : i+ifdLen]); err != nil {
return nil, err
}
}
d.config.Width = int(d.firstVal(tImageWidth))
d.config.Height = int(d.firstVal(tImageLength))
if _, ok := d.features[tBitsPerSample]; !ok {
return nil, FormatError("BitsPerSample tag missing")
}
d.bpp = d.firstVal(tBitsPerSample)
// Determine the image mode.
switch d.firstVal(tPhotometricInterpretation) {
case pRGB:
for _, b := range d.features[tBitsPerSample] {
if b != 8 {
return nil, UnsupportedError("non-8-bit RGB image")
}
}
d.config.ColorModel = color.RGBAModel
// RGB images normally have 3 samples per pixel.
// If there are more, ExtraSamples (p. 31-32 of the spec)
// gives their meaning (usually an alpha channel).
//
// This implementation does not support extra samples
// of an unspecified type.
switch len(d.features[tBitsPerSample]) {
case 3:
d.mode = mRGB
case 4:
switch d.firstVal(tExtraSamples) {
case 1:
d.mode = mRGBA
case 2:
d.mode = mNRGBA
d.config.ColorModel = color.NRGBAModel
default:
return nil, FormatError("wrong number of samples for RGB")
}
default:
return nil, FormatError("wrong number of samples for RGB")
}
case pPaletted:
d.mode = mPaletted
d.config.ColorModel = color.Palette(d.palette)
case pWhiteIsZero:
d.mode = mGrayInvert
if d.bpp == 16 {
d.config.ColorModel = color.Gray16Model
} else {
d.config.ColorModel = color.GrayModel
}
case pBlackIsZero:
d.mode = mGray
if d.bpp == 16 {
d.config.ColorModel = color.Gray16Model
} else {
d.config.ColorModel = color.GrayModel
}
default:
return nil, UnsupportedError("color model")
}
return d, nil
}
示例13: outputKeyboardImage
func outputKeyboardImage() (map[string]image.Rectangle, error) {
keyMap := map[string]image.Rectangle{}
img := image.NewNRGBA(image.Rect(0, 0, 320, 240))
x, y := 0, 0
for j, line := range keyboardKeys {
x = 0
const height = 18
for i, key := range line {
width := 16
switch j {
default:
switch i {
case 0:
width = 16 + 8*(j+2)
case len(line) - 1:
width = 16 + 8*(j+2)
}
case 4:
switch i {
case 0:
width = 16 + 8*(j+2)
case 1:
width = 16 * 2
case 2:
width = 16 * 5
case 3:
width = 16 * 2
case 4:
width = 16 + 8*(j+2)
}
case 6, 7:
width = 16 * 3
}
if key != "" {
if err := drawKey(img, key, x, y, width); err != nil {
return nil, err
}
if key != " " {
keyMap[key] = image.Rect(x, y, x+width, y+height)
}
}
x += width
}
y += height
}
palette := color.Palette([]color.Color{
color.Transparent, color.Opaque,
})
palettedImg := image.NewPaletted(img.Bounds(), palette)
draw.Draw(palettedImg, palettedImg.Bounds(), img, image.ZP, draw.Src)
f, err := os.Create("../../_resources/images/keyboard/keyboard.png")
if err != nil {
return nil, err
}
defer f.Close()
if err := png.Encode(f, palettedImg); err != nil {
return nil, err
}
return keyMap, nil
}
示例14: main
func main() {
const charFullWidth = 12
const charHalfWidth = 6
const charHeight = 16
files := []string{
"latin.png",
"bmp-0.png",
"bmp-2.png",
"bmp-3.png",
"bmp-4.png",
"bmp-5.png",
"bmp-6.png",
"bmp-7.png",
"bmp-8.png",
"bmp-9.png",
"bmp-15.png",
}
palette := color.Palette([]color.Color{
color.Transparent, color.Opaque,
})
result := image.NewPaletted(image.Rect(0, 0, 256*charFullWidth, 256*charHeight), palette)
for _, file := range files {
f, err := os.Open(file)
if err != nil {
panic(err)
}
defer f.Close()
img, _, err := image.Decode(f)
if err != nil {
panic(err)
}
if file == "latin.png" {
for i := 0; i < 256; i++ {
dx := i * charFullWidth
dy := 0
dr := image.Rect(dx, dy, dx+charHalfWidth, dy+charHeight)
sp := image.Point{
(i % 32) * charHalfWidth,
(i / 32) * charHeight,
}
draw.Draw(result, dr, img, sp, draw.Src)
}
continue
}
id, err := strconv.Atoi(regexp.MustCompile(`\d+`).FindString(file))
if err != nil {
panic(err)
}
for i := 0; i < 4096; i++ {
if id == 0 && i < 256 {
continue
}
dx := (i % 256) * charFullWidth
dy := id*256 + (i/256)*charHeight
dr := image.Rect(dx, dy, dx+charFullWidth, dy+charHeight)
sp := image.Point{
(i % 64) * charFullWidth,
(i / 64) * charHeight,
}
draw.Draw(result, dr, img, sp, draw.Src)
}
}
e := png.Encoder{CompressionLevel: png.BestCompression}
if err := e.Encode(os.Stdout, result); err != nil {
panic(err)
}
}
示例15: main
func main() {
objpath := ""
flag.Parse()
if flag.NArg() > 0 {
objpath = flag.Arg(0)
} else {
showUsage()
os.Exit(0)
}
obj, err := ReadObjFile(objpath, *dbg)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
if *dbg {
fmt.Println("num vertices: ", len(obj.Vertices()))
fmt.Println("num faces: ", len(obj.Triangles()))
fmt.Println("scale factor: ", *scale)
}
// get image w/h by scaling the mesh aabb by the user-defined scale factor
aabb := obj.AABB()
aabb.Scale(float64(*scale))
offx, offy := int(math.Floor(aabb.MinX)), int(math.Floor(aabb.MinZ))
w, h := int(math.Ceil(aabb.MaxX)), int(math.Ceil(aabb.MaxZ))
dc := gg.NewContext(w, h)
dc.SetRGB255(255, 255, 255)
dc.Clear()
for _, t := range obj.Triangles() {
// scale current triangle
t.Scale(float64(*scale))
// draw the triangle
dc.MoveTo(t.P1.X(), t.P1.Z())
dc.LineTo(t.P2.X(), t.P2.Z())
dc.LineTo(t.P3.X(), t.P3.Z())
dc.LineTo(t.P1.X(), t.P1.Z())
dc.SetRGB255(0, 0, 0)
dc.SetLineWidth(1)
dc.FillPreserve()
dc.Stroke()
}
fmt.Println("Rasterization completed")
fmt.Println("Creating", *pngfile)
f, err := os.Create(*pngfile)
if err != nil {
fmt.Println("Can't create ", *pngfile, ": ", err)
os.Exit(1)
}
// convert image into a black and white one
bw := []color.Color{color.Black, color.White}
gr := &Converter{dc.Image(), color.Palette(bw)}
err = png.Encode(f, gr)
if err != nil {
fmt.Println("Can't encode ", *pngfile, ": ", err)
os.Exit(1)
}
fmt.Println("Resulting image details")
if *dbg {
fmt.Println("original mesh bounding box: ", obj.AABB())
fmt.Println("scaled mesh bounding box: ", aabb)
}
fmt.Println("x, y offset: ", offx, offy)
fmt.Println("scale: ", *scale)
fmt.Println("width/height: ", w, h)
}