Files
x/image/filter/stretch.go
T

42 lines
915 B
Go

package filter
import (
"image"
"image/color"
)
func Stretch(src *image.Gray, black, white float64) *image.Gray {
b := src.Bounds()
min, max := uint8(255), uint8(0)
for y := b.Min.Y; y < b.Max.Y; y++ {
for x := b.Min.X; x < b.Max.X; x++ {
v := src.GrayAt(x, y).Y
if v < min {
min = v
}
if v > max {
max = v
}
}
}
minF := float64(min) + float64(max-min)*black
maxF := float64(min) + float64(max-min)*white
rng := maxF - minF
if rng == 0 {
return src
}
out := image.NewGray(b)
for y := b.Min.Y; y < b.Max.Y; y++ {
for x := b.Min.X; x < b.Max.X; x++ {
v := float64(src.GrayAt(x, y).Y)
out.SetGray(x, y, color.Gray{
Y: clamp((v - minF) / rng * 255),
})
}
}
return out
}