This is the code using Python:
# Channel01,02,03 are all 2D uint16 arrays with length of 2748*2748.
# The trick here is to convert to gray image firstly,and then merge the gray images into a RGB image...
# I don't know the reason behind it , but it works...
r = Image.fromarray(Channel03*0.1).convert('L')
g = Image.fromarray(Channel02*0.1).convert('L')
b = Image.fromarray(Channel01*0.1).convert('L')
image_output = Image.merge("RGB", (r, g, b))
image_output.save("map_picture.bmp)
I tried to implement the same bahaviour in Go:
rect := image.Rect(0, 0, 2748, 2748)
imgSet := image.NewRGBA64(rect)
for i := 0; i < length; i++ {
x := i % 2748
y := i / 2748
pixel := color.RGBA64{
// channel1,2,3 are the same with the py code
R: channel3[i]/10,
G: channel2[i]/10,
B: channel1[i]/10,
A: 65535,
}
imgSet.Set(x, y, pixel)
}
outFile, err := os.Create("hybrid.bmp")
if err != nil {
t.Error(err)
return
}
defer outFile.Close()
err = bmp.Encode(outFile, imgSet)
if err != nil {
t.Error(err)
return
}
}
The comparision result is as following,the image generated by Go seems very lossy…
So,how to obtain the same result using Go?