// average convert the sums to averages and returns the result. func average(sum []uint64, w, h int, n uint64) tipimage.Image { ret := tipimage.NewRGBA(tipimage.Rect(0, 0, w, h)) for y := 0; y < h; y++ { for x := 0; x < w; x++ { index := 4 * (y*w + x) ret.SetRGBA(x, y, color.RGBA{ uint8(sum[index+0] / n), uint8(sum[index+1] / n), uint8(sum[index+2] / n), uint8(sum[index+3] / n), }) } } return ret }
// Resample returns a resampled copy of the tipimage slice r of m. // The returned tipimage has width w and height h. func Resample(m tipimage.Image, r tipimage.Rectangle, w, h int) tipimage.Image { if w < 0 || h < 0 { return nil } if w == 0 || h == 0 || r.Dx() <= 0 || r.Dy() <= 0 { return tipimage.NewRGBA64(tipimage.Rect(0, 0, w, h)) } curw, curh := r.Dx(), r.Dy() img := tipimage.NewRGBA(tipimage.Rect(0, 0, w, h)) for y := 0; y < h; y++ { for x := 0; x < w; x++ { // Get a source pixel. subx := x * curw / w suby := y * curh / h r32, g32, b32, a32 := m.At(subx, suby).RGBA() r := uint8(r32 >> 8) g := uint8(g32 >> 8) b := uint8(b32 >> 8) a := uint8(a32 >> 8) img.SetRGBA(x, y, color.RGBA{r, g, b, a}) } } return img }