Added an image struct
This commit is contained in:
		
							parent
							
								
									19b744250f
								
							
						
					
					
						commit
						0fb6d8a6b2
					
				
							
								
								
									
										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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user