fckeuspy-go/vendor/github.com/makiuchi-d/gozxing/common/grid_sampler.go
2025-09-28 21:03:39 +02:00

82 lines
2.2 KiB
Go

package common
import (
"github.com/makiuchi-d/gozxing"
)
type GridSampler interface {
SampleGrid(image *gozxing.BitMatrix, dimensionX, dimensionY int,
p1ToX, p1ToY, p2ToX, p2ToY, p3ToX, p3ToY, p4ToX, p4ToY float64,
p1FromX, p1FromY, p2FromX, p2FromY, p3FromX, p3FromY, p4FromX, p4FromY float64) (*gozxing.BitMatrix, error)
SampleGridWithTransform(image *gozxing.BitMatrix,
dimensionX, dimensionY int, transform *PerspectiveTransform) (*gozxing.BitMatrix, error)
}
var gridSampler GridSampler = NewDefaultGridSampler()
func GridSampler_SetGridSampler(newGridSampler GridSampler) {
gridSampler = newGridSampler
}
func GridSampler_GetInstance() GridSampler {
return gridSampler
}
func GridSampler_checkAndNudgePoints(image *gozxing.BitMatrix, points []float64) error {
width := image.GetWidth()
height := image.GetHeight()
// Check and nudge points from start until we see some that are OK:
nudged := true
maxOffset := len(points) - 1 // points.length must be even
for offset := 0; offset < maxOffset && nudged; offset += 2 {
x := int(points[offset])
y := int(points[offset+1])
if x < -1 || x > width || y < -1 || y > height {
return gozxing.NewNotFoundException(
"(w, h) = (%v, %v), (x, y) = (%v, %v)", width, height, x, y)
}
nudged = false
if x == -1 {
points[offset] = 0.0
nudged = true
} else if x == width {
points[offset] = float64(width - 1)
nudged = true
}
if y == -1 {
points[offset+1] = 0.0
nudged = true
} else if y == height {
points[offset+1] = float64(height)
nudged = true
}
}
// Check and nudge points from end:
nudged = true
for offset := len(points) - 2; offset >= 0 && nudged; offset -= 2 {
x := int(points[offset])
y := int(points[offset+1])
if x < -1 || x > width || y < -1 || y > height {
return gozxing.NewNotFoundException(
"(w, h) = (%v, %v), (x, y) = (%v, %v)", width, height, x, y)
}
nudged = false
if x == -1 {
points[offset] = 0.0
nudged = true
} else if x == width {
points[offset] = float64(width - 1)
nudged = true
}
if y == -1 {
points[offset+1] = 0.0
nudged = true
} else if y == height {
points[offset+1] = float64(height - 1)
nudged = true
}
}
return nil
}