just for test, and after then rewrite concat's At function
This commit is contained in:
parent
479bfc4e86
commit
f4985ae53c
99
concat.go
99
concat.go
@ -1,4 +1,5 @@
|
||||
//go:build todo
|
||||
|
||||
package imageutils
|
||||
|
||||
import (
|
||||
@ -7,10 +8,21 @@ import (
|
||||
"image/draw"
|
||||
)
|
||||
|
||||
type Side int
|
||||
|
||||
const (
|
||||
Left Side = iota
|
||||
Right
|
||||
Up
|
||||
Down
|
||||
)
|
||||
|
||||
type pair struct {
|
||||
first, second image.Image
|
||||
side Side
|
||||
}
|
||||
|
||||
// Takes color.Model of the first Image.
|
||||
func (p pair) ColorModel() color.Model { return p.first.ColorModel() }
|
||||
|
||||
func (p pair) Bounds() image.Rectangle {
|
||||
@ -19,27 +31,59 @@ func (p pair) Bounds() image.Rectangle {
|
||||
b2 = p.second.Bounds()
|
||||
)
|
||||
|
||||
return image.Rectangle{
|
||||
rect := image.Rectangle{}
|
||||
switch p.side {
|
||||
case Left:
|
||||
fallthrough
|
||||
case Right:
|
||||
rect = image.Rectangle{
|
||||
image.ZP,
|
||||
image.Point{
|
||||
X: b1.Dx() + b2.Dx(),
|
||||
Y: max(b1.Dy(), b2.Dy()),
|
||||
},
|
||||
}
|
||||
case Up:
|
||||
fallthrough
|
||||
case Down:
|
||||
rect = image.Rectangle{
|
||||
image.ZP,
|
||||
image.Point{
|
||||
X: max(b1.Dx(), b2.Dx()),
|
||||
Y: b1.Dy() + b2.Dy(),
|
||||
},
|
||||
}
|
||||
}
|
||||
return rect
|
||||
}
|
||||
|
||||
func (p pair) At(x, y int) color.Color {
|
||||
rgbaImg := image.NewRGBA(p.Bounds())
|
||||
|
||||
switch p.side {
|
||||
case Left:
|
||||
draw.Draw(
|
||||
rgbaImg,
|
||||
rgbaImg.Bounds(),
|
||||
p.first,
|
||||
image.ZP,
|
||||
draw.Src,
|
||||
rgbaImg, rgbaImg.Bounds(),
|
||||
p.second,
|
||||
image.ZP, draw.Src,
|
||||
)
|
||||
draw.Draw(
|
||||
rgbaImg,
|
||||
p.Bounds(),
|
||||
rgbaImg, p.Bounds(),
|
||||
p.first,
|
||||
image.Point{
|
||||
p.second.Bounds().Dx(),
|
||||
0,
|
||||
},
|
||||
draw.Src,
|
||||
)
|
||||
case Right:
|
||||
draw.Draw(
|
||||
rgbaImg, rgbaImg.Bounds(),
|
||||
p.first,
|
||||
image.ZP, draw.Src,
|
||||
)
|
||||
draw.Draw(
|
||||
rgbaImg, p.Bounds(),
|
||||
p.second,
|
||||
image.Point{
|
||||
p.first.Bounds().Dx(),
|
||||
@ -47,10 +91,41 @@ func (p pair) At(x, y int) color.Color {
|
||||
},
|
||||
draw.Src,
|
||||
)
|
||||
return rgbaImg
|
||||
case Up:
|
||||
draw.Draw(
|
||||
rgbaImg, rgbaImg.Bounds()
|
||||
p.first,
|
||||
image.ZP, draw.Src
|
||||
)
|
||||
draw.Draw(
|
||||
rgbaImg, p.Bounds(),
|
||||
p.second,
|
||||
image.Point{
|
||||
0,
|
||||
p.first.Bounds().Dy()
|
||||
},
|
||||
draw.Src,
|
||||
)
|
||||
case Down:
|
||||
draw.Draw(
|
||||
rgbaImg, rgbaImg.Bounds()
|
||||
p.second,
|
||||
image.ZP, draw.Src
|
||||
)
|
||||
draw.Draw(
|
||||
rgbaImg, p.Bounds(),
|
||||
p.first,
|
||||
image.Point{
|
||||
0,
|
||||
p.second.Bounds().Dy()
|
||||
},
|
||||
draw.Src,
|
||||
)
|
||||
}
|
||||
return rgbaImg.At(x, y)
|
||||
}
|
||||
|
||||
// Concat concatenates second image to the right side of first.
|
||||
func Concat(i1, i2 image.Image) image.Image {
|
||||
return pair{i1, i2}
|
||||
// Concat concatenates second image on a given side.
|
||||
func Concat(i1, i2 image.Image, s Side) image.Image {
|
||||
return pair{i1, i2, s}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user