Added an image struct
This commit is contained in:
parent
594d1d07be
commit
ef1e1f4ac2
85
image.go
Normal file
85
image.go
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
package stone
|
||||||
|
|
||||||
|
import "image"
|
||||||
|
import "image/color"
|
||||||
|
|
||||||
|
type ColorImage struct {
|
||||||
|
x, y int
|
||||||
|
width, height int
|
||||||
|
bufferWidth, bufferHeight int
|
||||||
|
cellWidth, cellHeight int
|
||||||
|
buffer []color.RGBA
|
||||||
|
|
||||||
|
clean bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (im *ColorImage) Model () (model color.Model) {
|
||||||
|
model = color.RGBAModel
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (im *ColorImage) Bounds () (bounds image.Rectangle) {
|
||||||
|
bounds.Max.X = im.width
|
||||||
|
bounds.Max.Y = im.height
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (im *ColorImage) Size () (width, height int) {
|
||||||
|
width = im.width
|
||||||
|
height = im.height
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (im *ColorImage) SetSize (width, height int) {
|
||||||
|
im.width = width
|
||||||
|
im.height = height
|
||||||
|
im.bufferWidth = im.cellWidth * im.width
|
||||||
|
im.bufferHeight = im.cellHeight * im.height
|
||||||
|
im.buffer = make([]color.RGBA, im.bufferWidth * im.bufferHeight)
|
||||||
|
im.clean = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (im *ColorImage) At (x, y int) (pixel color.Color) {
|
||||||
|
if im.outOfBounds(x, y) { return }
|
||||||
|
pixel = im.buffer[x + y * im.width]
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (im *ColorImage) AtRGBA (x, y int) (pixel color.RGBA) {
|
||||||
|
if im.outOfBounds(x, y) { return }
|
||||||
|
pixel = im.buffer[x + y * im.width]
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (im *ColorImage) Set (x, y int, pixel color.Color) {
|
||||||
|
if im.outOfBounds(x, y) { return }
|
||||||
|
r, g, b, a := pixel.RGBA()
|
||||||
|
im.buffer[x + y * im.width] = color.RGBA {
|
||||||
|
R: uint8(r >> 8),
|
||||||
|
G: uint8(g >> 8),
|
||||||
|
B: uint8(b >> 8),
|
||||||
|
A: uint8(a >> 8),
|
||||||
|
}
|
||||||
|
|
||||||
|
im.clean = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (im *ColorImage) SetRGBA (x, y int, pixel color.RGBA) {
|
||||||
|
if im.outOfBounds(x, y) { return }
|
||||||
|
im.buffer[x + y * im.width] = pixel
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (im *ColorImage) MarkClean () {
|
||||||
|
im.clean = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (im *ColorImage) outOfBounds (x, y int) (outOfBounds bool) {
|
||||||
|
outOfBounds =
|
||||||
|
x >= im.width ||
|
||||||
|
y >= im.height ||
|
||||||
|
x < 0 ||
|
||||||
|
y < 0
|
||||||
|
return
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user