Plan 9 from Bell Labs’s /usr/web/sources/contrib/ericvh/go-plan9/src/pkg/exp/nacl/av/image.go

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


// 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 av

import (
	"image";
)

// Native Client image format:
// a single linear array of 32-bit ARGB as packed uint32s.

// An Image represents a Native Client frame buffer.
// The pixels in the image can be accessed as a single
// linear slice or as a two-dimensional slice of slices.
// Image implements image.Image.
type Image struct {
	Linear	[]Color;
	Pixel	[][]Color;
}

var _ image.Image = (*Image)(nil)

func (m *Image) ColorModel() image.ColorModel	{ return ColorModel }

func (m *Image) Width() int {
	if len(m.Pixel) == 0 {
		return 0
	}
	return len(m.Pixel[0]);
}

func (m *Image) Height() int	{ return len(m.Pixel) }

func (m *Image) At(x, y int) image.Color	{ return m.Pixel[y][x] }

func (m *Image) Set(x, y int, color image.Color) {
	if c, ok := color.(Color); ok {
		m.Pixel[y][x] = c
	}
	m.Pixel[y][x] = makeColor(color.RGBA());
}

func newImage(dx, dy int, linear []Color) *Image {
	if linear == nil {
		linear = make([]Color, dx*dy)
	}
	pix := make([][]Color, dy);
	for i := range pix {
		pix[i] = linear[dx*i : dx*(i+1)]
	}
	return &Image{linear, pix};
}

// A Color represents a Native Client color value,
// a 32-bit R, G, B, A value packed as 0xAARRGGBB.
type Color uint32

func (p Color) RGBA() (r, g, b, a uint32) {
	x := uint32(p);
	a = x >> 24;
	a |= a << 8;
	a |= a << 16;
	r = (x >> 16) & 0xFF;
	r |= r << 8;
	r |= r << 16;
	g = (x >> 8) & 0xFF;
	g |= g << 8;
	g |= g << 16;
	b = x & 0xFF;
	b |= b << 8;
	b |= b << 16;
	return;
}

func makeColor(r, g, b, a uint32) Color {
	return Color(a>>24<<24 | r>>24<<16 | g>>24<<8 | b>>24)
}

func toColor(color image.Color) image.Color {
	if c, ok := color.(Color); ok {
		return c
	}
	return makeColor(color.RGBA());
}

// ColorModel is the color model corresponding to the Native Client Color.
var ColorModel = image.ColorModelFunc(toColor)

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.