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