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