parent
							
								
									e9fc8e6c48
								
							
						
					
					
						commit
						dc7190af58
					
				|  | @ -3,7 +3,9 @@ package pixelflut | |||
| import ( | ||||
| 	"fmt" | ||||
| 	"image" | ||||
| 	"image/color" | ||||
| 	"math/rand" | ||||
| 	"strconv" | ||||
| ) | ||||
| 
 | ||||
| // Commands represent a list of messages to be sent to a pixelflut server.
 | ||||
|  | @ -69,16 +71,16 @@ func commandsFromImage(img *image.NRGBA, order RenderOrder, offset image.Point) | |||
| 			if c.A == 0 { | ||||
| 				continue | ||||
| 			} | ||||
| 			var cmd string | ||||
| 			if c.A != 255 { | ||||
| 				cmd = fmt.Sprintf("PX %d %d %.2x%.2x%.2x%.2x\n", | ||||
| 					x+offset.X, y+offset.Y, c.R, c.G, c.B, c.A) | ||||
| 			} else { | ||||
| 				// @speed: this sprintf call is quite slow..
 | ||||
| 				cmd = fmt.Sprintf("PX %d %d %.2x%.2x%.2x\n", | ||||
| 					x+offset.X, y+offset.Y, c.R, c.G, c.B) | ||||
| 			} | ||||
| 			cmds[numCmds] = []byte(cmd) // @speed: conversion to []byte costs an extra allocation..
 | ||||
| 
 | ||||
| 			var cmd []byte | ||||
| 			cmd = append(cmd, []byte("PX ")...) | ||||
| 			cmd = strconv.AppendUint(cmd, uint64(x+offset.X), 10) | ||||
| 			cmd = append(cmd, ' ') | ||||
| 			cmd = strconv.AppendUint(cmd, uint64(y+offset.Y), 10) | ||||
| 			cmd = append(cmd, ' ') | ||||
| 			appendColor(&cmd, c) | ||||
| 			cmd = append(cmd, '\n') | ||||
| 			cmds[numCmds] = cmd | ||||
| 			numCmds++ | ||||
| 		} | ||||
| 	} | ||||
|  | @ -92,6 +94,27 @@ func commandsFromImage(img *image.NRGBA, order RenderOrder, offset image.Point) | |||
| 	return | ||||
| } | ||||
| 
 | ||||
| func appendColor(buf *[]byte, c color.NRGBA) { | ||||
| 	var mask uint32 = 0xf0000000 | ||||
| 	// merge into uint32
 | ||||
| 	var col = uint32(c.R)<<24 + uint32(c.G)<<16 + uint32(c.B)<<8 + uint32(c.A) | ||||
| 	// if alpha is ff, drop it.
 | ||||
| 	if 0xff&col == 0xff { | ||||
| 		col = col >> 8 | ||||
| 		mask = mask >> 8 | ||||
| 	} | ||||
| 	// add leading zeros if needed
 | ||||
| 	for mask > 0xf { | ||||
| 		if mask&col == 0 { | ||||
| 			*buf = append(*buf, '0') | ||||
| 		} else { | ||||
| 			break | ||||
| 		} | ||||
| 		mask = mask >> 4 | ||||
| 	} | ||||
| 	*buf = strconv.AppendUint(*buf, uint64(col), 16) | ||||
| } | ||||
| 
 | ||||
| func cmdsFetchImage(bounds image.Rectangle) (cmds commands) { | ||||
| 	cmds = make([][]byte, bounds.Size().X*bounds.Size().Y) | ||||
| 	numCmds := 0 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue