89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
package gozxing
|
|
|
|
import (
|
|
errors "golang.org/x/xerrors"
|
|
)
|
|
|
|
type BinaryBitmap struct {
|
|
binarizer Binarizer
|
|
matrix *BitMatrix
|
|
}
|
|
|
|
func NewBinaryBitmap(binarizer Binarizer) (*BinaryBitmap, error) {
|
|
if binarizer == nil {
|
|
return nil, errors.New("IllegalArgumentException: Binarizer must be non-null")
|
|
}
|
|
return &BinaryBitmap{binarizer, nil}, nil
|
|
}
|
|
|
|
func (this *BinaryBitmap) GetWidth() int {
|
|
return this.binarizer.GetWidth()
|
|
}
|
|
|
|
func (this *BinaryBitmap) GetHeight() int {
|
|
return this.binarizer.GetHeight()
|
|
}
|
|
|
|
func (this *BinaryBitmap) GetBlackRow(y int, row *BitArray) (*BitArray, error) {
|
|
return this.binarizer.GetBlackRow(y, row)
|
|
}
|
|
|
|
func (this *BinaryBitmap) GetBlackMatrix() (*BitMatrix, error) {
|
|
// The matrix is created on demand the first time it is requested, then cached. There are two
|
|
// reasons for this:
|
|
// 1. This work will never be done if the caller only installs 1D Reader objects, or if a
|
|
// 1D Reader finds a barcode before the 2D Readers run.
|
|
// 2. This work will only be done once even if the caller installs multiple 2D Readers.
|
|
if this.matrix == nil {
|
|
var e error
|
|
this.matrix, e = this.binarizer.GetBlackMatrix()
|
|
if e != nil {
|
|
return nil, e
|
|
}
|
|
}
|
|
return this.matrix, nil
|
|
}
|
|
|
|
func (this *BinaryBitmap) IsCropSupported() bool {
|
|
return this.binarizer.GetLuminanceSource().IsCropSupported()
|
|
}
|
|
|
|
func (this *BinaryBitmap) Crop(left, top, width, height int) (*BinaryBitmap, error) {
|
|
newSource, e := this.binarizer.GetLuminanceSource().Crop(left, top, width, height)
|
|
if e != nil {
|
|
return nil, e
|
|
}
|
|
return NewBinaryBitmap(this.binarizer.CreateBinarizer(newSource))
|
|
}
|
|
|
|
func (this *BinaryBitmap) IsRotateSupported() bool {
|
|
return this.binarizer.GetLuminanceSource().IsRotateSupported()
|
|
}
|
|
|
|
func (this *BinaryBitmap) RotateCounterClockwise() (*BinaryBitmap, error) {
|
|
newSource, e := this.binarizer.GetLuminanceSource().RotateCounterClockwise()
|
|
if e != nil {
|
|
return nil, e
|
|
}
|
|
return NewBinaryBitmap(this.binarizer.CreateBinarizer(newSource))
|
|
}
|
|
|
|
func (this *BinaryBitmap) RotateCounterClockwise45() (*BinaryBitmap, error) {
|
|
newSource, e := this.binarizer.GetLuminanceSource().RotateCounterClockwise45()
|
|
if e != nil {
|
|
return nil, e
|
|
}
|
|
return NewBinaryBitmap(this.binarizer.CreateBinarizer(newSource))
|
|
}
|
|
|
|
func (this *BinaryBitmap) String() string {
|
|
matrix, e := this.GetBlackMatrix()
|
|
if e != nil {
|
|
if _, ok := e.(NotFoundException); ok {
|
|
return ""
|
|
}
|
|
return e.Error()
|
|
}
|
|
return matrix.String()
|
|
}
|