Йордан обнови решението на 12.11.2013 01:58 (преди над 4 години)
+package main
+
+
+/*import (
+ "fmt"
+
+
+)*/
+type Header struct {
+ Format string
+ LineWidth int
+ }
+type Image struct {
+ data []byte
+ header Header
+ }
+type Pixel struct {
+ data []byte
+ header Header
+ }
+type colors struct {
+ Red byte
+ Green byte
+ Blue byte
+ }
+func ParseImage(data []byte, header Header) Image {
+ img := Image {data , header }
+ return img
+}
+func (i Image) InspectPixel(col int , row int) Pixel {
+ // fmt.Println(i.data[row * col : row * col + i.header.num])
+ start := row * i.header.LineWidth * len(i.header.Format) + col * len(i.header.Format)
+
+ end :=0
+ if start + i.header.LineWidth + 2 > len(i.data) {
+ end = len(i.data)
+ } else {
+ end = start + i.header.LineWidth +2
+ }
+
+ px := Pixel { i.data[start : end ] , i.header }
+ return px
+}
+func (i Pixel) Color() colors {
+
+ //fmt.Println((i.data))
+ switch i.header.Format {
+ case "RGB" :
+ return colors{ i.data[0], i.data[1], i.data[2] }
+ case "BGR" :
+ return colors{ i.data[2], i.data[1], i.data[0] }
+ case "GRB" :
+ return colors{ i.data[1], i.data[0], i.data[2] }
+ case "RGBA" :
+ return colors{ byte(int(i.data[0]) * int(i.data[3]) / 255), byte(int(i.data[1]) * int(i.data[3]) / 255), byte(int(i.data[2]) * int(i.data[3]) / 255) }
+ case "BGRA" :
+ return colors{ byte(int(i.data[0]) * int(i.data[3]) / 255), byte(int(i.data[1]) * int(i.data[3]) / 255), byte(int(i.data[2]) * int(i.data[3]) / 255) }
+
+ }
+ color := colors{ i.data[2], i.data[1], i.data[0] }
+ return color
+}
+
+
+
+func main() {
+ /*
+ data := []byte{
+ 0, 12, 244, 127, 14, 26, 52, 127,
+ 31, 33, 41, 255, 36, 133, 241, 255,
+ }
+ header := Header{"BGRA", 2}
+
+ fmt.Println(ParseImage(data,header).InspectPixel(1,0).Color())*/
+
+
+
+}