20 lines
616 B
Go
20 lines
616 B
Go
package main
|
|
|
|
var Opaque, Transparent = color.Alpha{0xff}, color.Alpha{0}
|
|
|
|
type xor struct{ dst, src image.Image }
|
|
|
|
func (t xor) ColorModel() color.Model { return t.dst.ColorModel() }
|
|
func (t xor) Bounds() image.Rectangle { return t.src.Bounds() }
|
|
func (t xor) At(x, y int) color.Color {
|
|
dstColor := t.ColorModel().Convert(t.dst.At(x, y))
|
|
srcColor := t.ColorModel().Convert(t.src.At(x, y))
|
|
|
|
// xor operation (a || b) && !(a && b)
|
|
if ((dstColor == color.Opaque) || (srcColor == color.Opaque)) &&
|
|
!((dstColor == color.Opaque) && (srcColor == color.Opaque)) {
|
|
return color.Opaque
|
|
}
|
|
return color.Transparent
|
|
}
|