Add ScaleWithFill
This commit is contained in:
parent
30509e0dd7
commit
2c9211e1ea
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue