Add ScaleWithFill

This commit is contained in:
zhaori96 2024-07-31 16:50:14 -03:00
parent 30509e0dd7
commit 2c9211e1ea
1 changed files with 13 additions and 8 deletions

View File

@ -49,11 +49,16 @@ func (bc *intCSscaledBC) CheckSum() int {
// Scale returns a resized barcode with the given width and height. // Scale returns a resized barcode with the given width and height.
func Scale(bc Barcode, width, height int) (Barcode, error) { func Scale(bc Barcode, width, height int) (Barcode, error) {
return ScaleWithFill(bc, width, height, color.White)
}
// Scale returns a resized barcode with the given width, height and fill color.
func ScaleWithFill(bc Barcode, width, height int, fill color.Color) (Barcode, error) {
switch bc.Metadata().Dimensions { switch bc.Metadata().Dimensions {
case 1: case 1:
return scale1DCode(bc, width, height) return scale1DCode(bc, width, height, fill)
case 2: case 2:
return scale2DCode(bc, width, height) return scale2DCode(bc, width, height, fill)
} }
return nil, errors.New("unsupported barcode format") return nil, errors.New("unsupported barcode format")
@ -72,7 +77,7 @@ func newScaledBC(wrapped Barcode, wrapperFunc wrapFunc, rect image.Rectangle) Ba
return result return result
} }
func scale2DCode(bc Barcode, width, height int) (Barcode, error) { func scale2DCode(bc Barcode, width, height int, fill color.Color) (Barcode, error) {
orgBounds := bc.Bounds() orgBounds := bc.Bounds()
orgWidth := orgBounds.Max.X - orgBounds.Min.X orgWidth := orgBounds.Max.X - orgBounds.Min.X
orgHeight := orgBounds.Max.Y - orgBounds.Min.Y orgHeight := orgBounds.Max.Y - orgBounds.Min.Y
@ -87,12 +92,12 @@ func scale2DCode(bc Barcode, width, height int) (Barcode, error) {
wrap := func(x, y int) color.Color { wrap := func(x, y int) color.Color {
if x < offsetX || y < offsetY { if x < offsetX || y < offsetY {
return color.White return fill
} }
x = (x - offsetX) / factor x = (x - offsetX) / factor
y = (y - offsetY) / factor y = (y - offsetY) / factor
if x >= orgWidth || y >= orgHeight { if x >= orgWidth || y >= orgHeight {
return color.White return fill
} }
return bc.At(x, y) return bc.At(x, y)
} }
@ -104,7 +109,7 @@ func scale2DCode(bc Barcode, width, height int) (Barcode, error) {
), nil ), nil
} }
func scale1DCode(bc Barcode, width, height int) (Barcode, error) { func scale1DCode(bc Barcode, width, height int, fill color.Color) (Barcode, error) {
orgBounds := bc.Bounds() orgBounds := bc.Bounds()
orgWidth := orgBounds.Max.X - orgBounds.Min.X orgWidth := orgBounds.Max.X - orgBounds.Min.X
factor := int(float64(width) / float64(orgWidth)) factor := int(float64(width) / float64(orgWidth))
@ -116,12 +121,12 @@ func scale1DCode(bc Barcode, width, height int) (Barcode, error) {
wrap := func(x, y int) color.Color { wrap := func(x, y int) color.Color {
if x < offsetX { if x < offsetX {
return color.White return fill
} }
x = (x - offsetX) / factor x = (x - offsetX) / factor
if x >= orgWidth { if x >= orgWidth {
return color.White return fill
} }
return bc.At(x, 0) return bc.At(x, 0)
} }