2020-08-27 21:45:09 +00:00
|
|
|
//
|
|
|
|
// Copyright 2020 FoxyUtils ehf. All rights reserved.
|
|
|
|
//
|
|
|
|
// This is a commercial product and requires a license to operate.
|
|
|
|
// A trial license can be obtained at https://unidoc.io
|
|
|
|
//
|
|
|
|
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
|
|
|
|
//
|
|
|
|
// Use of this source code is governed by the UniDoc End User License Agreement
|
|
|
|
// terms that can be accessed at https://unidoc.io/eula/
|
|
|
|
|
2022-09-10 15:35:04 +00:00
|
|
|
package bitmap ;import (_fb "encoding/binary";_f "github.com/stretchr/testify/require";_g "github.com/unidoc/unipdf/v3/common";_e "github.com/unidoc/unipdf/v3/internal/bitwise";_a "github.com/unidoc/unipdf/v3/internal/imageutil";_be "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
|
|
|
|
_d "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_ea "image";_ae "math";_de "sort";_c "strings";_dd "testing";);func (_dgdb *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _acca ="\u0043\u006c\u0061\u0073s\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047e\u0074I\u006e\u0074\u0059\u0042\u0079\u0043\u006ca\u0073\u0073";
|
|
|
|
if i >=_dgdb .IntSlice .Size (){return 0,_d .Errorf (_acca ,"\u0069\u003a\u0020\u0027\u0025\u0064\u0027 \u0069\u0073\u0020o\u0075\u0074\u0020\u006ff\u0020\u0074\u0068\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065",i );
|
|
|
|
};return int (_dgdb .YAtIndex (i )),nil ;};func (_bfbd *Bitmap )String ()string {var _cgd ="\u000a";for _dedc :=0;_dedc < _bfbd .Height ;_dedc ++{var _eabd string ;for _fdg :=0;_fdg < _bfbd .Width ;_fdg ++{_cef :=_bfbd .GetPixel (_fdg ,_dedc );if _cef {_eabd +="\u0031";
|
|
|
|
}else {_eabd +="\u0030";};};_cgd +=_eabd +"\u000a";};return _cgd ;};type shift int ;type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func (_cbd *Bitmap )SetDefaultPixel (){for _dgc :=range _cbd .Data {_cbd .Data [_dgc ]=byte (0xff);
|
|
|
|
};};func _bgg ()(_dabd [256]uint32 ){for _gdaa :=0;_gdaa < 256;_gdaa ++{if _gdaa &0x01!=0{_dabd [_gdaa ]|=0xf;};if _gdaa &0x02!=0{_dabd [_gdaa ]|=0xf0;};if _gdaa &0x04!=0{_dabd [_gdaa ]|=0xf00;};if _gdaa &0x08!=0{_dabd [_gdaa ]|=0xf000;};if _gdaa &0x10!=0{_dabd [_gdaa ]|=0xf0000;
|
|
|
|
};if _gdaa &0x20!=0{_dabd [_gdaa ]|=0xf00000;};if _gdaa &0x40!=0{_dabd [_gdaa ]|=0xf000000;};if _gdaa &0x80!=0{_dabd [_gdaa ]|=0xf0000000;};};return _dabd ;};func _gba (_ccbg ,_eafe *Bitmap ,_egee ,_abbf ,_gfggc ,_ecde ,_eabc int ,_egbf CombinationOperator )error {var _ebcf int ;
|
|
|
|
_degg :=func (){_ebcf ++;_gfggc +=_eafe .RowStride ;_ecde +=_ccbg .RowStride ;_eabc +=_ccbg .RowStride };for _ebcf =_egee ;_ebcf < _abbf ;_degg (){_dbfd :=_gfggc ;for _fegc :=_ecde ;_fegc <=_eabc ;_fegc ++{_agac ,_ccf :=_eafe .GetByte (_dbfd );if _ccf !=nil {return _ccf ;
|
|
|
|
};_fega ,_ccf :=_ccbg .GetByte (_fegc );if _ccf !=nil {return _ccf ;};if _ccf =_eafe .SetByte (_dbfd ,_cabd (_agac ,_fega ,_egbf ));_ccf !=nil {return _ccf ;};_dbfd ++;};};return nil ;};func (_dcba *BitmapsArray )GetBox (i int )(*_ea .Rectangle ,error ){const _gead ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";
|
|
|
|
if _dcba ==nil {return nil ,_d .Error (_gead ,"p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074m\u0061\u0070\u0073A\u0072r\u0061\u0079\u0027");};if i > len (_dcba .Boxes )-1{return nil ,_d .Errorf (_gead ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
|
|
};return _dcba .Boxes [i ],nil ;};var _egbb [256]uint8 ;func (_bccfe Points )Get (i int )(Point ,error ){if i > len (_bccfe )-1{return Point {},_d .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
|
|
};return _bccfe [i ],nil ;};func (_bcbe *ClassedPoints )Swap (i ,j int ){_bcbe .IntSlice [i ],_bcbe .IntSlice [j ]=_bcbe .IntSlice [j ],_bcbe .IntSlice [i ];};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};
|
|
|
|
func _dceg (_acac *Bitmap ,_gdca int )(*Bitmap ,error ){const _acga ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _acac ==nil {return nil ,_d .Error (_acga ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
};if _gdca <=0{return nil ,_d .Error (_acga ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _gdca ==1{_efdcb ,_accb :=_fcdg (nil ,_acac );if _accb !=nil {return nil ,_d .Wrap (_accb ,_acga ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");
|
|
|
|
};return _efdcb ,nil ;};_aada ,_cccf :=_cdfc (_acac ,_gdca ,_gdca );if _cccf !=nil {return nil ,_d .Wrap (_cccf ,_acga ,"");};return _aada ,nil ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;
|
|
|
|
SizeSelectByPerimeter ;);func (_fag *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _fag .Copy (),nil ;};_dce ,_gfga :=_fag .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _gfga !=nil {return nil ,_d .Wrap (_gfga ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");
|
|
|
|
};return _dce ,nil ;};func (_dgbf *Bitmap )setEightBytes (_cede int ,_bcbda uint64 )error {_gagf :=_dgbf .RowStride -(_cede %_dgbf .RowStride );if _dgbf .RowStride !=_dgbf .Width >>3{_gagf --;};if _gagf >=8{return _dgbf .setEightFullBytes (_cede ,_bcbda );
|
|
|
|
};return _dgbf .setEightPartlyBytes (_cede ,_gagf ,_bcbda );};func _fbd (_cdd *Bitmap ,_gcb ...int )(_adg *Bitmap ,_eaa error ){const _ac ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
|
|
|
|
if _cdd ==nil {return nil ,_d .Error (_ac ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_gcb )==0||len (_gcb )> 4{return nil ,_d .Error (_ac ,"t\u0068\u0065\u0072\u0065\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0061\u0074\u0020\u006cea\u0073\u0074\u0020\u006fn\u0065\u0020\u0061\u006e\u0064\u0020\u0061\u0074\u0020mo\u0073\u0074 \u0034\u0020\u006c\u0065\u0076\u0065\u006c\u0073");
|
|
|
|
};if _gcb [0]<=0{_g .Log .Debug ("\u006c\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030 \u002d\u0020\u006e\u006f\u0020\u0072\u0065\u0064\u0075\u0063t\u0069\u006f\u006e");_adg ,_eaa =_fcdg (nil ,_cdd );if _eaa !=nil {return nil ,_d .Wrap (_eaa ,_ac ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
|
|
|
|
};return _adg ,nil ;};_efa :=_ddd ();_adg =_cdd ;for _afc ,_fca :=range _gcb {if _fca <=0{break ;};_adg ,_eaa =_bd (_adg ,_fca ,_efa );if _eaa !=nil {return nil ,_d .Wrapf (_eaa ,_ac ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_afc );
|
|
|
|
};};return _adg ,nil ;};func init (){for _bea :=0;_bea < 256;_bea ++{_egbb [_bea ]=uint8 (_bea &0x1)+(uint8 (_bea >>1)&0x1)+(uint8 (_bea >>2)&0x1)+(uint8 (_bea >>3)&0x1)+(uint8 (_bea >>4)&0x1)+(uint8 (_bea >>5)&0x1)+(uint8 (_bea >>6)&0x1)+(uint8 (_bea >>7)&0x1);
|
|
|
|
};};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _gbeg (d ,s ,sel )};var (_bcedd =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_efbgc =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func _dedf (_afdg ,_fda int )*Bitmap {return &Bitmap {Width :_afdg ,Height :_fda ,RowStride :(_afdg +7)>>3};
|
|
|
|
};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _gabc (src ,sequence ...);};func TstISymbol (t *_dd .T ,scale ...int )*Bitmap {_agga ,_fegea :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_f .NoError (t ,_fegea );
|
|
|
|
return TstGetScaledSymbol (t ,_agga ,scale ...);};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _gcbd ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_gada :=_dedf (width ,height );_gada .Data =data ;if len (data )< height *_gada .RowStride {return nil ,_d .Errorf (_gcbd ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064\u0061\u0074\u0061\u0020l\u0065\u006e\u0067\u0074\u0068\u003a \u0025\u0064\u0020\u002d\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0062e\u003a\u0020\u0025\u0064",len (data ),height *_gada .RowStride );
|
|
|
|
};return _gada ,nil ;};func MakePixelSumTab8 ()[]int {return _ceefb ()};func (_fgdd *Bitmap )centroid (_aece ,_eabbf []int )(Point ,error ){_fabgc :=Point {};_fgdd .setPadBits (0);if len (_aece )==0{_aece =_dfda ();};if len (_eabbf )==0{_eabbf =_ceefb ();
|
|
|
|
};var _ccdb ,_bccaa ,_efebf ,_cfbd ,_ebbc ,_ecff int ;var _gfbba byte ;for _ebbc =0;_ebbc < _fgdd .Height ;_ebbc ++{_eead :=_fgdd .RowStride *_ebbc ;_cfbd =0;for _ecff =0;_ecff < _fgdd .RowStride ;_ecff ++{_gfbba =_fgdd .Data [_eead +_ecff ];if _gfbba !=0{_cfbd +=_eabbf [_gfbba ];
|
|
|
|
_ccdb +=_aece [_gfbba ]+_ecff *8*_eabbf [_gfbba ];};};_efebf +=_cfbd ;_bccaa +=_cfbd *_ebbc ;};if _efebf !=0{_fabgc .X =float32 (_ccdb )/float32 (_efebf );_fabgc .Y =float32 (_bccaa )/float32 (_efebf );};return _fabgc ,nil ;};func (_dede *Bitmap )GetChocolateData ()[]byte {if _dede .Color ==Vanilla {_dede .inverseData ();
|
|
|
|
};return _dede .Data ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_ea .Rectangle ;};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_adfg float64 ,_eagd error ){const _becg ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
|
|
|
|
if bm1 ==nil ||bm2 ==nil {return 0,_d .Error (_becg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_d .Error (_becg ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
|
|
|
|
};if area1 <=0||area2 <=0{return 0,_d .Error (_becg ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_ccgf ,_fab :=bm1 .Width ,bm1 .Height ;_cdcda ,_dbbb :=bm2 .Width ,bm2 .Height ;
|
|
|
|
_agdg :=_fdgg (_ccgf -_cdcda );if _agdg > maxDiffW {return 0,nil ;};_badfd :=_fdgg (_fab -_dbbb );if _badfd > maxDiffH {return 0,nil ;};var _dbgc ,_fdc int ;if delX >=0{_dbgc =int (delX +0.5);}else {_dbgc =int (delX -0.5);};if delY >=0{_fdc =int (delY +0.5);
|
|
|
|
}else {_fdc =int (delY -0.5);};_acdb :=_gfa (_fdc ,0);_gafe :=_ecc (_dbbb +_fdc ,_fab );_baacc :=bm1 .RowStride *_acdb ;_dafc :=bm2 .RowStride *(_acdb -_fdc );_fccb :=_gfa (_dbgc ,0);_dafb :=_ecc (_cdcda +_dbgc ,_ccgf );_edbc :=bm2 .RowStride ;var _fedc ,_eadfb int ;
|
|
|
|
if _dbgc >=8{_fedc =_dbgc >>3;_baacc +=_fedc ;_fccb -=_fedc <<3;_dafb -=_fedc <<3;_dbgc &=7;}else if _dbgc <=-8{_eadfb =-((_dbgc +7)>>3);_dafc +=_eadfb ;_edbc -=_eadfb ;_dbgc +=_eadfb <<3;};if _fccb >=_dafb ||_acdb >=_gafe {return 0,nil ;};_bdgb :=(_dafb +7)>>3;
|
|
|
|
var (_agbf ,_facb ,_ebac byte ;_ggdgg ,_bccd ,_bfdd int ;);switch {case _dbgc ==0:for _bfdd =_acdb ;_bfdd < _gafe ;_bfdd ,_baacc ,_dafc =_bfdd +1,_baacc +bm1 .RowStride ,_dafc +bm2 .RowStride {for _bccd =0;_bccd < _bdgb ;_bccd ++{_ebac =bm1 .Data [_baacc +_bccd ]&bm2 .Data [_dafc +_bccd ];
|
|
|
|
_ggdgg +=tab [_ebac ];};};case _dbgc > 0:if _edbc < _bdgb {for _bfdd =_acdb ;_bfdd < _gafe ;_bfdd ,_baacc ,_dafc =_bfdd +1,_baacc +bm1 .RowStride ,_dafc +bm2 .RowStride {_agbf ,_facb =bm1 .Data [_baacc ],bm2 .Data [_dafc ]>>uint (_dbgc );_ebac =_agbf &_facb ;
|
|
|
|
_ggdgg +=tab [_ebac ];for _bccd =1;_bccd < _edbc ;_bccd ++{_agbf ,_facb =bm1 .Data [_baacc +_bccd ],(bm2 .Data [_dafc +_bccd ]>>uint (_dbgc ))|(bm2 .Data [_dafc +_bccd -1]<<uint (8-_dbgc ));_ebac =_agbf &_facb ;_ggdgg +=tab [_ebac ];};_agbf =bm1 .Data [_baacc +_bccd ];
|
|
|
|
_facb =bm2 .Data [_dafc +_bccd -1]<<uint (8-_dbgc );_ebac =_agbf &_facb ;_ggdgg +=tab [_ebac ];};}else {for _bfdd =_acdb ;_bfdd < _gafe ;_bfdd ,_baacc ,_dafc =_bfdd +1,_baacc +bm1 .RowStride ,_dafc +bm2 .RowStride {_agbf ,_facb =bm1 .Data [_baacc ],bm2 .Data [_dafc ]>>uint (_dbgc );
|
|
|
|
_ebac =_agbf &_facb ;_ggdgg +=tab [_ebac ];for _bccd =1;_bccd < _bdgb ;_bccd ++{_agbf =bm1 .Data [_baacc +_bccd ];_facb =(bm2 .Data [_dafc +_bccd ]>>uint (_dbgc ))|(bm2 .Data [_dafc +_bccd -1]<<uint (8-_dbgc ));_ebac =_agbf &_facb ;_ggdgg +=tab [_ebac ];
|
|
|
|
};};};default:if _bdgb < _edbc {for _bfdd =_acdb ;_bfdd < _gafe ;_bfdd ,_baacc ,_dafc =_bfdd +1,_baacc +bm1 .RowStride ,_dafc +bm2 .RowStride {for _bccd =0;_bccd < _bdgb ;_bccd ++{_agbf =bm1 .Data [_baacc +_bccd ];_facb =bm2 .Data [_dafc +_bccd ]<<uint (-_dbgc );
|
|
|
|
_facb |=bm2 .Data [_dafc +_bccd +1]>>uint (8+_dbgc );_ebac =_agbf &_facb ;_ggdgg +=tab [_ebac ];};};}else {for _bfdd =_acdb ;_bfdd < _gafe ;_bfdd ,_baacc ,_dafc =_bfdd +1,_baacc +bm1 .RowStride ,_dafc +bm2 .RowStride {for _bccd =0;_bccd < _bdgb -1;_bccd ++{_agbf =bm1 .Data [_baacc +_bccd ];
|
|
|
|
_facb =bm2 .Data [_dafc +_bccd ]<<uint (-_dbgc );_facb |=bm2 .Data [_dafc +_bccd +1]>>uint (8+_dbgc );_ebac =_agbf &_facb ;_ggdgg +=tab [_ebac ];};_agbf =bm1 .Data [_baacc +_bccd ];_facb =bm2 .Data [_dafc +_bccd ]<<uint (-_dbgc );_ebac =_agbf &_facb ;_ggdgg +=tab [_ebac ];
|
|
|
|
};};};_adfg =float64 (_ggdgg )*float64 (_ggdgg )/(float64 (area1 )*float64 (area2 ));return _adfg ,nil ;};func _gfa (_bcfe ,_faf int )int {if _bcfe > _faf {return _bcfe ;};return _faf ;};func (_cad *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _cad .addBorderGeneral (left ,right ,top ,bot ,val );
|
|
|
|
};func _fgea (_cbeg ,_febe *Bitmap ,_fgce CombinationOperator )*Bitmap {_ceda :=New (_cbeg .Width ,_cbeg .Height );for _ccbe :=0;_ccbe < len (_ceda .Data );_ccbe ++{_ceda .Data [_ccbe ]=_cabd (_cbeg .Data [_ccbe ],_febe .Data [_ccbe ],_fgce );};return _ceda ;
|
|
|
|
};func _bdgfa (_gcgcf *Bitmap ,_cfda *_be .Stack ,_bcdd ,_accgg int )(_adfb *_ea .Rectangle ,_fege error ){const _aafe ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _gcgcf ==nil {return nil ,_d .Error (_aafe ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
|
|
|
|
};if _cfda ==nil {return nil ,_d .Error (_aafe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_deea ,_fafd :=_gcgcf .Width ,_gcgcf .Height ;_fgbd :=_deea -1;_acgc :=_fafd -1;if _bcdd < 0||_bcdd > _fgbd ||_accgg < 0||_accgg > _acgc ||!_gcgcf .GetPixel (_bcdd ,_accgg ){return nil ,nil ;
|
|
|
|
};_cgce :=_ea .Rect (100000,100000,0,0);if _fege =_fade (_cfda ,_bcdd ,_bcdd ,_accgg ,1,_acgc ,&_cgce );_fege !=nil {return nil ,_d .Wrap (_fege ,_aafe ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fege =_fade (_cfda ,_bcdd ,_bcdd ,_accgg +1,-1,_acgc ,&_cgce );
|
|
|
|
_fege !=nil {return nil ,_d .Wrap (_fege ,_aafe ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_cgce .Min .X ,_cgce .Max .X =_bcdd ,_bcdd ;_cgce .Min .Y ,_cgce .Max .Y =_accgg ,_accgg ;var (_dddg *fillSegment ;
|
|
|
|
_ceb int ;);for _cfda .Len ()> 0{if _dddg ,_fege =_ffead (_cfda );_fege !=nil {return nil ,_d .Wrap (_fege ,_aafe ,"");};_accgg =_dddg ._fffcbb ;for _bcdd =_dddg ._gfade -1;_bcdd >=0&&_gcgcf .GetPixel (_bcdd ,_accgg );_bcdd --{if _fege =_gcgcf .SetPixel (_bcdd ,_accgg ,0);
|
|
|
|
_fege !=nil {return nil ,_d .Wrap (_fege ,_aafe ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _bcdd >=_dddg ._gfade -1{for {for _bcdd ++;_bcdd <=_dddg ._afag +1&&_bcdd <=_fgbd &&!_gcgcf .GetPixel (_bcdd ,_accgg );_bcdd ++{};_ceb =_bcdd ;if !(_bcdd <=_dddg ._afag +1&&_bcdd <=_fgbd ){break ;
|
|
|
|
};for ;_bcdd <=_fgbd &&_gcgcf .GetPixel (_bcdd ,_accgg );_bcdd ++{if _fege =_gcgcf .SetPixel (_bcdd ,_accgg ,0);_fege !=nil {return nil ,_d .Wrap (_fege ,_aafe ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _fege =_fade (_cfda ,_ceb ,_bcdd -1,_dddg ._fffcbb ,_dddg ._aaef ,_acgc ,&_cgce );
|
|
|
|
_fege !=nil {return nil ,_d .Wrap (_fege ,_aafe ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bcdd > _dddg ._afag {if _fege =_fade (_cfda ,_dddg ._afag +1,_bcdd -1,_dddg ._fffcbb ,-_dddg ._aaef ,_acgc ,&_cgce );_fege !=nil {return nil ,_d .Wrap (_fege ,_aafe ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
|
|
};};};continue ;};_ceb =_bcdd +1;if _ceb < _dddg ._gfade {if _fege =_fade (_cfda ,_ceb ,_dddg ._gfade -1,_dddg ._fffcbb ,-_dddg ._aaef ,_acgc ,&_cgce );_fege !=nil {return nil ,_d .Wrap (_fege ,_aafe ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
|
|
|
|
};};_bcdd =_dddg ._gfade ;for {for ;_bcdd <=_fgbd &&_gcgcf .GetPixel (_bcdd ,_accgg );_bcdd ++{if _fege =_gcgcf .SetPixel (_bcdd ,_accgg ,0);_fege !=nil {return nil ,_d .Wrap (_fege ,_aafe ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _fege =_fade (_cfda ,_ceb ,_bcdd -1,_dddg ._fffcbb ,_dddg ._aaef ,_acgc ,&_cgce );
|
|
|
|
_fege !=nil {return nil ,_d .Wrap (_fege ,_aafe ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bcdd > _dddg ._afag {if _fege =_fade (_cfda ,_dddg ._afag +1,_bcdd -1,_dddg ._fffcbb ,-_dddg ._aaef ,_acgc ,&_cgce );_fege !=nil {return nil ,_d .Wrap (_fege ,_aafe ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
|
|
};};for _bcdd ++;_bcdd <=_dddg ._afag +1&&_bcdd <=_fgbd &&!_gcgcf .GetPixel (_bcdd ,_accgg );_bcdd ++{};_ceb =_bcdd ;if !(_bcdd <=_dddg ._afag +1&&_bcdd <=_fgbd ){break ;};};};_cgce .Max .X ++;_cgce .Max .Y ++;return &_cgce ,nil ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _aed ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
|
|
|
|
_gdbc :=_dedf (width ,height );_gdbc .Data =data ;if _bbf :=((width *height )+7)>>3;len (data )< _bbf {return nil ,_d .Errorf (_aed ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064a\u0074\u0061\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u003a\u0020\u0027\u0025\u0064\u0027\u002e\u0020\u0054\u0068\u0065\u0020\u0064\u0061t\u0061\u0020s\u0068\u006fu\u006c\u0064\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0020\u0061\u0074 l\u0065\u0061\u0073\u0074\u003a\u0020\u0027\u0025\u0064'\u0020\u0062\u0079\u0074\u0065\u0073",len (data ),_bbf );
|
|
|
|
};if _acc :=_gdbc .addPadBits ();_acc !=nil {return nil ,_d .Wrap (_acc ,_aed ,"");};return _gdbc ,nil ;};func (_bbb *Bitmap )setEightFullBytes (_gfbb int ,_bcge uint64 )error {if _gfbb +7> len (_bbb .Data )-1{return _d .Error ("\u0073\u0065\u0074\u0045\u0069\u0067\u0068\u0074\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
|
|
|
|
};_bbb .Data [_gfbb ]=byte ((_bcge &0xff00000000000000)>>56);_bbb .Data [_gfbb +1]=byte ((_bcge &0xff000000000000)>>48);_bbb .Data [_gfbb +2]=byte ((_bcge &0xff0000000000)>>40);_bbb .Data [_gfbb +3]=byte ((_bcge &0xff00000000)>>32);_bbb .Data [_gfbb +4]=byte ((_bcge &0xff000000)>>24);
|
|
|
|
_bbb .Data [_gfbb +5]=byte ((_bcge &0xff0000)>>16);_bbb .Data [_gfbb +6]=byte ((_bcge &0xff00)>>8);_bbb .Data [_gfbb +7]=byte (_bcge &0xff);return nil ;};func (_gdfe *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _gacf ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";
|
|
|
|
if _gdfe ==nil {return nil ,_d .Error (_gacf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_gdfe .Values )-1{return nil ,_d .Errorf (_gacf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
|
|
};return _gdfe .Values [i ],nil ;};func (_add *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_bbca *Boxes ,_fcde error ){const _acg ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";if _add ==nil {return nil ,_d .Error (_acg ,"\u0070r\u006f\u0076\u0069\u0064e\u0064\u0020\u0065\u006d\u0070t\u0079 \u0027b\u0027\u0020\u0062\u0069\u0074\u006d\u0061p");
|
|
|
|
};if connectivity !=4&&connectivity !=8{return nil ,_d .Error (_acg ,"\u0063\u006f\u006ene\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006e\u006f\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038");};if bms ==nil {if _bbca ,_fcde =_add .connComponentsBB (connectivity );
|
|
|
|
_fcde !=nil {return nil ,_d .Wrap (_fcde ,_acg ,"");};}else {if _bbca ,_fcde =_add .connComponentsBitmapsBB (bms ,connectivity );_fcde !=nil {return nil ,_d .Wrap (_fcde ,_acg ,"");};};return _bbca ,nil ;};func (_eef *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _eef .Copy (),nil ;
|
|
|
|
};_fbga ,_aaea :=_eef .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _aaea !=nil {return nil ,_d .Wrap (_aaea ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _fbga ,nil ;};var _eecb =[]byte {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x78,0x27,0xC2,0x27,0x91,0x00,0x22,0x48,0x21,0x03,0x24,0x91,0x00,0x22,0x48,0x21,0x02,0xA4,0x95,0x00,0x22,0x48,0x21,0x02,0x64,0x9B,0x00,0x3C,0x78,0x21,0x02,0x27,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x15,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
|
|
|
type MorphOperation int ;func TstWriteSymbols (t *_dd .T ,bms *Bitmaps ,src *Bitmap ){for _aeec :=0;_aeec < bms .Size ();_aeec ++{_gfgbb :=bms .Values [_aeec ];_fafgc :=bms .Boxes [_aeec ];_cbefa :=src .RasterOperation (_fafgc .Min .X ,_fafgc .Min .Y ,_gfgbb .Width ,_gfgbb .Height ,PixSrc ,_gfgbb ,0,0);
|
|
|
|
_f .NoError (t ,_cbefa );};};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _gdgf (d ,s ,hSize ,vSize )};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _cabd (oldByte ,newByte ,op );};type CombinationOperator int ;
|
|
|
|
func (_dfgb *Bitmap )addPadBits ()(_dbee error ){const _bfc ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_fgfa :=_dfgb .Width %8;if _fgfa ==0{return nil ;};_gaaf :=_dfgb .Width /8;_gbc :=_e .NewReader (_dfgb .Data );
|
|
|
|
_eeag :=make ([]byte ,_dfgb .Height *_dfgb .RowStride );_feg :=_e .NewWriterMSB (_eeag );_aedb :=make ([]byte ,_gaaf );var (_cfcg int ;_dbcc uint64 ;);for _cfcg =0;_cfcg < _dfgb .Height ;_cfcg ++{if _ ,_dbee =_gbc .Read (_aedb );_dbee !=nil {return _d .Wrap (_dbee ,_bfc ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");
|
|
|
|
};if _ ,_dbee =_feg .Write (_aedb );_dbee !=nil {return _d .Wrap (_dbee ,_bfc ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _dbcc ,_dbee =_gbc .ReadBits (byte (_fgfa ));_dbee !=nil {return _d .Wrap (_dbee ,_bfc ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");
|
|
|
|
};if _dbee =_feg .WriteByte (byte (_dbcc )<<uint (8-_fgfa ));_dbee !=nil {return _d .Wrap (_dbee ,_bfc ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");};};_dfgb .Data =_feg .Data ();return nil ;};func (_eeg CombinationOperator )String ()string {var _afcb string ;
|
|
|
|
switch _eeg {case CmbOpOr :_afcb ="\u004f\u0052";case CmbOpAnd :_afcb ="\u0041\u004e\u0044";case CmbOpXor :_afcb ="\u0058\u004f\u0052";case CmbOpXNor :_afcb ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_afcb ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_afcb ="\u004e\u004f\u0054";
|
|
|
|
};return _afcb ;};func TstGetScaledSymbol (t *_dd .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_fadef ,_ecae :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });
|
|
|
|
_f .NoError (t ,_ecae );return _fadef ;};func (_gagdc MorphProcess )verify (_efae int ,_efaeg ,_fadc *int )error {const _cedec ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _gagdc .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_gagdc .Arguments )!=2{return _d .Error (_cedec ,"\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0064\u0027\u002c\u0020\u0027\u0065\u0027\u002c \u0027\u006f\u0027\u002c\u0020\u0027\u0063\u0027\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020\u0061\u0074\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0032\u0020\u0061r\u0067\u0075\u006d\u0065\u006et\u0073");
|
|
|
|
};_bbbb ,_bacc :=_gagdc .getWidthHeight ();if _bbbb <=0||_bacc <=0{return _d .Error (_cedec ,"O\u0070er\u0061t\u0069o\u006e\u003a\u0020\u0027\u0064'\u002c\u0020\u0027e\u0027\u002c\u0020\u0027\u006f'\u002c\u0020\u0027c\u0027\u0020\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073 \u0062\u006f\u0074h w\u0069\u0064\u0074\u0068\u0020\u0061n\u0064\u0020\u0068\u0065\u0069\u0067\u0068\u0074\u0020\u0074\u006f\u0020b\u0065 \u003e\u003d\u0020\u0030");
|
|
|
|
};case MopRankBinaryReduction :_ggdf :=len (_gagdc .Arguments );*_efaeg +=_ggdf ;if _ggdf < 1||_ggdf > 4{return _d .Error (_cedec ,"\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0072\u0027\u0020\u0072\u0065\u0071\u0075\u0069r\u0065\u0073\u0020\u0061\u0074\u0020\u006c\u0065\u0061s\u0074\u0020\u0031\u0020\u0061\u006e\u0064\u0020\u0061\u0074\u0020\u006d\u006fs\u0074\u0020\u0034\u0020\u0061\u0072g\u0075\u006d\u0065n\u0074\u0073");
|
|
|
|
};for _cedae :=0;_cedae < _ggdf ;_cedae ++{if _gagdc .Arguments [_cedae ]< 1||_gagdc .Arguments [_cedae ]> 4{return _d .Error (_cedec ,"\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0052\u0065\u0064\u0075\u0063\u0074\u0069\u006f\u006e\u0020\u006c\u0065\u0076\u0065\u006c\u0020\u006du\u0073\u0074\u0020\u0062\u0065\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065 \u00280\u002c\u0020\u0034\u003e");
|
|
|
|
};};case MopReplicativeBinaryExpansion :if len (_gagdc .Arguments )==0{return _d .Error (_cedec ,"\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074i\u0076\u0065\u0042in\u0061\u0072\u0079\u0045\u0078\u0070a\u006e\u0073\u0069\u006f\u006e\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020o\u006e\u0065\u0020\u0061\u0072\u0067\u0075\u006de\u006e\u0074");
|
|
|
|
};_faga :=_gagdc .Arguments [0];if _faga !=2&&_faga !=4&&_faga !=8{return _d .Error (_cedec ,"R\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0069\u0076\u0065\u0042\u0069\u006e\u0061\u0072\u0079\u0045\u0078\u0070\u0061\u006e\u0073\u0069\u006f\u006e\u0020m\u0075s\u0074\u0020\u0062\u0065 \u006f\u0066 \u0066\u0061\u0063\u0074\u006f\u0072\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");
|
|
|
|
};*_efaeg -=_bcca [_faga /4];case MopAddBorder :if len (_gagdc .Arguments )==0{return _d .Error (_cedec ,"\u0041\u0064\u0064B\u006f\u0072\u0064\u0065r\u0020\u0072\u0065\u0071\u0075\u0069\u0072e\u0073\u0020\u006f\u006e\u0065\u0020\u0061\u0072\u0067\u0075\u006d\u0065\u006e\u0074");
|
|
|
|
};_gdfb :=_gagdc .Arguments [0];if _efae > 0{return _d .Error (_cedec ,"\u0041\u0064\u0064\u0042\u006f\u0072\u0064\u0065\u0072\u0020\u006d\u0075\u0073t\u0020\u0062\u0065\u0020\u0061\u0020f\u0069\u0072\u0073\u0074\u0020\u006d\u006f\u0072\u0070\u0068\u0020\u0070\u0072o\u0063\u0065\u0073\u0073");
|
|
|
|
};if _gdfb < 1{return _d .Error (_cedec ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_fadc =_gdfb ;};return nil ;};func MakePixelCentroidTab8 ()[]int {return _dfda ()};
|
|
|
|
func _ddd ()(_gccc []byte ){_gccc =make ([]byte ,256);for _cacb :=0;_cacb < 256;_cacb ++{_dec :=byte (_cacb );_gccc [_dec ]=(_dec &0x01)|((_dec &0x04)>>1)|((_dec &0x10)>>2)|((_dec &0x40)>>3)|((_dec &0x02)<<3)|((_dec &0x08)<<2)|((_dec &0x20)<<1)|(_dec &0x80);
|
|
|
|
};return _gccc ;};type Component int ;func (_gdfg *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_ace *Boxes ,_fgdf error ){const _fagf ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
|
|
|
|
if _gdfg ==nil {return nil ,_d .Error (_fagf ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_gdfg )==0{return _gdfg ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_d .Errorf (_fagf ,"\u0069\u006e\u0076al\u0069\u0064\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );
|
|
|
|
};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE :default:return nil ,_d .Errorf (_fagf ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
|
|
|
|
};_dfe :=_gdfg .makeSizeIndicator (width ,height ,tp ,relation );_bbcb ,_fgdf :=_gdfg .selectWithIndicator (_dfe );if _fgdf !=nil {return nil ,_d .Wrap (_fgdf ,_fagf ,"");};return _bbcb ,nil ;};func (_ebee *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _egecc ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";
|
|
|
|
_acgb ,_cafeg :=_ebee .selectByIndexes (idx );if _cafeg !=nil {return nil ,_d .Wrap (_cafeg ,_egecc ,"");};return _acgb ,nil ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_ffbf bool ,_acec error ){const _eac ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
|
|
|
|
_ccdd ,_aaaa :=p1 .Width ,p1 .Height ;_ddcf ,_ceff :=p3 .Width ,p3 .Height ;if _be .Abs (_ccdd -_ddcf )> maxDiffW {return false ,nil ;};if _be .Abs (_aaaa -_ceff )> maxDiffH {return false ,nil ;};_fabg :=int (float32 (area1 )*(1.0-rank )+0.5);_eged :=int (float32 (area3 )*(1.0-rank )+0.5);
|
|
|
|
var _cge ,_eeda int ;if delX >=0{_cge =int (delX +0.5);}else {_cge =int (delX -0.5);};if delY >=0{_eeda =int (delY +0.5);}else {_eeda =int (delY -0.5);};_aefac :=p1 .CreateTemplate ();if _acec =_aefac .RasterOperation (0,0,_ccdd ,_aaaa ,PixSrc ,p1 ,0,0);
|
|
|
|
_acec !=nil {return false ,_d .Wrap (_acec ,_eac ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _acec =_aefac .RasterOperation (_cge ,_eeda ,_ccdd ,_aaaa ,PixNotSrcAndDst ,p4 ,0,0);_acec !=nil {return false ,_d .Wrap (_acec ,_eac ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
|
|
|
|
};_ffbf ,_acec =_aefac .ThresholdPixelSum (_fabg ,tab8 );if _acec !=nil {return false ,_d .Wrap (_acec ,_eac ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _ffbf {return false ,nil ;};if _acec =_aefac .RasterOperation (_cge ,_eeda ,_ddcf ,_ceff ,PixSrc ,p3 ,0,0);
|
|
|
|
_acec !=nil {return false ,_d .Wrap (_acec ,_eac ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _acec =_aefac .RasterOperation (0,0,_ddcf ,_ceff ,PixNotSrcAndDst ,p2 ,0,0);_acec !=nil {return false ,_d .Wrap (_acec ,_eac ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
|
|
|
|
};_ffbf ,_acec =_aefac .ThresholdPixelSum (_eged ,tab8 );if _acec !=nil {return false ,_d .Wrap (_acec ,_eac ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_ffbf ,nil ;};func (_fce *Bitmap )thresholdPixelSum (_egccg int )bool {var (_dcdb int ;
|
|
|
|
_bade uint8 ;_baabb byte ;_dbg int ;);_bfg :=_fce .RowStride ;_bffa :=uint (_fce .Width &0x07);if _bffa !=0{_bade =uint8 ((0xff<<(8-_bffa ))&0xff);_bfg --;};for _dgbfb :=0;_dgbfb < _fce .Height ;_dgbfb ++{for _dbg =0;_dbg < _bfg ;_dbg ++{_baabb =_fce .Data [_dgbfb *_fce .RowStride +_dbg ];
|
|
|
|
_dcdb +=int (_egbb [_baabb ]);};if _bffa !=0{_baabb =_fce .Data [_dgbfb *_fce .RowStride +_dbg ]&_bade ;_dcdb +=int (_egbb [_baabb ]);};if _dcdb > _egccg {return true ;};};return false ;};func _gbgeb (_gbdd ,_feec ,_edce byte )byte {return (_gbdd &^(_edce ))|(_feec &_edce )};
|
|
|
|
func _abb ()(_ebf [256]uint64 ){for _afd :=0;_afd < 256;_afd ++{if _afd &0x01!=0{_ebf [_afd ]|=0xff;};if _afd &0x02!=0{_ebf [_afd ]|=0xff00;};if _afd &0x04!=0{_ebf [_afd ]|=0xff0000;};if _afd &0x08!=0{_ebf [_afd ]|=0xff000000;};if _afd &0x10!=0{_ebf [_afd ]|=0xff00000000;
|
|
|
|
};if _afd &0x20!=0{_ebf [_afd ]|=0xff0000000000;};if _afd &0x40!=0{_ebf [_afd ]|=0xff000000000000;};if _afd &0x80!=0{_ebf [_afd ]|=0xff00000000000000;};};return _ebf ;};func (_fcbfa *ClassedPoints )xSortFunction ()func (_gcce int ,_gaafd int )bool {return func (_ffea ,_fedg int )bool {return _fcbfa .XAtIndex (_ffea )< _fcbfa .XAtIndex (_fedg )};
|
|
|
|
};func (_agf *Bitmap )removeBorderGeneral (_eefg ,_cbec ,_bcac ,_gbca int )(*Bitmap ,error ){const _bgcb ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _eefg < 0||_cbec < 0||_bcac < 0||_gbca < 0{return nil ,_d .Error (_bgcb ,"\u006e\u0065g\u0061\u0074\u0069\u0076\u0065\u0020\u0062\u0072\u006f\u0064\u0065\u0072\u0020\u0072\u0065\u006d\u006f\u0076\u0065\u0020\u0076\u0061lu\u0065\u0073");
|
|
|
|
};_gcba ,_ebfb :=_agf .Width ,_agf .Height ;_gdce :=_gcba -_eefg -_cbec ;_aaac :=_ebfb -_bcac -_gbca ;if _gdce <=0{return nil ,_d .Errorf (_bgcb ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_gdce );
|
|
|
|
};if _aaac <=0{return nil ,_d .Errorf (_bgcb ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_aaac );};_gdf :=New (_gdce ,_aaac );_gdf .Color =_agf .Color ;_bcbd :=_gdf .RasterOperation (0,0,_gdce ,_aaac ,PixSrc ,_agf ,_eefg ,_bcac );
|
|
|
|
if _bcbd !=nil {return nil ,_d .Wrap (_bcbd ,_bgcb ,"");};return _gdf ,nil ;};const (_agede shift =iota ;_bdfg ;);func (_edcce *Bitmaps )CountPixels ()*_be .NumSlice {_cdde :=&_be .NumSlice {};for _ ,_dafd :=range _edcce .Values {_cdde .AddInt (_dafd .CountPixels ());
|
|
|
|
};return _cdde ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_ea .Rectangle ;};func (_ceccb *Bitmap )nextOnPixel (_aaa ,_dbeb int )(_cegb _ea .Point ,_aebg bool ,_bcced error ){const _gaafa ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";
|
|
|
|
_cegb ,_aebg ,_bcced =_ceccb .nextOnPixelLow (_ceccb .Width ,_ceccb .Height ,_ceccb .RowStride ,_aaa ,_dbeb );if _bcced !=nil {return _cegb ,false ,_d .Wrap (_bcced ,_gaafa ,"");};return _cegb ,_aebg ,nil ;};func _fggf (_afg ,_bccf ,_dcda *Bitmap )(*Bitmap ,error ){const _fgge ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";
|
|
|
|
if _bccf ==nil {return nil ,_d .Error (_fgge ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _dcda ==nil {return nil ,_d .Error (_fgge ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _gagd error ;switch {case _afg ==_bccf :if _gagd =_afg .RasterOperation (0,0,_bccf .Width ,_bccf .Height ,PixNotSrcAndDst ,_dcda ,0,0);
|
|
|
|
_gagd !=nil {return nil ,_d .Wrap (_gagd ,_fgge ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _afg ==_dcda :if _gagd =_afg .RasterOperation (0,0,_bccf .Width ,_bccf .Height ,PixNotSrcAndDst ,_bccf ,0,0);_gagd !=nil {return nil ,_d .Wrap (_gagd ,_fgge ,"\u0064 \u003d\u003d\u0020\u0073\u0032");
|
|
|
|
};default:_afg ,_gagd =_fcdg (_afg ,_bccf );if _gagd !=nil {return nil ,_d .Wrap (_gagd ,_fgge ,"");};if _gagd =_afg .RasterOperation (0,0,_bccf .Width ,_bccf .Height ,PixNotSrcAndDst ,_dcda ,0,0);_gagd !=nil {return nil ,_d .Wrap (_gagd ,_fgge ,"\u0064e\u0066\u0061\u0075\u006c\u0074");
|
|
|
|
};};return _afg ,nil ;};func (_def *Bitmap )Equivalent (s *Bitmap )bool {return _def .equivalent (s )};type SizeComparison int ;func (_ddfe *Bitmap )setEightPartlyBytes (_dfbf ,_beeb int ,_fgafe uint64 )(_efdf error ){var (_aagf byte ;_gdd int ;);const _acdg ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";
|
|
|
|
for _egcc :=1;_egcc <=_beeb ;_egcc ++{_gdd =64-_egcc *8;_aagf =byte (_fgafe >>uint (_gdd )&0xff);_g .Log .Trace ("\u0074\u0065\u006d\u0070\u003a\u0020\u0025\u0030\u0038\u0062\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a %\u0064,\u0020\u0069\u0064\u0078\u003a\u0020\u0025\u0064\u002c\u0020\u0066\u0075l\u006c\u0042\u0079\u0074\u0065\u0073\u004e\u0075\u006d\u0062\u0065\u0072\u003a\u0020\u0025\u0064\u002c \u0073\u0068\u0069\u0066\u0074\u003a\u0020\u0025\u0064",_aagf ,_dfbf ,_dfbf +_egcc -1,_beeb ,_gdd );
|
|
|
|
if _efdf =_ddfe .SetByte (_dfbf +_egcc -1,_aagf );_efdf !=nil {return _d .Wrap (_efdf ,_acdg ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_abff :=_ddfe .RowStride *8-_ddfe .Width ;if _abff ==0{return nil ;};_gdd -=8;_aagf =byte (_fgafe >>uint (_gdd )&0xff)<<uint (_abff );
|
|
|
|
if _efdf =_ddfe .SetByte (_dfbf +_beeb ,_aagf );_efdf !=nil {return _d .Wrap (_efdf ,_acdg ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};type Point struct{X ,Y float32 ;};func (_cdfba *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _dbbae ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";
|
|
|
|
if len (_cdfba .Values )==0{return nil ,_d .Error (_dbbae ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_egcf :=&BitmapsArray {};_cdfba .SortByHeight ();_egedb :=-1;_aafdc :=-1;for _cfac :=0;_cfac < len (_cdfba .Values );
|
|
|
|
_cfac ++{_bcdac :=_cdfba .Values [_cfac ].Height ;if _bcdac > _egedb {_egedb =_bcdac ;_aafdc ++;_egcf .Values =append (_egcf .Values ,&Bitmaps {});};_egcf .Values [_aafdc ].AddBitmap (_cdfba .Values [_cfac ]);};return _egcf ,nil ;};func (_daef *Bitmap )SetPadBits (value int ){_daef .setPadBits (value )};
|
|
|
|
func _bbea (_ebff ,_fbg *Bitmap ,_baf int ,_bdg []byte ,_aff int )(_gccg error ){const _cec ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_adgg ,_befb ,_dfc ,_aa ,_eae ,_cba ,_gbgf ,_fcc int ;
|
|
|
|
_bfb ,_agd uint32 ;_ca ,_dfb byte ;_cgf uint16 ;);_gbdg :=make ([]byte ,4);_bdga :=make ([]byte ,4);for _dfc =0;_dfc < _ebff .Height -1;_dfc ,_aa =_dfc +2,_aa +1{_adgg =_dfc *_ebff .RowStride ;_befb =_aa *_fbg .RowStride ;for _eae ,_cba =0,0;_eae < _aff ;
|
|
|
|
_eae ,_cba =_eae +4,_cba +1{for _gbgf =0;_gbgf < 4;_gbgf ++{_fcc =_adgg +_eae +_gbgf ;if _fcc <=len (_ebff .Data )-1&&_fcc < _adgg +_ebff .RowStride {_gbdg [_gbgf ]=_ebff .Data [_fcc ];}else {_gbdg [_gbgf ]=0x00;};_fcc =_adgg +_ebff .RowStride +_eae +_gbgf ;
|
|
|
|
if _fcc <=len (_ebff .Data )-1&&_fcc < _adgg +(2*_ebff .RowStride ){_bdga [_gbgf ]=_ebff .Data [_fcc ];}else {_bdga [_gbgf ]=0x00;};};_bfb =_fb .BigEndian .Uint32 (_gbdg );_agd =_fb .BigEndian .Uint32 (_bdga );_agd |=_bfb ;_agd |=_agd <<1;_agd &=0xaaaaaaaa;
|
|
|
|
_bfb =_agd |(_agd <<7);_ca =byte (_bfb >>24);_dfb =byte ((_bfb >>8)&0xff);_fcc =_befb +_cba ;if _fcc +1==len (_fbg .Data )-1||_fcc +1>=_befb +_fbg .RowStride {_fbg .Data [_fcc ]=_bdg [_ca ];}else {_cgf =(uint16 (_bdg [_ca ])<<8)|uint16 (_bdg [_dfb ]);if _gccg =_fbg .setTwoBytes (_fcc ,_cgf );
|
|
|
|
_gccg !=nil {return _d .Wrapf (_gccg ,_cec ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_fcc );};_cba ++;};};
|
|
|
|
};return nil ;};const (Vanilla Color =iota ;Chocolate ;);func (_dfbgd *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _dfbgd .removeBorderGeneral (left ,right ,top ,bot );};const (PixSrc RasterOperator =0xc;PixDst RasterOperator =0xa;
|
|
|
|
PixNotSrc RasterOperator =0x3;PixNotDst RasterOperator =0x5;PixClr RasterOperator =0x0;PixSet RasterOperator =0xf;PixSrcOrDst RasterOperator =0xe;PixSrcAndDst RasterOperator =0x8;PixSrcXorDst RasterOperator =0x6;PixNotSrcOrDst RasterOperator =0xb;PixNotSrcAndDst RasterOperator =0x2;
|
|
|
|
PixSrcOrNotDst RasterOperator =0xd;PixSrcAndNotDst RasterOperator =0x4;PixNotPixSrcOrDst RasterOperator =0x1;PixNotPixSrcAndDst RasterOperator =0x7;PixNotPixSrcXorDst RasterOperator =0x9;PixPaint =PixSrcOrDst ;PixSubtract =PixNotSrcAndDst ;PixMask =PixSrcAndDst ;
|
|
|
|
);func (_bgbd *ClassedPoints )SortByY (){_bgbd ._gbgff =_bgbd .ySortFunction ();_de .Sort (_bgbd )};func _cea (_aage ,_egge *Bitmap ,_efec ,_eddc int )(*Bitmap ,error ){const _cgff ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _egge ==nil {return nil ,_d .Error (_cgff ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
};if _efec < 1||_eddc < 1{return nil ,_d .Error (_cgff ,"\u0068\u0073\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069\u007a\u0065\u0020\u0061\u0072e\u0020\u006e\u006f\u0074\u0020\u0067\u0072e\u0061\u0074\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u006fr\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0031");
|
|
|
|
};if _efec ==1&&_eddc ==1{_fcccf ,_ceef :=_fcdg (_aage ,_egge );if _ceef !=nil {return nil ,_d .Wrap (_ceef ,_cgff ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
|
|
};return _fcccf ,nil ;};if _efec ==1||_eddc ==1{_faef :=SelCreateBrick (_eddc ,_efec ,_eddc /2,_efec /2,SelHit );_dcab ,_dff :=_ccff (_aage ,_egge ,_faef );if _dff !=nil {return nil ,_d .Wrap (_dff ,_cgff ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
|
|
};return _dcab ,nil ;};_bada :=SelCreateBrick (1,_efec ,0,_efec /2,SelHit );_cgdb :=SelCreateBrick (_eddc ,1,_eddc /2,0,SelHit );_daca ,_cfeg :=_ccff (nil ,_egge ,_bada );if _cfeg !=nil {return nil ,_d .Wrap (_cfeg ,_cgff ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
|
|
};_aage ,_cfeg =_ccff (_aage ,_daca ,_cgdb );if _cfeg !=nil {return nil ,_d .Wrap (_cfeg ,_cgff ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _aage ,nil ;};func _db (_bg ,_eb *Bitmap )(_eag error ){const _cg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";
|
|
|
|
_ce :=_eb .RowStride ;_bb :=_bg .RowStride ;_ebc :=_eb .RowStride *4-_bg .RowStride ;var (_daf ,_fd byte ;_eg uint32 ;_bc ,_ee ,_gc ,_cc ,_gcc ,_ead ,_cdc int ;);for _gc =0;_gc < _eb .Height ;_gc ++{_bc =_gc *_ce ;_ee =4*_gc *_bb ;for _cc =0;_cc < _ce ;
|
|
|
|
_cc ++{_daf =_eb .Data [_bc +_cc ];_eg =_defc [_daf ];_ead =_ee +_cc *4;if _ebc !=0&&(_cc +1)*4> _bg .RowStride {for _gcc =_ebc ;_gcc > 0;_gcc --{_fd =byte ((_eg >>uint (_gcc *8))&0xff);_cdc =_ead +(_ebc -_gcc );if _eag =_bg .SetByte (_cdc ,_fd );_eag !=nil {return _d .Wrapf (_eag ,_cg ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_gcc );
|
|
|
|
};};}else if _eag =_bg .setFourBytes (_ead ,_eg );_eag !=nil {return _d .Wrap (_eag ,_cg ,"");};if _eag =_bg .setFourBytes (_ee +_cc *4,_defc [_eb .Data [_bc +_cc ]]);_eag !=nil {return _d .Wrap (_eag ,_cg ,"");};};for _gcc =1;_gcc < 4;_gcc ++{for _cc =0;
|
|
|
|
_cc < _bb ;_cc ++{if _eag =_bg .SetByte (_ee +_gcc *_bb +_cc ,_bg .Data [_ee +_cc ]);_eag !=nil {return _d .Wrapf (_eag ,_cg ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0071\u0075\u0061\u0064\u0072\u0061\u0062l\u0065\u0027\u0020\u006c\u0069\u006ee\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0062\u0079\u0074\u0065\u003a \u0027\u0025\u0064\u0027",_gcc ,_cc );
|
|
|
|
};};};};return nil ;};var _ _de .Interface =&ClassedPoints {};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func (_baaf *ClassedPoints )SortByX (){_baaf ._gbgff =_baaf .xSortFunction ();_de .Sort (_baaf )};func (_fgfgc *Bitmaps )WidthSorter ()func (_agbe ,_dfec int )bool {return func (_cbed ,_egcb int )bool {return _fgfgc .Values [_cbed ].Width < _fgfgc .Values [_egcb ].Width };
|
|
|
|
};func (_ffcb Points )YSorter ()func (_fffa ,_adfec int )bool {return func (_dgabc ,_dcdae int )bool {return _ffcb [_dgabc ].Y < _ffcb [_dcdae ].Y };};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;
|
|
|
|
Text string ;XResolution ,YResolution int ;};func (_cefc *Bitmap )resizeImageData (_cdbb *Bitmap )error {if _cdbb ==nil {return _d .Error ("\u0072e\u0073i\u007a\u0065\u0049\u006d\u0061\u0067\u0065\u0044\u0061\u0074\u0061","\u0073r\u0063 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
};if _cefc .SizesEqual (_cdbb ){return nil ;};_cefc .Data =make ([]byte ,len (_cdbb .Data ));_cefc .Width =_cdbb .Width ;_cefc .Height =_cdbb .Height ;_cefc .RowStride =_cdbb .RowStride ;return nil ;};func (_gcgd *Bitmap )CountPixels ()int {return _gcgd .countPixels ()};
|
|
|
|
func TstAddSymbol (t *_dd .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_faee :=_ea .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_faee );*x +=sym .Width +space ;};func (_fccf *Bitmap )addBorderGeneral (_eaff ,_cca ,_bee ,_cfb int ,_bcg int )(*Bitmap ,error ){const _badf ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
|
|
|
|
if _eaff < 0||_cca < 0||_bee < 0||_cfb < 0{return nil ,_d .Error (_badf ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_fcbf ,_bgea :=_fccf .Width ,_fccf .Height ;_cff :=_fcbf +_eaff +_cca ;_dca :=_bgea +_bee +_cfb ;
|
|
|
|
_bcag :=New (_cff ,_dca );_bcag .Color =_fccf .Color ;_eaae :=PixClr ;if _bcg > 0{_eaae =PixSet ;};_cdgf :=_bcag .RasterOperation (0,0,_eaff ,_dca ,_eaae ,nil ,0,0);if _cdgf !=nil {return nil ,_d .Wrap (_cdgf ,_badf ,"\u006c\u0065\u0066\u0074");};_cdgf =_bcag .RasterOperation (_cff -_cca ,0,_cca ,_dca ,_eaae ,nil ,0,0);
|
|
|
|
if _cdgf !=nil {return nil ,_d .Wrap (_cdgf ,_badf ,"\u0072\u0069\u0067h\u0074");};_cdgf =_bcag .RasterOperation (0,0,_cff ,_bee ,_eaae ,nil ,0,0);if _cdgf !=nil {return nil ,_d .Wrap (_cdgf ,_badf ,"\u0074\u006f\u0070");};_cdgf =_bcag .RasterOperation (0,_dca -_cfb ,_cff ,_cfb ,_eaae ,nil ,0,0);
|
|
|
|
if _cdgf !=nil {return nil ,_d .Wrap (_cdgf ,_badf ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_cdgf =_bcag .RasterOperation (_eaff ,_bee ,_fcbf ,_bgea ,PixSrc ,_fccf ,0,0);if _cdgf !=nil {return nil ,_d .Wrap (_cdgf ,_badf ,"\u0063\u006f\u0070\u0079");
|
|
|
|
};return _bcag ,nil ;};func _bccb (_cfffc *Bitmap ,_egdb ,_gcgdc ,_fdca ,_gfaf int ,_dcff RasterOperator ,_fgec *Bitmap ,_gcfae ,_afbc int )error {var (_fcba bool ;_bbcf bool ;_adefg int ;_ffbd int ;_cccg int ;_afgd bool ;_bdacg byte ;_degbf int ;_gbaa int ;
|
|
|
|
_bdc int ;_daaf ,_egdc int ;);_dccdf :=8-(_egdb &7);_bcbc :=_efbgc [_dccdf ];_eccc :=_cfffc .RowStride *_gcgdc +(_egdb >>3);_edef :=_fgec .RowStride *_afbc +(_gcfae >>3);if _fdca < _dccdf {_fcba =true ;_bcbc &=_bcedd [8-_dccdf +_fdca ];};if !_fcba {_adefg =(_fdca -_dccdf )>>3;
|
|
|
|
if _adefg > 0{_bbcf =true ;_ffbd =_eccc +1;_cccg =_edef +1;};};_degbf =(_egdb +_fdca )&7;if !(_fcba ||_degbf ==0){_afgd =true ;_bdacg =_bcedd [_degbf ];_gbaa =_eccc +1+_adefg ;_bdc =_edef +1+_adefg ;};switch _dcff {case PixSrc :for _daaf =0;_daaf < _gfaf ;
|
|
|
|
_daaf ++{_cfffc .Data [_eccc ]=_gbgeb (_cfffc .Data [_eccc ],_fgec .Data [_edef ],_bcbc );_eccc +=_cfffc .RowStride ;_edef +=_fgec .RowStride ;};if _bbcf {for _daaf =0;_daaf < _gfaf ;_daaf ++{for _egdc =0;_egdc < _adefg ;_egdc ++{_cfffc .Data [_ffbd +_egdc ]=_fgec .Data [_cccg +_egdc ];
|
|
|
|
};_ffbd +=_cfffc .RowStride ;_cccg +=_fgec .RowStride ;};};if _afgd {for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_gbaa ]=_gbgeb (_cfffc .Data [_gbaa ],_fgec .Data [_bdc ],_bdacg );_gbaa +=_cfffc .RowStride ;_bdc +=_fgec .RowStride ;};};case PixNotSrc :for _daaf =0;
|
|
|
|
_daaf < _gfaf ;_daaf ++{_cfffc .Data [_eccc ]=_gbgeb (_cfffc .Data [_eccc ],^_fgec .Data [_edef ],_bcbc );_eccc +=_cfffc .RowStride ;_edef +=_fgec .RowStride ;};if _bbcf {for _daaf =0;_daaf < _gfaf ;_daaf ++{for _egdc =0;_egdc < _adefg ;_egdc ++{_cfffc .Data [_ffbd +_egdc ]=^_fgec .Data [_cccg +_egdc ];
|
|
|
|
};_ffbd +=_cfffc .RowStride ;_cccg +=_fgec .RowStride ;};};if _afgd {for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_gbaa ]=_gbgeb (_cfffc .Data [_gbaa ],^_fgec .Data [_bdc ],_bdacg );_gbaa +=_cfffc .RowStride ;_bdc +=_fgec .RowStride ;};};case PixSrcOrDst :for _daaf =0;
|
|
|
|
_daaf < _gfaf ;_daaf ++{_cfffc .Data [_eccc ]=_gbgeb (_cfffc .Data [_eccc ],_fgec .Data [_edef ]|_cfffc .Data [_eccc ],_bcbc );_eccc +=_cfffc .RowStride ;_edef +=_fgec .RowStride ;};if _bbcf {for _daaf =0;_daaf < _gfaf ;_daaf ++{for _egdc =0;_egdc < _adefg ;
|
|
|
|
_egdc ++{_cfffc .Data [_ffbd +_egdc ]|=_fgec .Data [_cccg +_egdc ];};_ffbd +=_cfffc .RowStride ;_cccg +=_fgec .RowStride ;};};if _afgd {for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_gbaa ]=_gbgeb (_cfffc .Data [_gbaa ],_fgec .Data [_bdc ]|_cfffc .Data [_gbaa ],_bdacg );
|
|
|
|
_gbaa +=_cfffc .RowStride ;_bdc +=_fgec .RowStride ;};};case PixSrcAndDst :for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_eccc ]=_gbgeb (_cfffc .Data [_eccc ],_fgec .Data [_edef ]&_cfffc .Data [_eccc ],_bcbc );_eccc +=_cfffc .RowStride ;_edef +=_fgec .RowStride ;
|
|
|
|
};if _bbcf {for _daaf =0;_daaf < _gfaf ;_daaf ++{for _egdc =0;_egdc < _adefg ;_egdc ++{_cfffc .Data [_ffbd +_egdc ]&=_fgec .Data [_cccg +_egdc ];};_ffbd +=_cfffc .RowStride ;_cccg +=_fgec .RowStride ;};};if _afgd {for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_gbaa ]=_gbgeb (_cfffc .Data [_gbaa ],_fgec .Data [_bdc ]&_cfffc .Data [_gbaa ],_bdacg );
|
|
|
|
_gbaa +=_cfffc .RowStride ;_bdc +=_fgec .RowStride ;};};case PixSrcXorDst :for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_eccc ]=_gbgeb (_cfffc .Data [_eccc ],_fgec .Data [_edef ]^_cfffc .Data [_eccc ],_bcbc );_eccc +=_cfffc .RowStride ;_edef +=_fgec .RowStride ;
|
|
|
|
};if _bbcf {for _daaf =0;_daaf < _gfaf ;_daaf ++{for _egdc =0;_egdc < _adefg ;_egdc ++{_cfffc .Data [_ffbd +_egdc ]^=_fgec .Data [_cccg +_egdc ];};_ffbd +=_cfffc .RowStride ;_cccg +=_fgec .RowStride ;};};if _afgd {for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_gbaa ]=_gbgeb (_cfffc .Data [_gbaa ],_fgec .Data [_bdc ]^_cfffc .Data [_gbaa ],_bdacg );
|
|
|
|
_gbaa +=_cfffc .RowStride ;_bdc +=_fgec .RowStride ;};};case PixNotSrcOrDst :for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_eccc ]=_gbgeb (_cfffc .Data [_eccc ],^(_fgec .Data [_edef ])|_cfffc .Data [_eccc ],_bcbc );_eccc +=_cfffc .RowStride ;_edef +=_fgec .RowStride ;
|
|
|
|
};if _bbcf {for _daaf =0;_daaf < _gfaf ;_daaf ++{for _egdc =0;_egdc < _adefg ;_egdc ++{_cfffc .Data [_ffbd +_egdc ]|=^(_fgec .Data [_cccg +_egdc ]);};_ffbd +=_cfffc .RowStride ;_cccg +=_fgec .RowStride ;};};if _afgd {for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_gbaa ]=_gbgeb (_cfffc .Data [_gbaa ],^(_fgec .Data [_bdc ])|_cfffc .Data [_gbaa ],_bdacg );
|
|
|
|
_gbaa +=_cfffc .RowStride ;_bdc +=_fgec .RowStride ;};};case PixNotSrcAndDst :for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_eccc ]=_gbgeb (_cfffc .Data [_eccc ],^(_fgec .Data [_edef ])&_cfffc .Data [_eccc ],_bcbc );_eccc +=_cfffc .RowStride ;_edef +=_fgec .RowStride ;
|
|
|
|
};if _bbcf {for _daaf =0;_daaf < _gfaf ;_daaf ++{for _egdc =0;_egdc < _adefg ;_egdc ++{_cfffc .Data [_ffbd +_egdc ]&=^_fgec .Data [_cccg +_egdc ];};_ffbd +=_cfffc .RowStride ;_cccg +=_fgec .RowStride ;};};if _afgd {for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_gbaa ]=_gbgeb (_cfffc .Data [_gbaa ],^(_fgec .Data [_bdc ])&_cfffc .Data [_gbaa ],_bdacg );
|
|
|
|
_gbaa +=_cfffc .RowStride ;_bdc +=_fgec .RowStride ;};};case PixSrcOrNotDst :for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_eccc ]=_gbgeb (_cfffc .Data [_eccc ],_fgec .Data [_edef ]|^(_cfffc .Data [_eccc ]),_bcbc );_eccc +=_cfffc .RowStride ;_edef +=_fgec .RowStride ;
|
|
|
|
};if _bbcf {for _daaf =0;_daaf < _gfaf ;_daaf ++{for _egdc =0;_egdc < _adefg ;_egdc ++{_cfffc .Data [_ffbd +_egdc ]=_fgec .Data [_cccg +_egdc ]|^(_cfffc .Data [_ffbd +_egdc ]);};_ffbd +=_cfffc .RowStride ;_cccg +=_fgec .RowStride ;};};if _afgd {for _daaf =0;
|
|
|
|
_daaf < _gfaf ;_daaf ++{_cfffc .Data [_gbaa ]=_gbgeb (_cfffc .Data [_gbaa ],_fgec .Data [_bdc ]|^(_cfffc .Data [_gbaa ]),_bdacg );_gbaa +=_cfffc .RowStride ;_bdc +=_fgec .RowStride ;};};case PixSrcAndNotDst :for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_eccc ]=_gbgeb (_cfffc .Data [_eccc ],_fgec .Data [_edef ]&^(_cfffc .Data [_eccc ]),_bcbc );
|
|
|
|
_eccc +=_cfffc .RowStride ;_edef +=_fgec .RowStride ;};if _bbcf {for _daaf =0;_daaf < _gfaf ;_daaf ++{for _egdc =0;_egdc < _adefg ;_egdc ++{_cfffc .Data [_ffbd +_egdc ]=_fgec .Data [_cccg +_egdc ]&^(_cfffc .Data [_ffbd +_egdc ]);};_ffbd +=_cfffc .RowStride ;
|
|
|
|
_cccg +=_fgec .RowStride ;};};if _afgd {for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_gbaa ]=_gbgeb (_cfffc .Data [_gbaa ],_fgec .Data [_bdc ]&^(_cfffc .Data [_gbaa ]),_bdacg );_gbaa +=_cfffc .RowStride ;_bdc +=_fgec .RowStride ;};};case PixNotPixSrcOrDst :for _daaf =0;
|
|
|
|
_daaf < _gfaf ;_daaf ++{_cfffc .Data [_eccc ]=_gbgeb (_cfffc .Data [_eccc ],^(_fgec .Data [_edef ]|_cfffc .Data [_eccc ]),_bcbc );_eccc +=_cfffc .RowStride ;_edef +=_fgec .RowStride ;};if _bbcf {for _daaf =0;_daaf < _gfaf ;_daaf ++{for _egdc =0;_egdc < _adefg ;
|
|
|
|
_egdc ++{_cfffc .Data [_ffbd +_egdc ]=^(_fgec .Data [_cccg +_egdc ]|_cfffc .Data [_ffbd +_egdc ]);};_ffbd +=_cfffc .RowStride ;_cccg +=_fgec .RowStride ;};};if _afgd {for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_gbaa ]=_gbgeb (_cfffc .Data [_gbaa ],^(_fgec .Data [_bdc ]|_cfffc .Data [_gbaa ]),_bdacg );
|
|
|
|
_gbaa +=_cfffc .RowStride ;_bdc +=_fgec .RowStride ;};};case PixNotPixSrcAndDst :for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_eccc ]=_gbgeb (_cfffc .Data [_eccc ],^(_fgec .Data [_edef ]&_cfffc .Data [_eccc ]),_bcbc );_eccc +=_cfffc .RowStride ;_edef +=_fgec .RowStride ;
|
|
|
|
};if _bbcf {for _daaf =0;_daaf < _gfaf ;_daaf ++{for _egdc =0;_egdc < _adefg ;_egdc ++{_cfffc .Data [_ffbd +_egdc ]=^(_fgec .Data [_cccg +_egdc ]&_cfffc .Data [_ffbd +_egdc ]);};_ffbd +=_cfffc .RowStride ;_cccg +=_fgec .RowStride ;};};if _afgd {for _daaf =0;
|
|
|
|
_daaf < _gfaf ;_daaf ++{_cfffc .Data [_gbaa ]=_gbgeb (_cfffc .Data [_gbaa ],^(_fgec .Data [_bdc ]&_cfffc .Data [_gbaa ]),_bdacg );_gbaa +=_cfffc .RowStride ;_bdc +=_fgec .RowStride ;};};case PixNotPixSrcXorDst :for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_eccc ]=_gbgeb (_cfffc .Data [_eccc ],^(_fgec .Data [_edef ]^_cfffc .Data [_eccc ]),_bcbc );
|
|
|
|
_eccc +=_cfffc .RowStride ;_edef +=_fgec .RowStride ;};if _bbcf {for _daaf =0;_daaf < _gfaf ;_daaf ++{for _egdc =0;_egdc < _adefg ;_egdc ++{_cfffc .Data [_ffbd +_egdc ]=^(_fgec .Data [_cccg +_egdc ]^_cfffc .Data [_ffbd +_egdc ]);};_ffbd +=_cfffc .RowStride ;
|
|
|
|
_cccg +=_fgec .RowStride ;};};if _afgd {for _daaf =0;_daaf < _gfaf ;_daaf ++{_cfffc .Data [_gbaa ]=_gbgeb (_cfffc .Data [_gbaa ],^(_fgec .Data [_bdc ]^_cfffc .Data [_gbaa ]),_bdacg );_gbaa +=_cfffc .RowStride ;_bdc +=_fgec .RowStride ;};};default:_g .Log .Debug ("I\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070e\u0072\u0061\u0074o\u0072:\u0020\u0025\u0064",_dcff );
|
|
|
|
return _d .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0056\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004c\u006f\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
|
|
|
|
};return nil ;};func TstASymbol (t *_dd .T )*Bitmap {t .Helper ();_ceaa :=New (6,6);_f .NoError (t ,_ceaa .SetPixel (1,0,1));_f .NoError (t ,_ceaa .SetPixel (2,0,1));_f .NoError (t ,_ceaa .SetPixel (3,0,1));_f .NoError (t ,_ceaa .SetPixel (4,0,1));_f .NoError (t ,_ceaa .SetPixel (5,1,1));
|
|
|
|
_f .NoError (t ,_ceaa .SetPixel (1,2,1));_f .NoError (t ,_ceaa .SetPixel (2,2,1));_f .NoError (t ,_ceaa .SetPixel (3,2,1));_f .NoError (t ,_ceaa .SetPixel (4,2,1));_f .NoError (t ,_ceaa .SetPixel (5,2,1));_f .NoError (t ,_ceaa .SetPixel (0,3,1));_f .NoError (t ,_ceaa .SetPixel (5,3,1));
|
|
|
|
_f .NoError (t ,_ceaa .SetPixel (0,4,1));_f .NoError (t ,_ceaa .SetPixel (5,4,1));_f .NoError (t ,_ceaa .SetPixel (1,5,1));_f .NoError (t ,_ceaa .SetPixel (2,5,1));_f .NoError (t ,_ceaa .SetPixel (3,5,1));_f .NoError (t ,_ceaa .SetPixel (4,5,1));_f .NoError (t ,_ceaa .SetPixel (5,5,1));
|
|
|
|
return _ceaa ;};func _dcf (_ccg ,_dfbg *Bitmap ,_adba int ,_bec []byte ,_bcc int )(_dcb error ){const _fccg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_gag ,_fe ,_bad ,_egc ,_ddb ,_efde ,_aac ,_gbe int ;
|
|
|
|
_dgf ,_eee ,_dea ,_bce uint32 ;_gef ,_cfe byte ;_gcg uint16 ;);_gaaa :=make ([]byte ,4);_gfd :=make ([]byte ,4);for _bad =0;_bad < _ccg .Height -1;_bad ,_egc =_bad +2,_egc +1{_gag =_bad *_ccg .RowStride ;_fe =_egc *_dfbg .RowStride ;for _ddb ,_efde =0,0;
|
|
|
|
_ddb < _bcc ;_ddb ,_efde =_ddb +4,_efde +1{for _aac =0;_aac < 4;_aac ++{_gbe =_gag +_ddb +_aac ;if _gbe <=len (_ccg .Data )-1&&_gbe < _gag +_ccg .RowStride {_gaaa [_aac ]=_ccg .Data [_gbe ];}else {_gaaa [_aac ]=0x00;};_gbe =_gag +_ccg .RowStride +_ddb +_aac ;
|
|
|
|
if _gbe <=len (_ccg .Data )-1&&_gbe < _gag +(2*_ccg .RowStride ){_gfd [_aac ]=_ccg .Data [_gbe ];}else {_gfd [_aac ]=0x00;};};_dgf =_fb .BigEndian .Uint32 (_gaaa );_eee =_fb .BigEndian .Uint32 (_gfd );_dea =_dgf &_eee ;_dea |=_dea <<1;_bce =_dgf |_eee ;
|
|
|
|
_bce &=_bce <<1;_eee =_dea &_bce ;_eee &=0xaaaaaaaa;_dgf =_eee |(_eee <<7);_gef =byte (_dgf >>24);_cfe =byte ((_dgf >>8)&0xff);_gbe =_fe +_efde ;if _gbe +1==len (_dfbg .Data )-1||_gbe +1>=_fe +_dfbg .RowStride {if _dcb =_dfbg .SetByte (_gbe ,_bec [_gef ]);
|
|
|
|
_dcb !=nil {return _d .Wrapf (_dcb ,_fccg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gbe );};}else {_gcg =(uint16 (_bec [_gef ])<<8)|uint16 (_bec [_cfe ]);if _dcb =_dfbg .setTwoBytes (_gbe ,_gcg );_dcb !=nil {return _d .Wrapf (_dcb ,_fccg ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_gbe );
|
|
|
|
};_efde ++;};};};return nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _fcdg (d ,s )};func (_babgc *BitmapsArray )AddBox (box *_ea .Rectangle ){_babgc .Boxes =append (_babgc .Boxes ,box )};func _fcf (_cdf *Bitmap ,_cb int )(*Bitmap ,error ){const _ge ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";
|
|
|
|
if _cdf ==nil {return nil ,_d .Error (_ge ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cb ==1{return _fcdg (nil ,_cdf );};if _cb !=2&&_cb !=4&&_cb !=8{return nil ,_d .Error (_ge ,"\u0066\u0061\u0063t\u006f\u0072\u0020\u006du\u0073\u0074\u0020\u0062\u0065\u0020\u0069n\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020\u0072\u0061\u006e\u0067\u0065");
|
|
|
|
};_gbd :=_cb *_cdf .Width ;_dab :=_cb *_cdf .Height ;_dc :=New (_gbd ,_dab );var _ef error ;switch _cb {case 2:_ef =_ddg (_dc ,_cdf );case 4:_ef =_db (_dc ,_cdf );case 8:_ef =_ff (_dc ,_cdf );};if _ef !=nil {return nil ,_d .Wrap (_ef ,_ge ,"");};return _dc ,nil ;
|
|
|
|
};func (_cbdd *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _dfaa (_cbdd ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _cdeg (_gbcg *Bitmap ,_bdfb ,_ccfb ,_gcgc ,_dgcd int ,_dffd RasterOperator ){if _bdfb < 0{_gcgc +=_bdfb ;
|
|
|
|
_bdfb =0;};_cgeb :=_bdfb +_gcgc -_gbcg .Width ;if _cgeb > 0{_gcgc -=_cgeb ;};if _ccfb < 0{_dgcd +=_ccfb ;_ccfb =0;};_ggef :=_ccfb +_dgcd -_gbcg .Height ;if _ggef > 0{_dgcd -=_ggef ;};if _gcgc <=0||_dgcd <=0{return ;};if (_bdfb &7)==0{_abddf (_gbcg ,_bdfb ,_ccfb ,_gcgc ,_dgcd ,_dffd );
|
|
|
|
}else {_afba (_gbcg ,_bdfb ,_ccfb ,_gcgc ,_dgcd ,_dffd );};};func (_cgae *Bitmaps )Size ()int {return len (_cgae .Values )};func (_cbb *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_bge bool ,_ggdg error ){const _fgc ="\u0042i\u0074\u006d\u0061\u0070\u002e\u0054\u0068\u0072\u0065\u0073\u0068o\u006c\u0064\u0050\u0069\u0078\u0065\u006c\u0053\u0075\u006d";
|
|
|
|
if tab8 ==nil {tab8 =_ceefb ();};_ada :=_cbb .Width >>3;_bffcb :=_cbb .Width &7;_aebe :=byte (0xff<<uint (8-_bffcb ));var (_baab ,_dcbe ,_cde ,_eaf int ;_fcac byte ;);for _baab =0;_baab < _cbb .Height ;_baab ++{_cde =_cbb .RowStride *_baab ;for _dcbe =0;
|
|
|
|
_dcbe < _ada ;_dcbe ++{_fcac ,_ggdg =_cbb .GetByte (_cde +_dcbe );if _ggdg !=nil {return false ,_d .Wrap (_ggdg ,_fgc ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_eaf +=tab8 [_fcac ];};if _bffcb !=0{_fcac ,_ggdg =_cbb .GetByte (_cde +_dcbe );
|
|
|
|
if _ggdg !=nil {return false ,_d .Wrap (_ggdg ,_fgc ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_fcac &=_aebe ;_eaf +=tab8 [_fcac ];};if _eaf > thresh {return true ,nil ;};};return _bge ,nil ;};func TstTSymbol (t *_dd .T ,scale ...int )*Bitmap {_egag ,_egad :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});
|
|
|
|
_f .NoError (t ,_egad );return TstGetScaledSymbol (t ,_egag ,scale ...);};func TstFrameBitmap ()*Bitmap {return _abeb .Copy ()};func _afba (_aafd *Bitmap ,_fbfg ,_eeeg int ,_aeabc ,_cfab int ,_ffcg RasterOperator ){var (_gccf bool ;_aced bool ;_fffcb int ;
|
|
|
|
_bdce int ;_dfeg int ;_dgfa int ;_gcgcd bool ;_cegd byte ;);_ccbgd :=8-(_fbfg &7);_aaccd :=_efbgc [_ccbgd ];_dbgf :=_aafd .RowStride *_eeeg +(_fbfg >>3);if _aeabc < _ccbgd {_gccf =true ;_aaccd &=_bcedd [8-_ccbgd +_aeabc ];};if !_gccf {_fffcb =(_aeabc -_ccbgd )>>3;
|
|
|
|
if _fffcb !=0{_aced =true ;_bdce =_dbgf +1;};};_dfeg =(_fbfg +_aeabc )&7;if !(_gccf ||_dfeg ==0){_gcgcd =true ;_cegd =_bcedd [_dfeg ];_dgfa =_dbgf +1+_fffcb ;};var _gace ,_aade int ;switch _ffcg {case PixClr :for _gace =0;_gace < _cfab ;_gace ++{_aafd .Data [_dbgf ]=_gbgeb (_aafd .Data [_dbgf ],0x0,_aaccd );
|
|
|
|
_dbgf +=_aafd .RowStride ;};if _aced {for _gace =0;_gace < _cfab ;_gace ++{for _aade =0;_aade < _fffcb ;_aade ++{_aafd .Data [_bdce +_aade ]=0x0;};_bdce +=_aafd .RowStride ;};};if _gcgcd {for _gace =0;_gace < _cfab ;_gace ++{_aafd .Data [_dgfa ]=_gbgeb (_aafd .Data [_dgfa ],0x0,_cegd );
|
|
|
|
_dgfa +=_aafd .RowStride ;};};case PixSet :for _gace =0;_gace < _cfab ;_gace ++{_aafd .Data [_dbgf ]=_gbgeb (_aafd .Data [_dbgf ],0xff,_aaccd );_dbgf +=_aafd .RowStride ;};if _aced {for _gace =0;_gace < _cfab ;_gace ++{for _aade =0;_aade < _fffcb ;_aade ++{_aafd .Data [_bdce +_aade ]=0xff;
|
|
|
|
};_bdce +=_aafd .RowStride ;};};if _gcgcd {for _gace =0;_gace < _cfab ;_gace ++{_aafd .Data [_dgfa ]=_gbgeb (_aafd .Data [_dgfa ],0xff,_cegd );_dgfa +=_aafd .RowStride ;};};case PixNotDst :for _gace =0;_gace < _cfab ;_gace ++{_aafd .Data [_dbgf ]=_gbgeb (_aafd .Data [_dbgf ],^_aafd .Data [_dbgf ],_aaccd );
|
|
|
|
_dbgf +=_aafd .RowStride ;};if _aced {for _gace =0;_gace < _cfab ;_gace ++{for _aade =0;_aade < _fffcb ;_aade ++{_aafd .Data [_bdce +_aade ]=^(_aafd .Data [_bdce +_aade ]);};_bdce +=_aafd .RowStride ;};};if _gcgcd {for _gace =0;_gace < _cfab ;_gace ++{_aafd .Data [_dgfa ]=_gbgeb (_aafd .Data [_dgfa ],^_aafd .Data [_dgfa ],_cegd );
|
|
|
|
_dgfa +=_aafd .RowStride ;};};};};func TstCSymbol (t *_dd .T )*Bitmap {t .Helper ();_aeaf :=New (6,6);_f .NoError (t ,_aeaf .SetPixel (1,0,1));_f .NoError (t ,_aeaf .SetPixel (2,0,1));_f .NoError (t ,_aeaf .SetPixel (3,0,1));_f .NoError (t ,_aeaf .SetPixel (4,0,1));
|
|
|
|
_f .NoError (t ,_aeaf .SetPixel (0,1,1));_f .NoError (t ,_aeaf .SetPixel (5,1,1));_f .NoError (t ,_aeaf .SetPixel (0,2,1));_f .NoError (t ,_aeaf .SetPixel (0,3,1));_f .NoError (t ,_aeaf .SetPixel (0,4,1));_f .NoError (t ,_aeaf .SetPixel (5,4,1));_f .NoError (t ,_aeaf .SetPixel (1,5,1));
|
|
|
|
_f .NoError (t ,_aeaf .SetPixel (2,5,1));_f .NoError (t ,_aeaf .SetPixel (3,5,1));_f .NoError (t ,_aeaf .SetPixel (4,5,1));return _aeaf ;};type Points []Point ;type fillSegment struct{_gfade int ;_afag int ;_fffcbb int ;_aaef int ;};func _gbeg (_bbbg *Bitmap ,_afdc *Bitmap ,_dcbdf *Selection )(*Bitmap ,error ){var (_badc *Bitmap ;
|
|
|
|
_abffb error ;);_bbbg ,_abffb =_fdcg (_bbbg ,_afdc ,_dcbdf ,&_badc );if _abffb !=nil {return nil ,_abffb ;};if _abffb =_bbbg .clearAll ();_abffb !=nil {return nil ,_abffb ;};var _afeb SelectionValue ;for _cgee :=0;_cgee < _dcbdf .Height ;_cgee ++{for _dfaf :=0;
|
|
|
|
_dfaf < _dcbdf .Width ;_dfaf ++{_afeb =_dcbdf .Data [_cgee ][_dfaf ];if _afeb ==SelHit {if _abffb =_bbbg .RasterOperation (_dfaf -_dcbdf .Cx ,_cgee -_dcbdf .Cy ,_afdc .Width ,_afdc .Height ,PixSrcOrDst ,_badc ,0,0);_abffb !=nil {return nil ,_abffb ;};};
|
|
|
|
};};return _bbbg ,nil ;};func _ecc (_gbb ,_gafa int )int {if _gbb < _gafa {return _gbb ;};return _gafa ;};func (_fafde *byWidth )Swap (i ,j int ){_fafde .Values [i ],_fafde .Values [j ]=_fafde .Values [j ],_fafde .Values [i ];if _fafde .Boxes !=nil {_fafde .Boxes [i ],_fafde .Boxes [j ]=_fafde .Boxes [j ],_fafde .Boxes [i ];
|
|
|
|
};};func (_dfac *ClassedPoints )ySortFunction ()func (_deca int ,_gaef int )bool {return func (_caaf ,_ceaf int )bool {return _dfac .YAtIndex (_caaf )< _dfac .YAtIndex (_ceaf )};};func _ff (_gda ,_gb *Bitmap )(_af error ){const _ag ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";
|
|
|
|
_fgf :=_gb .RowStride ;_fc :=_gda .RowStride ;var _ab ,_ga ,_egb ,_aef ,_egbe int ;for _egb =0;_egb < _gb .Height ;_egb ++{_ab =_egb *_fgf ;_ga =8*_egb *_fc ;for _aef =0;_aef < _fgf ;_aef ++{if _af =_gda .setEightBytes (_ga +_aef *8,_ffcd [_gb .Data [_ab +_aef ]]);
|
|
|
|
_af !=nil {return _d .Wrap (_af ,_ag ,"");};};for _egbe =1;_egbe < 8;_egbe ++{for _aef =0;_aef < _fc ;_aef ++{if _af =_gda .SetByte (_ga +_egbe *_fc +_aef ,_gda .Data [_ga +_aef ]);_af !=nil {return _d .Wrap (_af ,_ag ,"");};};};};return nil ;};func _ebg (_aea ,_cac *Bitmap ,_cga int ,_efd []byte ,_gf int )(_dfg error ){const _ccb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";
|
|
|
|
var (_ggf ,_ded ,_fbf ,_acd ,_gdb ,_aae ,_eba ,_aag int ;_aeb ,_ccbc ,_dba ,_bdd uint32 ;_adf ,_caf byte ;_dbf uint16 ;);_eadf :=make ([]byte ,4);_eec :=make ([]byte ,4);for _fbf =0;_fbf < _aea .Height -1;_fbf ,_acd =_fbf +2,_acd +1{_ggf =_fbf *_aea .RowStride ;
|
|
|
|
_ded =_acd *_cac .RowStride ;for _gdb ,_aae =0,0;_gdb < _gf ;_gdb ,_aae =_gdb +4,_aae +1{for _eba =0;_eba < 4;_eba ++{_aag =_ggf +_gdb +_eba ;if _aag <=len (_aea .Data )-1&&_aag < _ggf +_aea .RowStride {_eadf [_eba ]=_aea .Data [_aag ];}else {_eadf [_eba ]=0x00;
|
|
|
|
};_aag =_ggf +_aea .RowStride +_gdb +_eba ;if _aag <=len (_aea .Data )-1&&_aag < _ggf +(2*_aea .RowStride ){_eec [_eba ]=_aea .Data [_aag ];}else {_eec [_eba ]=0x00;};};_aeb =_fb .BigEndian .Uint32 (_eadf );_ccbc =_fb .BigEndian .Uint32 (_eec );_dba =_aeb &_ccbc ;
|
|
|
|
_dba |=_dba <<1;_bdd =_aeb |_ccbc ;_bdd &=_bdd <<1;_ccbc =_dba |_bdd ;_ccbc &=0xaaaaaaaa;_aeb =_ccbc |(_ccbc <<7);_adf =byte (_aeb >>24);_caf =byte ((_aeb >>8)&0xff);_aag =_ded +_aae ;if _aag +1==len (_cac .Data )-1||_aag +1>=_ded +_cac .RowStride {if _dfg =_cac .SetByte (_aag ,_efd [_adf ]);
|
|
|
|
_dfg !=nil {return _d .Wrapf (_dfg ,_ccb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_aag );};}else {_dbf =(uint16 (_efd [_adf ])<<8)|uint16 (_efd [_caf ]);if _dfg =_cac .setTwoBytes (_aag ,_dbf );_dfg !=nil {return _d .Wrapf (_dfg ,_ccb ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_aag );
|
|
|
|
};_aae ++;};};};return nil ;};func _ccfa (_bfba ,_fcgd *Bitmap ,_daeb *Selection )(*Bitmap ,error ){const _bffb ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _cfdc error ;if _bfba ,_cfdc =_cfdg (_bfba ,_fcgd ,_daeb );_cfdc !=nil {return nil ,_cfdc ;
|
|
|
|
};_bda ,_cfdc :=_gbeg (nil ,_fcgd ,_daeb );if _cfdc !=nil {return nil ,_d .Wrap (_cfdc ,_bffb ,"");};if _ ,_cfdc =_ccff (_bfba ,_bda ,_daeb );_cfdc !=nil {return nil ,_d .Wrap (_cfdc ,_bffb ,"");};return _bfba ,nil ;};func (_gbf *Bitmap )SetByte (index int ,v byte )error {if index > len (_gbf .Data )-1||index < 0{return _d .Errorf ("\u0053e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",index );
|
|
|
|
};_gbf .Data [index ]=v ;return nil ;};func (_ebb *Bitmap )Zero ()bool {_beg :=_ebb .Width /8;_ggff :=_ebb .Width &7;var _fcb byte ;if _ggff !=0{_fcb =byte (0xff<<uint (8-_ggff ));};var _abaa ,_bddb ,_ffb int ;for _bddb =0;_bddb < _ebb .Height ;_bddb ++{_abaa =_ebb .RowStride *_bddb ;
|
|
|
|
for _ffb =0;_ffb < _beg ;_ffb ,_abaa =_ffb +1,_abaa +1{if _ebb .Data [_abaa ]!=0{return false ;};};if _ggff > 0{if _ebb .Data [_abaa ]&_fcb !=0{return false ;};};};return true ;};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;
|
|
|
|
};func (_dcbf *ClassedPoints )validateIntSlice ()error {const _debd ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_daffb :=range _dcbf .IntSlice {if _daffb >=(_dcbf .Points .Size ()){return _d .Errorf (_debd ,"c\u006c\u0061\u0073\u0073\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0061\u0020\u0076\u0061\u006ci\u0064 \u0069\u006e\u0064\u0065x\u0020\u0069n\u0020\u0074\u0068\u0065\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u003a\u0020\u0025\u0064",_daffb ,_dcbf .Points .Size ());
|
|
|
|
};};return nil ;};var _bcca =[5]int {1,2,3,0,4};func _dfbe (_ecbbb ,_fdfg *Bitmap ,_aggbb ,_dbef int )(_fcaa error ){const _aedbg ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_accag ,_cdcf ,_gedeb ,_dfcfe int ;
|
|
|
|
_bbeac ,_cgcbg ,_gfcdc ,_gcccg ,_geaa ,_ccae ,_cfdd ,_bbgf byte ;);for _accag =0;_accag < _aggbb ;_accag ++{_gedeb =_accag *_ecbbb .RowStride ;_dfcfe =_accag *_fdfg .RowStride ;for _cdcf =0;_cdcf < _dbef ;_cdcf ++{if _bbeac ,_fcaa =_ecbbb .GetByte (_gedeb +_cdcf );
|
|
|
|
_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _cgcbg ,_fcaa =_fdfg .GetByte (_dfcfe +_cdcf );_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");
|
|
|
|
};if _accag > 0{if _gfcdc ,_fcaa =_ecbbb .GetByte (_gedeb -_ecbbb .RowStride +_cdcf );_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_bbeac |=_gfcdc |(_gfcdc <<1)|(_gfcdc >>1);if _cdcf > 0{if _bbgf ,_fcaa =_ecbbb .GetByte (_gedeb -_ecbbb .RowStride +_cdcf -1);
|
|
|
|
_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_bbeac |=_bbgf <<7;};if _cdcf < _dbef -1{if _bbgf ,_fcaa =_ecbbb .GetByte (_gedeb -_ecbbb .RowStride +_cdcf +1);
|
|
|
|
_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_bbeac |=_bbgf >>7;};};if _cdcf > 0{if _gcccg ,_fcaa =_ecbbb .GetByte (_gedeb +_cdcf -1);_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u006a\u0020\u003e \u0030");
|
|
|
|
};_bbeac |=_gcccg <<7;};_bbeac &=_cgcbg ;if _bbeac ==0||^_bbeac ==0{if _fcaa =_ecbbb .SetByte (_gedeb +_cdcf ,_bbeac );_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");
|
|
|
|
};};for {_cfdd =_bbeac ;_bbeac =(_bbeac |(_bbeac >>1)|(_bbeac <<1))&_cgcbg ;if (_bbeac ^_cfdd )==0{if _fcaa =_ecbbb .SetByte (_gedeb +_cdcf ,_bbeac );_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
|
|
|
|
};break ;};};};};for _accag =_aggbb -1;_accag >=0;_accag --{_gedeb =_accag *_ecbbb .RowStride ;_dfcfe =_accag *_fdfg .RowStride ;for _cdcf =_dbef -1;_cdcf >=0;_cdcf --{if _bbeac ,_fcaa =_ecbbb .GetByte (_gedeb +_cdcf );_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
|
|
|
|
};if _cgcbg ,_fcaa =_fdfg .GetByte (_dfcfe +_cdcf );_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _accag < _aggbb -1{if _geaa ,_fcaa =_ecbbb .GetByte (_gedeb +_ecbbb .RowStride +_cdcf );
|
|
|
|
_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_bbeac |=_geaa |(_geaa <<1)|_geaa >>1;if _cdcf > 0{if _bbgf ,_fcaa =_ecbbb .GetByte (_gedeb +_ecbbb .RowStride +_cdcf -1);
|
|
|
|
_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u0069\u0020\u003c h\u002d\u0031\u0020\u0026\u0020\u006a\u0020\u003e\u00200\u0020-\u003e \u0067e\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};_bbeac |=_bbgf <<7;};if _cdcf < _dbef -1{if _bbgf ,_fcaa =_ecbbb .GetByte (_gedeb +_ecbbb .RowStride +_cdcf +1);
|
|
|
|
_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u0069\u0020\u003c\u0020\u0068\u002d\u0031\u0020\u0026\u0026\u0020\u006a\u0020\u003c\u0077\u0070\u006c\u002d\u0031\u0020\u002d\u003e\u0020\u0067e\u0074\u0020\u0073\u006f\u0075r\u0063\u0065 \u0062\u0079\u0074\u0065");
|
|
|
|
};_bbeac |=_bbgf >>7;};};if _cdcf < _dbef -1{if _ccae ,_fcaa =_ecbbb .GetByte (_gedeb +_cdcf +1);_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u006a\u0020<\u0020\u0077\u0070\u006c\u0020\u002d\u0031\u0020\u002d\u003e\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020by\u0074\u0065");
|
|
|
|
};_bbeac |=_ccae >>7;};_bbeac &=_cgcbg ;if _bbeac ==0||(^_bbeac )==0{if _fcaa =_ecbbb .SetByte (_gedeb +_cdcf ,_bbeac );_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};
|
|
|
|
for {_cfdd =_bbeac ;_bbeac =(_bbeac |(_bbeac >>1)|(_bbeac <<1))&_cgcbg ;if (_bbeac ^_cfdd )==0{if _fcaa =_ecbbb .SetByte (_gedeb +_cdcf ,_bbeac );_fcaa !=nil {return _d .Wrap (_fcaa ,_aedbg ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
|
|
|
|
};break ;};};};};return nil ;};func TstFrameBitmapData ()[]byte {return _abeb .Data };func _gegb (_eefb ,_eggc *Bitmap ,_cbbf ,_egeb ,_adef uint ,_abbg ,_fgfc int ,_agge bool ,_fgfb ,_bfad int )error {for _aacb :=_abbg ;_aacb < _fgfc ;_aacb ++{if _fgfb +1< len (_eefb .Data ){_dfdb :=_aacb +1==_fgfc ;
|
|
|
|
_dbge ,_eaba :=_eefb .GetByte (_fgfb );if _eaba !=nil {return _eaba ;};_fgfb ++;_dbge <<=_cbbf ;_adad ,_eaba :=_eefb .GetByte (_fgfb );if _eaba !=nil {return _eaba ;};_adad >>=_egeb ;_ccda :=_dbge |_adad ;if _dfdb &&!_agge {_ccda =_age (_adef ,_ccda );
|
|
|
|
};_eaba =_eggc .SetByte (_bfad ,_ccda );if _eaba !=nil {return _eaba ;};_bfad ++;if _dfdb &&_agge {_fcaf ,_bbac :=_eefb .GetByte (_fgfb );if _bbac !=nil {return _bbac ;};_fcaf <<=_cbbf ;_ccda =_age (_adef ,_fcaf );if _bbac =_eggc .SetByte (_bfad ,_ccda );
|
|
|
|
_bbac !=nil {return _bbac ;};};continue ;};_fcgf ,_ecf :=_eefb .GetByte (_fgfb );if _ecf !=nil {_g .Log .Debug ("G\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0068\u0065\u0020\u0076\u0061l\u0075\u0065\u0020\u0061\u0074\u003a\u0020%\u0064\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020%\u0073",_fgfb ,_ecf );
|
|
|
|
return _ecf ;};_fcgf <<=_cbbf ;_fgfb ++;_ecf =_eggc .SetByte (_bfad ,_fcgf );if _ecf !=nil {return _ecf ;};_bfad ++;};return nil ;};func (_badb *byHeight )Len ()int {return len (_badb .Values )};func _gbea (_eedc *Bitmap ,_cgbc *Bitmap ,_bffaa int )(_egaf error ){const _babe ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";
|
|
|
|
_abcg :=_ecc (_eedc .Height ,_cgbc .Height );_cddfa :=_ecc (_eedc .RowStride ,_cgbc .RowStride );switch _bffaa {case 4:_egaf =_ecg (_eedc ,_cgbc ,_abcg ,_cddfa );case 8:_egaf =_dfbe (_eedc ,_cgbc ,_abcg ,_cddfa );default:return _d .Errorf (_babe ,"\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0034\u0020\u006fr\u0020\u0038\u0020\u002d\u0020i\u0073\u003a \u0027\u0025\u0064\u0027",_bffaa );
|
|
|
|
};if _egaf !=nil {return _d .Wrap (_egaf ,_babe ,"");};return nil ;};func _ffc (_begad *Bitmap )(_dfbc *Bitmap ,_fdgbc int ,_fegab error ){const _fffc ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
|
|
|
|
if _begad ==nil {return nil ,0,_d .Errorf (_fffc ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _dccd ,_bbbe *Bitmap ;if _dccd ,_fegab =_fcdg (nil ,_begad );_fegab !=nil {return nil ,0,_d .Wrap (_fegab ,_fffc ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
|
|
|
|
};var (_fdfe [13]int ;_fcccd ,_gbdb int ;);_bgd :=12;_fcbb :=_be .NewNumSlice (_bgd +1);_ebcc :=_be .NewNumSlice (_bgd +1);var _cabf *Boxes ;for _effb :=0;_effb <=_bgd ;_effb ++{if _effb ==0{if _bbbe ,_fegab =_fcdg (nil ,_dccd );_fegab !=nil {return nil ,0,_d .Wrap (_fegab ,_fffc ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
|
|
|
|
};}else {if _bbbe ,_fegab =_gabc (_dccd ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_fegab !=nil {return nil ,0,_d .Wrap (_fegab ,_fffc ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _cabf ,_fegab =_bbbe .connComponentsBB (4);
|
|
|
|
_fegab !=nil {return nil ,0,_d .Wrap (_fegab ,_fffc ,"");};_fdfe [_effb ]=len (*_cabf );_fcbb .AddInt (_fdfe [_effb ]);switch _effb {case 0:_fcccd =_fdfe [0];default:_gbdb =_fdfe [_effb -1]-_fdfe [_effb ];_ebcc .AddInt (_gbdb );};_dccd =_bbbe ;};_aecg :=true ;
|
|
|
|
_egd :=2;var _bcae ,_gdfa int ;for _degbc :=1;_degbc < len (*_ebcc );_degbc ++{if _bcae ,_fegab =_fcbb .GetInt (_degbc );_fegab !=nil {return nil ,0,_d .Wrap (_fegab ,_fffc ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
|
|
|
|
};if _aecg &&_bcae < int (0.3*float32 (_fcccd )){_egd =_degbc +1;_aecg =false ;};if _gbdb ,_fegab =_ebcc .GetInt (_degbc );_fegab !=nil {return nil ,0,_d .Wrap (_fegab ,_fffc ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
|
|
|
|
};if _gbdb > _gdfa {_gdfa =_gbdb ;};};_fdbd :=_begad .XResolution ;if _fdbd ==0{_fdbd =150;};if _fdbd > 110{_egd ++;};if _egd < 2{_g .Log .Trace ("J\u0042\u0049\u0047\u0032\u0020\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0069\u0042\u0065\u0073\u0074 \u0074\u006f\u0020\u006d\u0069\u006e\u0069\u006d\u0075\u006d a\u006c\u006c\u006fw\u0061b\u006c\u0065");
|
|
|
|
_egd =2;};_fdgbc =_egd +1;if _dfbc ,_fegab =_degf (nil ,_begad ,_egd +1,1);_fegab !=nil {return nil ,0,_d .Wrap (_fegab ,_fffc ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _dfbc ,_fdgbc ,nil ;
|
|
|
|
};func _ecfd (_dfcd ...MorphProcess )(_baad error ){const _dfdg ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _cbdf ,_bebdd int ;for _eedac ,_cfcf :=range _dfcd {if _baad =_cfcf .verify (_eedac ,&_cbdf ,&_bebdd );
|
|
|
|
_baad !=nil {return _d .Wrap (_baad ,_dfdg ,"");};};if _bebdd !=0&&_cbdf !=0{return _d .Error (_dfdg ,"\u004d\u006f\u0072\u0070\u0068\u0020\u0073\u0065\u0071\u0075\u0065n\u0063\u0065\u0020\u002d\u0020\u0062\u006f\u0072d\u0065r\u0020\u0061\u0064\u0064\u0065\u0064\u0020\u0062\u0075\u0074\u0020\u006e\u0065\u0074\u0020\u0072\u0065\u0064u\u0063\u0074\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020\u0030");
|
|
|
|
};return nil ;};var MorphBC BoundaryCondition ;func TstESymbol (t *_dd .T ,scale ...int )*Bitmap {_fdagf ,_ceceb :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_f .NoError (t ,_ceceb );return TstGetScaledSymbol (t ,_fdagf ,scale ...);};func _fcdg (_gfba ,_gde *Bitmap )(*Bitmap ,error ){if _gde ==nil {return nil ,_d .Error ("\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
};if _gde ==_gfba {return _gfba ,nil ;};if _gfba ==nil {_gfba =_gde .createTemplate ();copy (_gfba .Data ,_gde .Data );return _gfba ,nil ;};_afe :=_gfba .resizeImageData (_gde );if _afe !=nil {return nil ,_d .Wrap (_afe ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
|
|
|
|
};_gfba .Text =_gde .Text ;copy (_gfba .Data ,_gde .Data );return _gfba ,nil ;};func _age (_gfad uint ,_fcag byte )byte {return _fcag >>_gfad <<_gfad };type Boxes []*_ea .Rectangle ;func _cdfc (_agb *Bitmap ,_ggd ,_fgd int )(*Bitmap ,error ){const _df ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";
|
|
|
|
if _agb ==nil {return nil ,_d .Error (_df ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _ggd <=0||_fgd <=0{return nil ,_d .Error (_df ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0073\u0063\u0061l\u0065\u0020\u0066\u0061\u0063\u0074\u006f\u0072\u003a\u0020<\u003d\u0020\u0030");
|
|
|
|
};if _ggd ==_fgd {if _ggd ==1{_ec ,_gaa :=_fcdg (nil ,_agb );if _gaa !=nil {return nil ,_d .Wrap (_gaa ,_df ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _ec ,nil ;};if _ggd ==2||_ggd ==4||_ggd ==8{_cbe ,_dg :=_fcf (_agb ,_ggd );
|
|
|
|
if _dg !=nil {return nil ,_d .Wrap (_dg ,_df ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _cbe ,nil ;};};_fgg :=_ggd *_agb .Width ;_bfd :=_fgd *_agb .Height ;_abf :=New (_fgg ,_bfd );_gbg :=_abf .RowStride ;
|
|
|
|
var (_ad ,_adb ,_dbc ,_gge ,_dae int ;_dde byte ;_ced error ;);for _adb =0;_adb < _agb .Height ;_adb ++{_ad =_fgd *_adb *_gbg ;for _dbc =0;_dbc < _agb .Width ;_dbc ++{if _bef :=_agb .GetPixel (_dbc ,_adb );_bef {_dae =_ggd *_dbc ;for _gge =0;_gge < _ggd ;
|
|
|
|
_gge ++{_abf .setBit (_ad *8+_dae +_gge );};};};for _gge =1;_gge < _fgd ;_gge ++{_fggd :=_ad +_gge *_gbg ;for _aba :=0;_aba < _gbg ;_aba ++{if _dde ,_ced =_abf .GetByte (_ad +_aba );_ced !=nil {return nil ,_d .Wrapf (_ced ,_df ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_gge );
|
|
|
|
};if _ced =_abf .SetByte (_fggd +_aba ,_dde );_ced !=nil {return nil ,_d .Wrap (_ced ,_df ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _abf ,nil ;};func _efg (_daga ,_acdaa *Bitmap ,_fcga *Selection )(*Bitmap ,error ){const _fgfg ="\u006f\u0070\u0065\u006e";
|
|
|
|
var _ccebf error ;_daga ,_ccebf =_cfdg (_daga ,_acdaa ,_fcga );if _ccebf !=nil {return nil ,_d .Wrap (_ccebf ,_fgfg ,"");};_bfdf ,_ccebf :=_ccff (nil ,_acdaa ,_fcga );if _ccebf !=nil {return nil ,_d .Wrap (_ccebf ,_fgfg ,"");};_ ,_ccebf =_gbeg (_daga ,_bfdf ,_fcga );
|
|
|
|
if _ccebf !=nil {return nil ,_d .Wrap (_ccebf ,_fgfg ,"");};return _daga ,nil ;};func (_efc *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _fcbdd ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";
|
|
|
|
if _dgff :=_efc .validateIntSlice ();_dgff !=nil {return nil ,_d .Wrap (_dgff ,_fcbdd ,"");};if _efc .IntSlice .Size ()==0{return nil ,_d .Error (_fcbdd ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");
|
|
|
|
};_efc .SortByY ();var (_dccb []*ClassedPoints ;_bdgd int ;);_gaad :=-1;var _agaf *ClassedPoints ;for _aeff :=0;_aeff < len (_efc .IntSlice );_aeff ++{_bdgd =int (_efc .YAtIndex (_aeff ));if _bdgd !=_gaad {_agaf =&ClassedPoints {Points :_efc .Points };
|
|
|
|
_gaad =_bdgd ;_dccb =append (_dccb ,_agaf );};_agaf .IntSlice =append (_agaf .IntSlice ,_efc .IntSlice [_aeff ]);};for _ ,_cbc :=range _dccb {_cbc .SortByX ();};return _dccb ,nil ;};func _ceefb ()[]int {_agcc :=make ([]int ,256);for _abega :=0;_abega <=0xff;
|
|
|
|
_abega ++{_eacb :=byte (_abega );_agcc [_eacb ]=int (_eacb &0x1)+(int (_eacb >>1)&0x1)+(int (_eacb >>2)&0x1)+(int (_eacb >>3)&0x1)+(int (_eacb >>4)&0x1)+(int (_eacb >>5)&0x1)+(int (_eacb >>6)&0x1)+(int (_eacb >>7)&0x1);};return _agcc ;};func _agec (_fdag ,_bbae ,_aebeg *Bitmap ,_eddb int )(*Bitmap ,error ){const _eefd ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";
|
|
|
|
if _bbae ==nil {return nil ,_d .Error (_eefd ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _aebeg ==nil {return nil ,_d .Error (_eefd ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
|
|
|
|
};if _eddb !=4&&_eddb !=8{return nil ,_d .Error (_eefd ,"\u0063\u006f\u006en\u0065\u0063\u0074\u0069v\u0069\u0074\u0079\u0020\u006e\u006f\u0074 \u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0034\u002c\u0038\u007d");};var _cbeea error ;_fdag ,_cbeea =_fcdg (_fdag ,_bbae );
|
|
|
|
if _cbeea !=nil {return nil ,_d .Wrap (_cbeea ,_eefd ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_ecbb :=_bbae .createTemplate ();_aebeg .setPadBits (0);for _dafca :=0;_dafca < _gdef ;_dafca ++{_ecbb ,_cbeea =_fcdg (_ecbb ,_fdag );
|
|
|
|
if _cbeea !=nil {return nil ,_d .Wrapf (_cbeea ,_eefd ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_dafca );};if _cbeea =_gbea (_fdag ,_aebeg ,_eddb );_cbeea !=nil {return nil ,_d .Wrapf (_cbeea ,_eefd ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_dafca );
|
|
|
|
};if _ecbb .Equals (_fdag ){break ;};};return _fdag ,nil ;};var (_abeb *Bitmap ;_gbfac *Bitmap ;);func _gafg (_bfeb ,_dagc int ,_bggf string )*Selection {_edbcb :=&Selection {Height :_bfeb ,Width :_dagc ,Name :_bggf };_edbcb .Data =make ([][]SelectionValue ,_bfeb );
|
|
|
|
for _gbege :=0;_gbege < _bfeb ;_gbege ++{_edbcb .Data [_gbege ]=make ([]SelectionValue ,_dagc );};return _edbcb ;};func ClipBoxToRectangle (box *_ea .Rectangle ,wi ,hi int )(_dcc *_ea .Rectangle ,_dgge error ){const _aeac ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";
|
|
|
|
if box ==nil {return nil ,_d .Error (_aeac ,"\u0027\u0062\u006f\u0078\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if box .Min .X >=wi ||box .Min .Y >=hi ||box .Max .X <=0||box .Max .Y <=0{return nil ,_d .Error (_aeac ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");
|
|
|
|
};_acda :=*box ;_dcc =&_acda ;if _dcc .Min .X < 0{_dcc .Max .X +=_dcc .Min .X ;_dcc .Min .X =0;};if _dcc .Min .Y < 0{_dcc .Max .Y +=_dcc .Min .Y ;_dcc .Min .Y =0;};if _dcc .Max .X > wi {_dcc .Max .X =wi ;};if _dcc .Max .Y > hi {_dcc .Max .Y =hi ;};return _dcc ,nil ;
|
|
|
|
};func (_edbcf *Bitmaps )String ()string {_adcb :=_c .Builder {};for _ ,_bcagg :=range _edbcf .Values {_adcb .WriteString (_bcagg .String ());_adcb .WriteRune ('\n');};return _adcb .String ();};func (_edecg Points )GetIntX (i int )(int ,error ){if i >=len (_edecg ){return 0,_d .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0058","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
|
|
};return int (_edecg [i ].X ),nil ;};func (_cafd *Bitmap )countPixels ()int {var (_ede int ;_eaag uint8 ;_fff byte ;_egga int ;);_ffba :=_cafd .RowStride ;_accg :=uint (_cafd .Width &0x07);if _accg !=0{_eaag =uint8 ((0xff<<(8-_accg ))&0xff);_ffba --;};
|
|
|
|
for _gff :=0;_gff < _cafd .Height ;_gff ++{for _egga =0;_egga < _ffba ;_egga ++{_fff =_cafd .Data [_gff *_cafd .RowStride +_egga ];_ede +=int (_egbb [_fff ]);};if _accg !=0{_ede +=int (_egbb [_cafd .Data [_gff *_cafd .RowStride +_egga ]&_eaag ]);};};return _ede ;
|
|
|
|
};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_dgce :=_gafg (h ,w ,"");_dgce .setOrigin (cy ,cx );var _cdag ,_ebed int ;for _cdag =0;_cdag < h ;_cdag ++{for _ebed =0;_ebed < w ;_ebed ++{_dgce .Data [_cdag ][_ebed ]=tp ;};};
|
|
|
|
return _dgce ;};func (_cbgfb *byWidth )Len ()int {return len (_cbgfb .Values )};func (_edda *Bitmap )connComponentsBitmapsBB (_ecdec *Bitmaps ,_egbge int )(_gab *Boxes ,_ddgd error ){const _eabbb ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";
|
|
|
|
if _egbge !=4&&_egbge !=8{return nil ,_d .Error (_eabbb ,"\u0063\u006f\u006e\u006e\u0065\u0063t\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u0061\u0020\u0027\u0034\u0027\u0020\u006fr\u0020\u0027\u0038\u0027");};if _ecdec ==nil {return nil ,_d .Error (_eabbb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
|
|
|
|
};if len (_ecdec .Values )> 0{return nil ,_d .Error (_eabbb ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u006fn\u002d\u0065\u006d\u0070\u0074\u0079\u0020\u0042\u0069\u0074m\u0061\u0070\u0073");};if _edda .Zero (){return &Boxes {},nil ;
|
|
|
|
};var (_edgg ,_fgcd ,_cfec ,_afda *Bitmap ;);_edda .setPadBits (0);if _edgg ,_ddgd =_fcdg (nil ,_edda );_ddgd !=nil {return nil ,_d .Wrap (_ddgd ,_eabbb ,"\u0062\u006d\u0031");};if _fgcd ,_ddgd =_fcdg (nil ,_edda );_ddgd !=nil {return nil ,_d .Wrap (_ddgd ,_eabbb ,"\u0062\u006d\u0032");
|
|
|
|
};_bbba :=&_be .Stack {};_bbba .Aux =&_be .Stack {};_gab =&Boxes {};var (_abeaf ,_ggag int ;_dgeb _ea .Point ;_dfgg bool ;_adfd *_ea .Rectangle ;);for {if _dgeb ,_dfgg ,_ddgd =_edgg .nextOnPixel (_abeaf ,_ggag );_ddgd !=nil {return nil ,_d .Wrap (_ddgd ,_eabbb ,"");
|
|
|
|
};if !_dfgg {break ;};if _adfd ,_ddgd =_cdab (_edgg ,_bbba ,_dgeb .X ,_dgeb .Y ,_egbge );_ddgd !=nil {return nil ,_d .Wrap (_ddgd ,_eabbb ,"");};if _ddgd =_gab .Add (_adfd );_ddgd !=nil {return nil ,_d .Wrap (_ddgd ,_eabbb ,"");};if _cfec ,_ddgd =_edgg .clipRectangle (_adfd ,nil );
|
|
|
|
_ddgd !=nil {return nil ,_d .Wrap (_ddgd ,_eabbb ,"\u0062\u006d\u0033");};if _afda ,_ddgd =_fgcd .clipRectangle (_adfd ,nil );_ddgd !=nil {return nil ,_d .Wrap (_ddgd ,_eabbb ,"\u0062\u006d\u0034");};if _ ,_ddgd =_aafg (_cfec ,_cfec ,_afda );_ddgd !=nil {return nil ,_d .Wrap (_ddgd ,_eabbb ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");
|
|
|
|
};if _ddgd =_fgcd .RasterOperation (_adfd .Min .X ,_adfd .Min .Y ,_adfd .Dx (),_adfd .Dy (),PixSrcXorDst ,_cfec ,0,0);_ddgd !=nil {return nil ,_d .Wrap (_ddgd ,_eabbb ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};
|
|
|
|
_ecdec .AddBitmap (_cfec );_abeaf =_dgeb .X ;_ggag =_dgeb .Y ;};_ecdec .Boxes =*_gab ;return _gab ,nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _ecfg ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
|
|
|
|
_efdc ,_fdef :=p1 .Width ,p1 .Height ;_cfde ,_edbce :=p3 .Width ,p3 .Height ;if _be .Abs (_efdc -_cfde )> maxDiffW {return false ,nil ;};if _be .Abs (_fdef -_edbce )> maxDiffH {return false ,nil ;};_ged :=int (delX +_be .Sign (delX )*0.5);_agdge :=int (delY +_be .Sign (delY )*0.5);
|
|
|
|
var _ccab error ;_dade :=p1 .CreateTemplate ();if _ccab =_dade .RasterOperation (0,0,_efdc ,_fdef ,PixSrc ,p1 ,0,0);_ccab !=nil {return false ,_d .Wrap (_ccab ,_ecfg ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ccab =_dade .RasterOperation (_ged ,_agdge ,_efdc ,_fdef ,PixNotSrcAndDst ,p4 ,0,0);
|
|
|
|
_ccab !=nil {return false ,_d .Wrap (_ccab ,_ecfg ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _dade .Zero (){return false ,nil ;};if _ccab =_dade .RasterOperation (_ged ,_agdge ,_cfde ,_edbce ,PixSrc ,p3 ,0,0);_ccab !=nil {return false ,_d .Wrap (_ccab ,_ecfg ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");
|
|
|
|
};if _ccab =_dade .RasterOperation (0,0,_cfde ,_edbce ,PixNotSrcAndDst ,p2 ,0,0);_ccab !=nil {return false ,_d .Wrap (_ccab ,_ecfg ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _dade .Zero (),nil ;};func Centroids (bms []*Bitmap )(*Points ,error ){_abeg :=make ([]Point ,len (bms ));
|
|
|
|
_dbdc :=_dfda ();_daad :=_ceefb ();var _afec error ;for _aede ,_aggc :=range bms {_abeg [_aede ],_afec =_aggc .centroid (_dbdc ,_daad );if _afec !=nil {return nil ,_afec ;};};_effa :=Points (_abeg );return &_effa ,nil ;};func (_eaga Points )Size ()int {return len (_eaga )};
|
|
|
|
func _ffead (_ffbe *_be .Stack )(_afac *fillSegment ,_gcge error ){const _ffbg ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _ffbe ==nil {return nil ,_d .Error (_ffbg ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
|
|
|
|
};if _ffbe .Aux ==nil {return nil ,_d .Error (_ffbg ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_eada ,_gdfgb :=_ffbe .Pop ();if !_gdfgb {return nil ,nil ;};_dbac ,_gdfgb :=_eada .(*fillSegment );
|
|
|
|
if !_gdfgb {return nil ,_d .Error (_ffbg ,"\u0073\u0074\u0061ck\u0020\u0064\u006f\u0065\u0073\u006e\u0027\u0074\u0020c\u006fn\u0074a\u0069n\u0020\u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074");};_afac =&fillSegment {_dbac ._gfade ,_dbac ._afag ,_dbac ._fffcbb +_dbac ._aaef ,_dbac ._aaef };
|
|
|
|
_ffbe .Aux .Push (_dbac );return _afac ,nil ;};func _ccff (_adcc ,_dbeed *Bitmap ,_efdfc *Selection )(*Bitmap ,error ){const _bcagd ="\u0065\u0072\u006fd\u0065";var (_ggbd error ;_dfcb *Bitmap ;);_adcc ,_ggbd =_fdcg (_adcc ,_dbeed ,_efdfc ,&_dfcb );if _ggbd !=nil {return nil ,_d .Wrap (_ggbd ,_bcagd ,"");
|
|
|
|
};if _ggbd =_adcc .setAll ();_ggbd !=nil {return nil ,_d .Wrap (_ggbd ,_bcagd ,"");};var _efege SelectionValue ;for _efdea :=0;_efdea < _efdfc .Height ;_efdea ++{for _gede :=0;_gede < _efdfc .Width ;_gede ++{_efege =_efdfc .Data [_efdea ][_gede ];if _efege ==SelHit {_ggbd =_dfaa (_adcc ,_efdfc .Cx -_gede ,_efdfc .Cy -_efdea ,_dbeed .Width ,_dbeed .Height ,PixSrcAndDst ,_dfcb ,0,0);
|
|
|
|
if _ggbd !=nil {return nil ,_d .Wrap (_ggbd ,_bcagd ,"");};};};};if MorphBC ==SymmetricMorphBC {return _adcc ,nil ;};_ccag ,_bfff ,_gfee ,_gbbb :=_efdfc .findMaxTranslations ();if _ccag > 0{if _ggbd =_adcc .RasterOperation (0,0,_ccag ,_dbeed .Height ,PixClr ,nil ,0,0);
|
|
|
|
_ggbd !=nil {return nil ,_d .Wrap (_ggbd ,_bcagd ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _gfee > 0{if _ggbd =_adcc .RasterOperation (_dbeed .Width -_gfee ,0,_gfee ,_dbeed .Height ,PixClr ,nil ,0,0);_ggbd !=nil {return nil ,_d .Wrap (_ggbd ,_bcagd ,"\u0078\u006e\u0020\u003e\u0020\u0030");
|
|
|
|
};};if _bfff > 0{if _ggbd =_adcc .RasterOperation (0,0,_dbeed .Width ,_bfff ,PixClr ,nil ,0,0);_ggbd !=nil {return nil ,_d .Wrap (_ggbd ,_bcagd ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _gbbb > 0{if _ggbd =_adcc .RasterOperation (0,_dbeed .Height -_gbbb ,_dbeed .Width ,_gbbb ,PixClr ,nil ,0,0);
|
|
|
|
_ggbd !=nil {return nil ,_d .Wrap (_ggbd ,_bcagd ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _adcc ,nil ;};func _gacd (_cbg ,_abc *Bitmap ,_gadc int ,_gfc []byte ,_egca int )(_cbef error ){const _gfg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";
|
|
|
|
var (_fed ,_ddc ,_bcce ,_bac ,_cecc ,_baa ,_ggg ,_gfcd int ;_abaf ,_cdbd uint32 ;_dbd ,_fdb byte ;_abe uint16 ;);_fbe :=make ([]byte ,4);_gbdf :=make ([]byte ,4);for _bcce =0;_bcce < _cbg .Height -1;_bcce ,_bac =_bcce +2,_bac +1{_fed =_bcce *_cbg .RowStride ;
|
|
|
|
_ddc =_bac *_abc .RowStride ;for _cecc ,_baa =0,0;_cecc < _egca ;_cecc ,_baa =_cecc +4,_baa +1{for _ggg =0;_ggg < 4;_ggg ++{_gfcd =_fed +_cecc +_ggg ;if _gfcd <=len (_cbg .Data )-1&&_gfcd < _fed +_cbg .RowStride {_fbe [_ggg ]=_cbg .Data [_gfcd ];}else {_fbe [_ggg ]=0x00;
|
|
|
|
};_gfcd =_fed +_cbg .RowStride +_cecc +_ggg ;if _gfcd <=len (_cbg .Data )-1&&_gfcd < _fed +(2*_cbg .RowStride ){_gbdf [_ggg ]=_cbg .Data [_gfcd ];}else {_gbdf [_ggg ]=0x00;};};_abaf =_fb .BigEndian .Uint32 (_fbe );_cdbd =_fb .BigEndian .Uint32 (_gbdf );
|
|
|
|
_cdbd &=_abaf ;_cdbd &=_cdbd <<1;_cdbd &=0xaaaaaaaa;_abaf =_cdbd |(_cdbd <<7);_dbd =byte (_abaf >>24);_fdb =byte ((_abaf >>8)&0xff);_gfcd =_ddc +_baa ;if _gfcd +1==len (_abc .Data )-1||_gfcd +1>=_ddc +_abc .RowStride {_abc .Data [_gfcd ]=_gfc [_dbd ];if _cbef =_abc .SetByte (_gfcd ,_gfc [_dbd ]);
|
|
|
|
_cbef !=nil {return _d .Wrapf (_cbef ,_gfg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gfcd );};}else {_abe =(uint16 (_gfc [_dbd ])<<8)|uint16 (_gfc [_fdb ]);if _cbef =_abc .setTwoBytes (_gfcd ,_abe );_cbef !=nil {return _d .Wrapf (_cbef ,_gfg ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_gfcd );
|
|
|
|
};_baa ++;};};};return nil ;};func _ecg (_fdge ,_cegf *Bitmap ,_gbee ,_bfec int )(_fceca error ){const _gbega ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_edeg ,_ecafe ,_ggac ,_eeae int ;_gebd ,_eafbc ,_dbcd ,_deabd ,_ffcdc ,_bece ,_ebfff byte ;
|
|
|
|
);for _edeg =0;_edeg < _gbee ;_edeg ++{_ggac =_edeg *_fdge .RowStride ;_eeae =_edeg *_cegf .RowStride ;for _ecafe =0;_ecafe < _bfec ;_ecafe ++{_gebd ,_fceca =_fdge .GetByte (_ggac +_ecafe );if _fceca !=nil {return _d .Wrap (_fceca ,_gbega ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");
|
|
|
|
};_eafbc ,_fceca =_cegf .GetByte (_eeae +_ecafe );if _fceca !=nil {return _d .Wrap (_fceca ,_gbega ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _edeg > 0{_dbcd ,_fceca =_fdge .GetByte (_ggac -_fdge .RowStride +_ecafe );if _fceca !=nil {return _d .Wrap (_fceca ,_gbega ,"\u0069\u0020\u003e \u0030");
|
|
|
|
};_gebd |=_dbcd ;};if _ecafe > 0{_deabd ,_fceca =_fdge .GetByte (_ggac +_ecafe -1);if _fceca !=nil {return _d .Wrap (_fceca ,_gbega ,"\u006a\u0020\u003e \u0030");};_gebd |=_deabd <<7;};_gebd &=_eafbc ;if _gebd ==0||(^_gebd )==0{if _fceca =_fdge .SetByte (_ggac +_ecafe ,_gebd );
|
|
|
|
_fceca !=nil {return _d .Wrap (_fceca ,_gbega ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_ebfff =_gebd ;_gebd =(_gebd |(_gebd >>1)|(_gebd <<1))&_eafbc ;if (_gebd ^_ebfff )==0{if _fceca =_fdge .SetByte (_ggac +_ecafe ,_gebd );
|
|
|
|
_fceca !=nil {return _d .Wrap (_fceca ,_gbega ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _edeg =_gbee -1;_edeg >=0;_edeg --{_ggac =_edeg *_fdge .RowStride ;_eeae =_edeg *_cegf .RowStride ;
|
|
|
|
for _ecafe =_bfec -1;_ecafe >=0;_ecafe --{if _gebd ,_fceca =_fdge .GetByte (_ggac +_ecafe );_fceca !=nil {return _d .Wrap (_fceca ,_gbega ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _eafbc ,_fceca =_cegf .GetByte (_eeae +_ecafe );
|
|
|
|
_fceca !=nil {return _d .Wrap (_fceca ,_gbega ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _edeg < _gbee -1{if _ffcdc ,_fceca =_fdge .GetByte (_ggac +_fdge .RowStride +_ecafe );_fceca !=nil {return _d .Wrap (_fceca ,_gbega ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");
|
|
|
|
};_gebd |=_ffcdc ;};if _ecafe < _bfec -1{if _bece ,_fceca =_fdge .GetByte (_ggac +_ecafe +1);_fceca !=nil {return _d .Wrap (_fceca ,_gbega ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_gebd |=_bece >>7;
|
|
|
|
};_gebd &=_eafbc ;if _gebd ==0||(^_gebd )==0{if _fceca =_fdge .SetByte (_ggac +_ecafe ,_gebd );_fceca !=nil {return _d .Wrap (_fceca ,_gbega ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006d\u0061\u0073k\u0065\u0064\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061i\u006c\u0065\u0064");
|
|
|
|
};continue ;};for {_ebfff =_gebd ;_gebd =(_gebd |(_gebd >>1)|(_gebd <<1))&_eafbc ;if (_gebd ^_ebfff )==0{if _fceca =_fdge .SetByte (_ggac +_ecafe ,_gebd );_fceca !=nil {return _d .Wrap (_fceca ,_gbega ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
|
|
|
|
};break ;};};};};return nil ;};func TstWordBitmap (t *_dd .T ,scale ...int )*Bitmap {_bbff :=1;if len (scale )> 0{_bbff =scale [0];};_abfe :=3;_acag :=9+7+15+2*_abfe ;_cabbb :=5+_abfe +5;_gbdfe :=New (_acag *_bbff ,_cabbb *_bbff );_bceb :=&Bitmaps {};var _abcb *int ;
|
|
|
|
_abfe *=_bbff ;_ebca :=0;_abcb =&_ebca ;_dgea :=0;_fbdd :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,1*_bbff );_fbdd =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,_abfe );_fbdd =TstISymbol (t ,scale ...);
|
|
|
|
TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,1*_bbff );_fbdd =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,_abfe );_fbdd =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,1*_bbff );_fbdd =TstOSymbol (t ,scale ...);
|
|
|
|
TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,1*_bbff );_fbdd =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,0);*_abcb =0;_dgea =5*_bbff +_abfe ;_fbdd =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,1*_bbff );
|
|
|
|
_fbdd =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,_abfe );_fbdd =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,1*_bbff );_fbdd =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,1*_bbff );
|
|
|
|
_fbdd =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,1*_bbff );_fbdd =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,1*_bbff );_fbdd =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bceb ,_fbdd ,_abcb ,_dgea ,0);
|
|
|
|
TstWriteSymbols (t ,_bceb ,_gbdfe );return _gbdfe ;};func (_aga *Bitmap )And (s *Bitmap )(_ddgf *Bitmap ,_dbe error ){const _dcd ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _aga ==nil {return nil ,_d .Error (_dcd ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");
|
|
|
|
};if s ==nil {return nil ,_d .Error (_dcd ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_aga .SizesEqual (s ){_g .Log .Debug ("\u0025\u0073\u0020-\u0020\u0042\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0073\u0069\u007a\u0065 \u0077\u0069\u0074\u0068\u0020\u0027\u0062\u0027",_dcd );
|
|
|
|
};if _ddgf ,_dbe =_fcdg (_ddgf ,_aga );_dbe !=nil {return nil ,_d .Wrap (_dbe ,_dcd ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _dbe =_ddgf .RasterOperation (0,0,_ddgf .Width ,_ddgf .Height ,PixSrcAndDst ,s ,0,0);
|
|
|
|
_dbe !=nil {return nil ,_d .Wrap (_dbe ,_dcd ,"");};return _ddgf ,nil ;};func TstOSymbol (t *_dd .T ,scale ...int )*Bitmap {_gggd ,_dcgd :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_f .NoError (t ,_dcgd );return TstGetScaledSymbol (t ,_gggd ,scale ...);
|
|
|
|
};func TstVSymbol (t *_dd .T ,scale ...int )*Bitmap {_cegfd ,_cgec :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_f .NoError (t ,_cgec );return TstGetScaledSymbol (t ,_cegfd ,scale ...);};func TstDSymbol (t *_dd .T ,scale ...int )*Bitmap {_fbdf ,_dcbdff :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});
|
|
|
|
_f .NoError (t ,_dcbdff );return TstGetScaledSymbol (t ,_fbdf ,scale ...);};func (_gbgd *Bitmap )setFourBytes (_abda int ,_bga uint32 )error {if _abda +3> len (_gbgd .Data )-1{return _d .Errorf ("\u0073\u0065\u0074F\u006f\u0075\u0072\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_abda );
|
|
|
|
};_gbgd .Data [_abda ]=byte ((_bga &0xff000000)>>24);_gbgd .Data [_abda +1]=byte ((_bga &0xff0000)>>16);_gbgd .Data [_abda +2]=byte ((_bga &0xff00)>>8);_gbgd .Data [_abda +3]=byte (_bga &0xff);return nil ;};func (_caa *Bitmap )GetByteIndex (x ,y int )int {return y *_caa .RowStride +(x >>3)};
|
|
|
|
func (_gbdc *Bitmaps )AddBox (box *_ea .Rectangle ){_gbdc .Boxes =append (_gbdc .Boxes ,box )};func (_baef *Bitmaps )SortByHeight (){_fec :=(*byHeight )(_baef );_de .Sort (_fec )};func (_defd *Points )AddPoint (x ,y float32 ){*_defd =append (*_defd ,Point {x ,y })};
|
|
|
|
type SelectionValue int ;func (_bcb *Bitmap )SetPixel (x ,y int ,pixel byte )error {_beb :=_bcb .GetByteIndex (x ,y );if _beb > len (_bcb .Data )-1{return _d .Errorf ("\u0053\u0065\u0074\u0050\u0069\u0078\u0065\u006c","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",_beb );
|
|
|
|
};_gee :=_bcb .GetBitOffset (x );_ggdd :=uint (7-_gee );_dedd :=_bcb .Data [_beb ];var _ed byte ;if pixel ==1{_ed =_dedd |(pixel &0x01<<_ggdd );}else {_ed =_dedd &^(1<<_ggdd );};_bcb .Data [_beb ]=_ed ;return nil ;};func (_adge *ClassedPoints )Len ()int {return _adge .IntSlice .Size ()};
|
|
|
|
func (_egbac *byWidth )Less (i ,j int )bool {return _egbac .Values [i ].Width < _egbac .Values [j ].Width };func (_cedf *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _dgdf ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";
|
|
|
|
if len (_cedf .Values )==0{return nil ,_d .Error (_dgdf ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_gfcg :=&BitmapsArray {};_cedf .SortByWidth ();_gfafc :=-1;_abeac :=-1;for _bdae :=0;_bdae < len (_cedf .Values );
|
|
|
|
_bdae ++{_cacef :=_cedf .Values [_bdae ].Width ;if _cacef > _gfafc {_gfafc =_cacef ;_abeac ++;_gfcg .Values =append (_gfcg .Values ,&Bitmaps {});};_gfcg .Values [_abeac ].AddBitmap (_cedf .Values [_bdae ]);};return _gfcg ,nil ;};type ClassedPoints struct{*Points ;
|
|
|
|
_be .IntSlice ;_gbgff func (_eeage ,_adgf int )bool ;};type Color int ;const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);type LocationFilter int ;func (_dge *Bitmap )setPadBits (_edg int ){_fge :=8-_dge .Width %8;if _fge ==8{return ;
|
|
|
|
};_cbee :=_dge .Width /8;_dgba :=_efbgc [_fge ];if _edg ==0{_dgba ^=_dgba ;};var _bcf int ;for _fdbf :=0;_fdbf < _dge .Height ;_fdbf ++{_bcf =_fdbf *_dge .RowStride +_cbee ;if _edg ==0{_dge .Data [_bcf ]&=_dgba ;}else {_dge .Data [_bcf ]|=_dgba ;};};};
|
|
|
|
func (_dgbc *Bitmap )connComponentsBB (_eeed int )(_gddb *Boxes ,_aagg error ){const _ffe ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _eeed !=4&&_eeed !=8{return nil ,_d .Error (_ffe ,"\u0063\u006f\u006e\u006e\u0065\u0063t\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u0061\u0020\u0027\u0034\u0027\u0020\u006fr\u0020\u0027\u0038\u0027");
|
|
|
|
};if _dgbc .Zero (){return &Boxes {},nil ;};_dgbc .setPadBits (0);_gfgfc ,_aagg :=_fcdg (nil ,_dgbc );if _aagg !=nil {return nil ,_d .Wrap (_aagg ,_ffe ,"\u0062\u006d\u0031");};_aafgf :=&_be .Stack {};_aafgf .Aux =&_be .Stack {};_gddb =&Boxes {};var (_bebd ,_gcca int ;
|
|
|
|
_ggb _ea .Point ;_gbebd bool ;_bde *_ea .Rectangle ;);for {if _ggb ,_gbebd ,_aagg =_gfgfc .nextOnPixel (_gcca ,_bebd );_aagg !=nil {return nil ,_d .Wrap (_aagg ,_ffe ,"");};if !_gbebd {break ;};if _bde ,_aagg =_cdab (_gfgfc ,_aafgf ,_ggb .X ,_ggb .Y ,_eeed );
|
|
|
|
_aagg !=nil {return nil ,_d .Wrap (_aagg ,_ffe ,"");};if _aagg =_gddb .Add (_bde );_aagg !=nil {return nil ,_d .Wrap (_aagg ,_ffe ,"");};_gcca =_ggb .X ;_bebd =_ggb .Y ;};return _gddb ,nil ;};func (_eedf Points )GetGeometry (i int )(_egec ,_bfef float32 ,_ebfed error ){if i > len (_eedf )-1{return 0,0,_d .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
|
|
};_ccca :=_eedf [i ];return _ccca .X ,_ccca .Y ,nil ;};func (_dabc *Bitmap )clearAll ()error {return _dabc .RasterOperation (0,0,_dabc .Width ,_dabc .Height ,PixClr ,nil ,0,0);};func (_aacc *Bitmap )GetUnpaddedData ()([]byte ,error ){_egg :=uint (_aacc .Width &0x07);
|
|
|
|
if _egg ==0{return _aacc .Data ,nil ;};_ddcg :=_aacc .Width *_aacc .Height ;if _ddcg %8!=0{_ddcg >>=3;_ddcg ++;}else {_ddcg >>=3;};_cbgc :=make ([]byte ,_ddcg );_dbb :=_e .NewWriterMSB (_cbgc );const _gfgf ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
|
|
|
|
for _cfc :=0;_cfc < _aacc .Height ;_cfc ++{for _fgaf :=0;_fgaf < _aacc .RowStride ;_fgaf ++{_eabb :=_aacc .Data [_cfc *_aacc .RowStride +_fgaf ];if _fgaf !=_aacc .RowStride -1{_bcec :=_dbb .WriteByte (_eabb );if _bcec !=nil {return nil ,_d .Wrap (_bcec ,_gfgf ,"");
|
|
|
|
};continue ;};for _bbeg :=uint (0);_bbeg < _egg ;_bbeg ++{_cdcd :=_dbb .WriteBit (int (_eabb >>(7-_bbeg )&0x01));if _cdcd !=nil {return nil ,_d .Wrap (_cdcd ,_gfgf ,"");};};};};return _cbgc ,nil ;};func (_dbddf *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _ceac ="\u0043\u006c\u0061\u0073s\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047e\u0074I\u006e\u0074\u0059\u0042\u0079\u0043\u006ca\u0073\u0073";
|
|
|
|
if i >=_dbddf .IntSlice .Size (){return 0,_d .Errorf (_ceac ,"\u0069\u003a\u0020\u0027\u0025\u0064\u0027 \u0069\u0073\u0020o\u0075\u0074\u0020\u006ff\u0020\u0074\u0068\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065",i );
|
|
|
|
};return int (_dbddf .XAtIndex (i )),nil ;};func (_ccef *Points )Add (pt *Points )error {const _efead ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _ccef ==nil {return _d .Error (_efead ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
};if pt ==nil {return _d .Error (_efead ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_ccef =append (*_ccef ,*pt ...);return nil ;};func (_caca *Selection )setOrigin (_adefa ,_gbbe int ){_caca .Cy ,_caca .Cx =_adefa ,_gbbe };
|
|
|
|
func TstImageBitmapData ()[]byte {return _gbfac .Data };func _cddb (_dcffe *Bitmap ,_faac *_be .Stack ,_egccf ,_efgd int )(_bffg *_ea .Rectangle ,_gcd error ){const _agdce ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
|
|
|
|
if _dcffe ==nil {return nil ,_d .Error (_agdce ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _faac ==nil {return nil ,_d .Error (_agdce ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
|
|
|
|
};_bffd ,_faebb :=_dcffe .Width ,_dcffe .Height ;_ggde :=_bffd -1;_eeaa :=_faebb -1;if _egccf < 0||_egccf > _ggde ||_efgd < 0||_efgd > _eeaa ||!_dcffe .GetPixel (_egccf ,_efgd ){return nil ,nil ;};var _fceg *_ea .Rectangle ;_fceg ,_gcd =Rect (100000,100000,0,0);
|
|
|
|
if _gcd !=nil {return nil ,_d .Wrap (_gcd ,_agdce ,"");};if _gcd =_fade (_faac ,_egccf ,_egccf ,_efgd ,1,_eeaa ,_fceg );_gcd !=nil {return nil ,_d .Wrap (_gcd ,_agdce ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gcd =_fade (_faac ,_egccf ,_egccf ,_efgd +1,-1,_eeaa ,_fceg );
|
|
|
|
_gcd !=nil {return nil ,_d .Wrap (_gcd ,_agdce ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_fceg .Min .X ,_fceg .Max .X =_egccf ,_egccf ;_fceg .Min .Y ,_fceg .Max .Y =_efgd ,_efgd ;var (_egac *fillSegment ;
|
|
|
|
_gaag int ;);for _faac .Len ()> 0{if _egac ,_gcd =_ffead (_faac );_gcd !=nil {return nil ,_d .Wrap (_gcd ,_agdce ,"");};_efgd =_egac ._fffcbb ;for _egccf =_egac ._gfade ;_egccf >=0&&_dcffe .GetPixel (_egccf ,_efgd );_egccf --{if _gcd =_dcffe .SetPixel (_egccf ,_efgd ,0);
|
|
|
|
_gcd !=nil {return nil ,_d .Wrap (_gcd ,_agdce ,"");};};if _egccf >=_egac ._gfade {for _egccf ++;_egccf <=_egac ._afag &&_egccf <=_ggde &&!_dcffe .GetPixel (_egccf ,_efgd );_egccf ++{};_gaag =_egccf ;if !(_egccf <=_egac ._afag &&_egccf <=_ggde ){continue ;
|
|
|
|
};}else {_gaag =_egccf +1;if _gaag < _egac ._gfade -1{if _gcd =_fade (_faac ,_gaag ,_egac ._gfade -1,_egac ._fffcbb ,-_egac ._aaef ,_eeaa ,_fceg );_gcd !=nil {return nil ,_d .Wrap (_gcd ,_agdce ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
|
|
|
|
};};_egccf =_egac ._gfade +1;};for {for ;_egccf <=_ggde &&_dcffe .GetPixel (_egccf ,_efgd );_egccf ++{if _gcd =_dcffe .SetPixel (_egccf ,_efgd ,0);_gcd !=nil {return nil ,_d .Wrap (_gcd ,_agdce ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gcd =_fade (_faac ,_gaag ,_egccf -1,_egac ._fffcbb ,_egac ._aaef ,_eeaa ,_fceg );
|
|
|
|
_gcd !=nil {return nil ,_d .Wrap (_gcd ,_agdce ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _egccf > _egac ._afag +1{if _gcd =_fade (_faac ,_egac ._afag +1,_egccf -1,_egac ._fffcbb ,-_egac ._aaef ,_eeaa ,_fceg );_gcd !=nil {return nil ,_d .Wrap (_gcd ,_agdce ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
|
|
};};for _egccf ++;_egccf <=_egac ._afag &&_egccf <=_ggde &&!_dcffe .GetPixel (_egccf ,_efgd );_egccf ++{};_gaag =_egccf ;if !(_egccf <=_egac ._afag &&_egccf <=_ggde ){break ;};};};_fceg .Max .X ++;_fceg .Max .Y ++;return _fceg ,nil ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_cdff float64 ,_dedb error ){const _cgde ="\u0043\u006f\u0072\u0072el\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0053\u0069\u006d\u0070l\u0065";
|
|
|
|
if bm1 ==nil ||bm2 ==nil {return _cdff ,_d .Error (_cgde ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _cdff ,_d .Error (_cgde ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
};if area1 ==0||area2 ==0{return _cdff ,_d .Error (_cgde ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_bbead ,_cbda :=bm1 .Width ,bm1 .Height ;_deb ,_gadf :=bm2 .Width ,bm2 .Height ;
|
|
|
|
if _fdgg (_bbead -_deb )> maxDiffW {return 0,nil ;};if _fdgg (_cbda -_gadf )> maxDiffH {return 0,nil ;};var _bacb ,_abfg int ;if delX >=0{_bacb =int (delX +0.5);}else {_bacb =int (delX -0.5);};if delY >=0{_abfg =int (delY +0.5);}else {_abfg =int (delY -0.5);
|
|
|
|
};_efeg :=bm1 .createTemplate ();if _dedb =_efeg .RasterOperation (_bacb ,_abfg ,_deb ,_gadf ,PixSrc ,bm2 ,0,0);_dedb !=nil {return _cdff ,_d .Wrap (_dedb ,_cgde ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _dedb =_efeg .RasterOperation (0,0,_bbead ,_cbda ,PixSrcAndDst ,bm1 ,0,0);
|
|
|
|
_dedb !=nil {return _cdff ,_d .Wrap (_dedb ,_cgde ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_fgafg :=_efeg .countPixels ();_cdff =float64 (_fgafg )*float64 (_fgafg )/(float64 (area1 )*float64 (area2 ));return _cdff ,nil ;};type SizeSelection int ;
|
|
|
|
func (_abd *Bitmap )equivalent (_bbg *Bitmap )bool {if _abd ==_bbg {return true ;};if !_abd .SizesEqual (_bbg ){return false ;};_cce :=_fgea (_abd ,_bbg ,CmbOpXor );_fcbfe :=_abd .countPixels ();_agc :=int (0.25*float32 (_fcbfe ));if _cce .thresholdPixelSum (_agc ){return false ;
|
|
|
|
};var (_eabdf [9][9]int ;_bgc [18][9]int ;_abg [9][18]int ;_bffcba int ;_cddf int ;);_dfd :=9;_bdgg :=_abd .Height /_dfd ;_gfgb :=_abd .Width /_dfd ;_fdf ,_gcf :=_bdgg /2,_gfgb /2;if _bdgg < _gfgb {_fdf =_gfgb /2;_gcf =_bdgg /2;};_cece :=float64 (_fdf )*float64 (_gcf )*_ae .Pi ;
|
|
|
|
_fbdc :=int (float64 (_bdgg *_gfgb /2)*0.9);_acff :=int (float64 (_gfgb *_bdgg /2)*0.9);for _baca :=0;_baca < _dfd ;_baca ++{_bdgf :=_gfgb *_baca +_bffcba ;var _ecd int ;if _baca ==_dfd -1{_bffcba =0;_ecd =_abd .Width ;}else {_ecd =_bdgf +_gfgb ;if ((_abd .Width -_bffcba )%_dfd )> 0{_bffcba ++;
|
|
|
|
_ecd ++;};};for _daea :=0;_daea < _dfd ;_daea ++{_ebda :=_bdgg *_daea +_cddf ;var _ccc int ;if _daea ==_dfd -1{_cddf =0;_ccc =_abd .Height ;}else {_ccc =_ebda +_bdgg ;if (_abd .Height -_cddf )%_dfd > 0{_cddf ++;_ccc ++;};};var _ebce ,_cfed ,_efeb ,_dcg int ;
|
|
|
|
_fcdb :=(_bdgf +_ecd )/2;_gdaac :=(_ebda +_ccc )/2;for _cceb :=_bdgf ;_cceb < _ecd ;_cceb ++{for _affe :=_ebda ;_affe < _ccc ;_affe ++{if _cce .GetPixel (_cceb ,_affe ){if _cceb < _fcdb {_ebce ++;}else {_cfed ++;};if _affe < _gdaac {_dcg ++;}else {_efeb ++;
|
|
|
|
};};};};_eabdf [_baca ][_daea ]=_ebce +_cfed ;_bgc [_baca *2][_daea ]=_ebce ;_bgc [_baca *2+1][_daea ]=_cfed ;_abg [_baca ][_daea *2]=_dcg ;_abg [_baca ][_daea *2+1]=_efeb ;};};for _gca :=0;_gca < _dfd *2-1;_gca ++{for _fbcc :=0;_fbcc < (_dfd -1);_fbcc ++{var _dcef int ;
|
|
|
|
for _ccd :=0;_ccd < 2;_ccd ++{for _bae :=0;_bae < 2;_bae ++{_dcef +=_bgc [_gca +_ccd ][_fbcc +_bae ];};};if _dcef > _acff {return false ;};};};for _cdga :=0;_cdga < (_dfd -1);_cdga ++{for _bgbe :=0;_bgbe < ((_dfd *2)-1);_bgbe ++{var _bgba int ;for _ceg :=0;
|
|
|
|
_ceg < 2;_ceg ++{for _aebc :=0;_aebc < 2;_aebc ++{_bgba +=_abg [_cdga +_ceg ][_bgbe +_aebc ];};};if _bgba > _fbdc {return false ;};};};for _dbccc :=0;_dbccc < (_dfd -2);_dbccc ++{for _adac :=0;_adac < (_dfd -2);_adac ++{var _baac ,_gce int ;for _bdgfg :=0;
|
|
|
|
_bdgfg < 3;_bdgfg ++{for _befg :=0;_befg < 3;_befg ++{if _bdgfg ==_befg {_baac +=_eabdf [_dbccc +_bdgfg ][_adac +_befg ];};if (2-_bdgfg )==_befg {_gce +=_eabdf [_dbccc +_bdgfg ][_adac +_befg ];};};};if _baac > _acff ||_gce > _acff {return false ;};};};
|
|
|
|
for _gacb :=0;_gacb < (_dfd -1);_gacb ++{for _fdgbe :=0;_fdgbe < (_dfd -1);_fdgbe ++{var _ebe int ;for _gbeb :=0;_gbeb < 2;_gbeb ++{for _cgfe :=0;_cgfe < 2;_cgfe ++{_ebe +=_eabdf [_gacb +_gbeb ][_fdgbe +_cgfe ];};};if float64 (_ebe )> _cece {return false ;
|
|
|
|
};};};return true ;};func _fdcg (_agba *Bitmap ,_bafd *Bitmap ,_fgdfb *Selection ,_fgcef **Bitmap )(*Bitmap ,error ){const _ddda ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _bafd ==nil {return nil ,_d .Error (_ddda ,"\u004d\u006f\u0072\u0070\u0068\u0041\u0072\u0067\u0073\u0031\u0020'\u0073\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066i\u006e\u0065\u0064");
|
|
|
|
};if _fgdfb ==nil {return nil ,_d .Error (_ddda ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_agdc ,_adfe :=_fgdfb .Height ,_fgdfb .Width ;if _agdc ==0||_adfe ==0{return nil ,_d .Error (_ddda ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
|
|
|
|
};if _agba ==nil {_agba =_bafd .createTemplate ();*_fgcef =_bafd ;return _agba ,nil ;};_agba .Width =_bafd .Width ;_agba .Height =_bafd .Height ;_agba .RowStride =_bafd .RowStride ;_agba .Color =_bafd .Color ;_agba .Data =make ([]byte ,_bafd .RowStride *_bafd .Height );
|
|
|
|
if _agba ==_bafd {*_fgcef =_bafd .Copy ();}else {*_fgcef =_bafd ;};return _agba ,nil ;};func (_dfa *Bitmap )setBit (_cfff int ){_dfa .Data [(_cfff >>3)]|=0x80>>uint (_cfff &7)};func Rect (x ,y ,w ,h int )(*_ea .Rectangle ,error ){const _acb ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";
|
|
|
|
if x < 0{w +=x ;x =0;if w <=0{return nil ,_d .Errorf (_acb ,"x\u003a\u0027\u0025\u0064\u0027\u0020<\u0020\u0030\u0020\u0061\u006e\u0064\u0020\u0077\u003a \u0027\u0025\u0064'\u0020<\u003d\u0020\u0030",x ,w );};};if y < 0{h +=y ;y =0;if h <=0{return nil ,_d .Error (_acb ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");
|
|
|
|
};};_gbde :=_ea .Rect (x ,y ,x +w ,y +h );return &_gbde ,nil ;};func (_ffa *Bitmap )Equals (s *Bitmap )bool {if len (_ffa .Data )!=len (s .Data )||_ffa .Width !=s .Width ||_ffa .Height !=s .Height {return false ;};for _eea :=0;_eea < _ffa .Height ;_eea ++{_fga :=_eea *_ffa .RowStride ;
|
|
|
|
for _gaf :=0;_gaf < _ffa .RowStride ;_gaf ++{if _ffa .Data [_fga +_gaf ]!=s .Data [_fga +_gaf ]{return false ;};};};return true ;};func (_gcec *Bitmaps )makeSizeIndicator (_dfdge ,_gacgg int ,_ccdab LocationFilter ,_dfacfd SizeComparison )(_cgeg *_be .NumSlice ,_bbd error ){const _bbcfe ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
|
|
if _gcec ==nil {return nil ,_d .Error (_bbcfe ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _ccdab {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_d .Errorf (_bbcfe ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",_ccdab );
|
|
|
|
};switch _dfacfd {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_d .Errorf (_bbcfe ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_dfacfd );
|
|
|
|
};_cgeg =&_be .NumSlice {};var (_gggb ,_bgcd ,_adcbe int ;_bcfd *Bitmap ;);for _ ,_bcfd =range _gcec .Values {_gggb =0;_bgcd ,_adcbe =_bcfd .Width ,_bcfd .Height ;switch _ccdab {case LocSelectWidth :if (_dfacfd ==SizeSelectIfLT &&_bgcd < _dfdge )||(_dfacfd ==SizeSelectIfGT &&_bgcd > _dfdge )||(_dfacfd ==SizeSelectIfLTE &&_bgcd <=_dfdge )||(_dfacfd ==SizeSelectIfGTE &&_bgcd >=_dfdge )||(_dfacfd ==SizeSelectIfEQ &&_bgcd ==_dfdge ){_gggb =1;
|
|
|
|
};case LocSelectHeight :if (_dfacfd ==SizeSelectIfLT &&_adcbe < _gacgg )||(_dfacfd ==SizeSelectIfGT &&_adcbe > _gacgg )||(_dfacfd ==SizeSelectIfLTE &&_adcbe <=_gacgg )||(_dfacfd ==SizeSelectIfGTE &&_adcbe >=_gacgg )||(_dfacfd ==SizeSelectIfEQ &&_adcbe ==_gacgg ){_gggb =1;
|
|
|
|
};case LocSelectIfEither :if (_dfacfd ==SizeSelectIfLT &&(_bgcd < _dfdge ||_adcbe < _gacgg ))||(_dfacfd ==SizeSelectIfGT &&(_bgcd > _dfdge ||_adcbe > _gacgg ))||(_dfacfd ==SizeSelectIfLTE &&(_bgcd <=_dfdge ||_adcbe <=_gacgg ))||(_dfacfd ==SizeSelectIfGTE &&(_bgcd >=_dfdge ||_adcbe >=_gacgg ))||(_dfacfd ==SizeSelectIfEQ &&(_bgcd ==_dfdge ||_adcbe ==_gacgg )){_gggb =1;
|
|
|
|
};case LocSelectIfBoth :if (_dfacfd ==SizeSelectIfLT &&(_bgcd < _dfdge &&_adcbe < _gacgg ))||(_dfacfd ==SizeSelectIfGT &&(_bgcd > _dfdge &&_adcbe > _gacgg ))||(_dfacfd ==SizeSelectIfLTE &&(_bgcd <=_dfdge &&_adcbe <=_gacgg ))||(_dfacfd ==SizeSelectIfGTE &&(_bgcd >=_dfdge &&_adcbe >=_gacgg ))||(_dfacfd ==SizeSelectIfEQ &&(_bgcd ==_dfdge &&_adcbe ==_gacgg )){_gggb =1;
|
|
|
|
};};_cgeg .AddInt (_gggb );};return _cgeg ,nil ;};func (_cadga *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _cgdf ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _cadga ==nil {return nil ,_d .Error (_cgdf ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
};if s ==nil {return nil ,_d .Error (_cgdf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_facee :=len (_cadga .Values );_dgaf :=&Bitmaps {Values :make ([]*Bitmap ,_facee ),Boxes :make ([]*_ea .Rectangle ,_facee )};
|
|
|
|
var (_efgg ,_acae *Bitmap ;_dbafg *_ea .Rectangle ;_gdgc error ;);for _ecbc :=0;_ecbc < _facee ;_ecbc ++{if _efgg ,_gdgc =_cadga .GetBitmap (_ecbc );_gdgc !=nil {return nil ,_d .Wrap (_gdgc ,_cgdf ,"");};if _dbafg ,_gdgc =_cadga .GetBox (_ecbc );_gdgc !=nil {return nil ,_d .Wrap (_gdgc ,_cgdf ,"");
|
|
|
|
};if _acae ,_gdgc =s .clipRectangle (_dbafg ,nil );_gdgc !=nil {return nil ,_d .Wrap (_gdgc ,_cgdf ,"");};if _acae ,_gdgc =_acae .And (_efgg );_gdgc !=nil {return nil ,_d .Wrap (_gdgc ,_cgdf ,"");};_dgaf .Values [_ecbc ]=_acae ;_dgaf .Boxes [_ecbc ]=_dbafg ;
|
|
|
|
};return _dgaf ,nil ;};func (_afaa *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_fbbg *Bitmaps ,_bedf *Boxes ,_cecg error ){const _ebge ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
|
|
|
|
if _afaa ==nil {return nil ,nil ,_d .Error (_ebge ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0042\u0069\u0074\u006da\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064\u002e");};switch components {case ComponentConn ,ComponentCharacters ,ComponentWords :default:return nil ,nil ,_d .Error (_ebge ,"\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u0063\u006f\u006d\u0070\u006f\u006e\u0065n\u0074s\u0020\u0070\u0061\u0072\u0061\u006d\u0065t\u0065\u0072");
|
|
|
|
};if _afaa .Zero (){_bedf =&Boxes {};_fbbg =&Bitmaps {};return _fbbg ,_bedf ,nil ;};switch components {case ComponentConn :_fbbg =&Bitmaps {};if _bedf ,_cecg =_afaa .ConnComponents (_fbbg ,8);_cecg !=nil {return nil ,nil ,_d .Wrap (_cecg ,_ebge ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
|
|
};case ComponentCharacters :_ecdg ,_ddbf :=MorphSequence (_afaa ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _ddbf !=nil {return nil ,nil ,_d .Wrap (_ddbf ,_ebge ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
|
|
};if _g .Log .IsLogLevel (_g .LogLevelTrace ){_g .Log .Trace ("\u0043o\u006d\u0070o\u006e\u0065\u006e\u0074C\u0068\u0061\u0072a\u0063\u0074\u0065\u0072\u0073\u0020\u0062\u0069\u0074ma\u0070\u0020\u0061f\u0074\u0065r\u0020\u0063\u006c\u006f\u0073\u0069n\u0067\u003a \u0025\u0073",_ecdg .String ());
|
|
|
|
};_abgad :=&Bitmaps {};_bedf ,_ddbf =_ecdg .ConnComponents (_abgad ,8);if _ddbf !=nil {return nil ,nil ,_d .Wrap (_ddbf ,_ebge ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
|
|
};if _g .Log .IsLogLevel (_g .LogLevelTrace ){_g .Log .Trace ("\u0043\u006f\u006d\u0070\u006f\u006ee\u006e\u0074\u0043\u0068\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0020a\u0066\u0074\u0065\u0072\u0020\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076i\u0074y\u003a\u0020\u0025\u0073",_abgad .String ());
|
|
|
|
};if _fbbg ,_ddbf =_abgad .ClipToBitmap (_afaa );_ddbf !=nil {return nil ,nil ,_d .Wrap (_ddbf ,_ebge ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_fedf :=1;
|
|
|
|
var _fadf *Bitmap ;switch {case _afaa .XResolution <=200:_fadf =_afaa ;case _afaa .XResolution <=400:_fedf =2;_fadf ,_cecg =_fbd (_afaa ,1,0,0,0);if _cecg !=nil {return nil ,nil ,_d .Wrap (_cecg ,_ebge ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
|
|
|
|
};default:_fedf =4;_fadf ,_cecg =_fbd (_afaa ,1,1,0,0);if _cecg !=nil {return nil ,nil ,_d .Wrap (_cecg ,_ebge ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
|
|
|
|
};};_geb ,_ ,_gfe :=_ffc (_fadf );if _gfe !=nil {return nil ,nil ,_d .Wrap (_gfe ,_ebge ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_abee ,_gfe :=_dceg (_geb ,_fedf );if _gfe !=nil {return nil ,nil ,_d .Wrap (_gfe ,_ebge ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
|
|
|
|
};_aggg :=&Bitmaps {};if _bedf ,_gfe =_abee .ConnComponents (_aggg ,4);_gfe !=nil {return nil ,nil ,_d .Wrap (_gfe ,_ebge ,"\u0077\u006f\u0072\u0064\u0020\u0070r\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u002c\u0020\u0063\u006f\u006en\u0065\u0063\u0074\u0020\u0065\u0078\u0070a\u006e\u0064\u0065\u0064");
|
|
|
|
};if _fbbg ,_gfe =_aggg .ClipToBitmap (_afaa );_gfe !=nil {return nil ,nil ,_d .Wrap (_gfe ,_ebge ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_fbbg ,_cecg =_fbbg .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
|
|
|
|
if _cecg !=nil {return nil ,nil ,_d .Wrap (_cecg ,_ebge ,"");};_bedf ,_cecg =_bedf .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _cecg !=nil {return nil ,nil ,_d .Wrap (_cecg ,_ebge ,"");};return _fbbg ,_bedf ,nil ;};const (SelDontCare SelectionValue =iota ;
|
|
|
|
SelHit ;SelMiss ;);func (_ecb *Bitmap )Copy ()*Bitmap {_ebfe :=make ([]byte ,len (_ecb .Data ));copy (_ebfe ,_ecb .Data );return &Bitmap {Width :_ecb .Width ,Height :_ecb .Height ,RowStride :_ecb .RowStride ,Data :_ebfe ,Color :_ecb .Color ,Text :_ecb .Text ,BitmapNumber :_ecb .BitmapNumber ,Special :_ecb .Special };
|
|
|
|
};func _fade (_eebg *_be .Stack ,_dcec ,_bag ,_ccabg ,_bfee ,_dbba int ,_efeag *_ea .Rectangle )(_dacb error ){const _cgg ="\u0070\u0075\u0073\u0068\u0046\u0069\u006c\u006c\u0053\u0065\u0067m\u0065\u006e\u0074\u0042\u006f\u0075\u006e\u0064\u0069\u006eg\u0042\u006f\u0078";
|
|
|
|
if _eebg ==nil {return _d .Error (_cgg ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _efeag ==nil {return _d .Error (_cgg ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
|
|
|
|
};_efeag .Min .X =_be .Min (_efeag .Min .X ,_dcec );_efeag .Max .X =_be .Max (_efeag .Max .X ,_bag );_efeag .Min .Y =_be .Min (_efeag .Min .Y ,_ccabg );_efeag .Max .Y =_be .Max (_efeag .Max .Y ,_ccabg );if !(_ccabg +_bfee >=0&&_ccabg +_bfee <=_dbba ){return nil ;
|
|
|
|
};if _eebg .Aux ==nil {return _d .Error (_cgg ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _bgbef *fillSegment ;_bccgc ,_dddgf :=_eebg .Aux .Pop ();if _dddgf {if _bgbef ,_dddgf =_bccgc .(*fillSegment );
|
|
|
|
!_dddgf {return _d .Error (_cgg ,"a\u0075\u0078\u0053\u0074\u0061\u0063k\u0020\u0064\u0061\u0074\u0061\u0020i\u0073\u0020\u006e\u006f\u0074\u0020\u0061 \u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065n\u0074");};}else {_bgbef =&fillSegment {};
|
|
|
|
};_bgbef ._gfade =_dcec ;_bgbef ._afag =_bag ;_bgbef ._fffcbb =_ccabg ;_bgbef ._aaef =_bfee ;_eebg .Push (_bgbef );return nil ;};func (_gddda *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _fbdb ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";
|
|
|
|
if _gddda ==nil {return nil ,_d .Error (_fbdb ,"p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074m\u0061\u0070\u0073A\u0072r\u0061\u0079\u0027");};if i > len (_gddda .Values )-1{return nil ,_d .Errorf (_fbdb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
|
|
};return _gddda .Values [i ],nil ;};func _gdgf (_bgeaf ,_bgce *Bitmap ,_bfeg ,_ebfg int )(*Bitmap ,error ){const _dfcad ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _bgce ==nil {_g .Log .Debug ("\u0064\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063k\u0020\u0073\u006f\u0075\u0072\u0063\u0065 \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
return nil ,_d .Error (_dfcad ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _bfeg < 1||_ebfg < 1{return nil ,_d .Error (_dfcad ,"\u0068\u0053\u007a\u0069\u0065 \u0061\u006e\u0064\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u0061\u0072\u0065 \u006e\u006f\u0020\u0067\u0072\u0065\u0061\u0074\u0065\u0072\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0031");
|
|
|
|
};if _bfeg ==1&&_ebfg ==1{_acbe ,_bedb :=_fcdg (_bgeaf ,_bgce );if _bedb !=nil {return nil ,_d .Wrap (_bedb ,_dfcad ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
|
|
};return _acbe ,nil ;};if _bfeg ==1||_ebfg ==1{_gdec :=SelCreateBrick (_ebfg ,_bfeg ,_ebfg /2,_bfeg /2,SelHit );_ccgce ,_aaga :=_gbeg (_bgeaf ,_bgce ,_gdec );if _aaga !=nil {return nil ,_d .Wrap (_aaga ,_dfcad ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
|
|
};return _ccgce ,nil ;};_bgbc :=SelCreateBrick (1,_bfeg ,0,_bfeg /2,SelHit );_fagge :=SelCreateBrick (_ebfg ,1,_ebfg /2,0,SelHit );_gdgb ,_defg :=_gbeg (nil ,_bgce ,_bgbc );if _defg !=nil {return nil ,_d .Wrap (_defg ,_dfcad ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
|
|
};_bgeaf ,_defg =_gbeg (_bgeaf ,_gdgb ,_fagge );if _defg !=nil {return nil ,_d .Wrap (_defg ,_dfcad ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _bgeaf ,nil ;};func _aded (_ecaf *Bitmap ,_bgdb ,_bcda int ,_fead ,_eeaf int ,_acab RasterOperator ,_dfcf *Bitmap ,_dgcb ,_facc int )error {var _aafc ,_gbbc ,_cafc ,_bcgf int ;
|
|
|
|
if _bgdb < 0{_dgcb -=_bgdb ;_fead +=_bgdb ;_bgdb =0;};if _dgcb < 0{_bgdb -=_dgcb ;_fead +=_dgcb ;_dgcb =0;};_aafc =_bgdb +_fead -_ecaf .Width ;if _aafc > 0{_fead -=_aafc ;};_gbbc =_dgcb +_fead -_dfcf .Width ;if _gbbc > 0{_fead -=_gbbc ;};if _bcda < 0{_facc -=_bcda ;
|
|
|
|
_eeaf +=_bcda ;_bcda =0;};if _facc < 0{_bcda -=_facc ;_eeaf +=_facc ;_facc =0;};_cafc =_bcda +_eeaf -_ecaf .Height ;if _cafc > 0{_eeaf -=_cafc ;};_bcgf =_facc +_eeaf -_dfcf .Height ;if _bcgf > 0{_eeaf -=_bcgf ;};if _fead <=0||_eeaf <=0{return nil ;};var _cfdeb error ;
|
|
|
|
switch {case _bgdb &7==0&&_dgcb &7==0:_cfdeb =_abac (_ecaf ,_bgdb ,_bcda ,_fead ,_eeaf ,_acab ,_dfcf ,_dgcb ,_facc );case _bgdb &7==_dgcb &7:_cfdeb =_bccb (_ecaf ,_bgdb ,_bcda ,_fead ,_eeaf ,_acab ,_dfcf ,_dgcb ,_facc );default:_cfdeb =_aeeb (_ecaf ,_bgdb ,_bcda ,_fead ,_eeaf ,_acab ,_dfcf ,_dgcb ,_facc );
|
|
|
|
};if _cfdeb !=nil {return _d .Wrap (_cfdeb ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func TstWSymbol (t *_dd .T ,scale ...int )*Bitmap {_dfga ,_ccbab :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_f .NoError (t ,_ccbab );
|
|
|
|
return TstGetScaledSymbol (t ,_dfga ,scale ...);};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _aecd ="C\u006f\u0072\u0072\u0065\u006c\u0061t\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054h\u0072\u0065\u0073h\u006fl\u0064\u0065\u0064";
|
|
|
|
if bm1 ==nil {return false ,_d .Error (_aecd ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d1\u0020\u0069s\u0020\u006e\u0069\u006c");
|
|
|
|
};if bm2 ==nil {return false ,_d .Error (_aecd ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d2\u0020\u0069s\u0020\u006e\u0069\u006c");
|
|
|
|
};if area1 <=0||area2 <=0{return false ,_d .Error (_aecd ,"c\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006fn\u0053\u0063\u006f\u0072\u0065\u0054\u0068re\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u002d\u0020\u0061\u0072\u0065\u0061s \u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u003e\u0020\u0030");
|
|
|
|
};if downcount ==nil {return false ,_d .Error (_aecd ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u006f\u0020\u0027\u0064\u006f\u0077\u006e\u0063\u006f\u0075\u006e\u0074\u0027");};if tab ==nil {return false ,_d .Error (_aecd ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
|
|
|
|
};_debg ,_bdgfc :=bm1 .Width ,bm1 .Height ;_dfdf ,_dcbd :=bm2 .Width ,bm2 .Height ;if _be .Abs (_debg -_dfdf )> maxDiffW {return false ,nil ;};if _be .Abs (_bdgfc -_dcbd )> maxDiffH {return false ,nil ;};_efea :=int (delX +_be .Sign (delX )*0.5);_eca :=int (delY +_be .Sign (delY )*0.5);
|
|
|
|
_gfdd :=int (_ae .Ceil (_ae .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_dgab :=bm2 .RowStride ;_faeb :=_gfa (_eca ,0);_agee :=_ecc (_dcbd +_eca ,_bdgfc );_abfff :=bm1 .RowStride *_faeb ;_cfge :=bm2 .RowStride *(_faeb -_eca );
|
|
|
|
var _aggb int ;if _agee <=_bdgfc {_aggb =downcount [_agee -1];};_bfada :=_gfa (_efea ,0);_gbcc :=_ecc (_dfdf +_efea ,_debg );var _ddef ,_bbbc int ;if _efea >=8{_ddef =_efea >>3;_abfff +=_ddef ;_bfada -=_ddef <<3;_gbcc -=_ddef <<3;_efea &=7;}else if _efea <=-8{_bbbc =-((_efea +7)>>3);
|
|
|
|
_cfge +=_bbbc ;_dgab -=_bbbc ;_efea +=_bbbc <<3;};var (_cbecg ,_gacg ,_bbad int ;_bbee ,_dfed ,_adbg byte ;);if _bfada >=_gbcc ||_faeb >=_agee {return false ,nil ;};_ecdga :=(_gbcc +7)>>3;switch {case _efea ==0:for _gacg =_faeb ;_gacg < _agee ;_gacg ,_abfff ,_cfge =_gacg +1,_abfff +bm1 .RowStride ,_cfge +bm2 .RowStride {for _bbad =0;
|
|
|
|
_bbad < _ecdga ;_bbad ++{_bbee =bm1 .Data [_abfff +_bbad ]&bm2 .Data [_cfge +_bbad ];_cbecg +=tab [_bbee ];};if _cbecg >=_gfdd {return true ,nil ;};if _faa :=_cbecg +downcount [_gacg ]-_aggb ;_faa < _gfdd {return false ,nil ;};};case _efea > 0&&_dgab < _ecdga :for _gacg =_faeb ;
|
|
|
|
_gacg < _agee ;_gacg ,_abfff ,_cfge =_gacg +1,_abfff +bm1 .RowStride ,_cfge +bm2 .RowStride {_dfed =bm1 .Data [_abfff ];_adbg =bm2 .Data [_cfge ]>>uint (_efea );_bbee =_dfed &_adbg ;_cbecg +=tab [_bbee ];for _bbad =1;_bbad < _dgab ;_bbad ++{_dfed =bm1 .Data [_abfff +_bbad ];
|
|
|
|
_adbg =bm2 .Data [_cfge +_bbad ]>>uint (_efea )|bm2 .Data [_cfge +_bbad -1]<<uint (8-_efea );_bbee =_dfed &_adbg ;_cbecg +=tab [_bbee ];};_dfed =bm1 .Data [_abfff +_bbad ];_adbg =bm2 .Data [_cfge +_bbad -1]<<uint (8-_efea );_bbee =_dfed &_adbg ;_cbecg +=tab [_bbee ];
|
|
|
|
if _cbecg >=_gfdd {return true ,nil ;}else if _cbecg +downcount [_gacg ]-_aggb < _gfdd {return false ,nil ;};};case _efea > 0&&_dgab >=_ecdga :for _gacg =_faeb ;_gacg < _agee ;_gacg ,_abfff ,_cfge =_gacg +1,_abfff +bm1 .RowStride ,_cfge +bm2 .RowStride {_dfed =bm1 .Data [_abfff ];
|
|
|
|
_adbg =bm2 .Data [_cfge ]>>uint (_efea );_bbee =_dfed &_adbg ;_cbecg +=tab [_bbee ];for _bbad =1;_bbad < _ecdga ;_bbad ++{_dfed =bm1 .Data [_abfff +_bbad ];_adbg =bm2 .Data [_cfge +_bbad ]>>uint (_efea );_adbg |=bm2 .Data [_cfge +_bbad -1]<<uint (8-_efea );
|
|
|
|
_bbee =_dfed &_adbg ;_cbecg +=tab [_bbee ];};if _cbecg >=_gfdd {return true ,nil ;}else if _cbecg +downcount [_gacg ]-_aggb < _gfdd {return false ,nil ;};};case _ecdga < _dgab :for _gacg =_faeb ;_gacg < _agee ;_gacg ,_abfff ,_cfge =_gacg +1,_abfff +bm1 .RowStride ,_cfge +bm2 .RowStride {for _bbad =0;
|
|
|
|
_bbad < _ecdga ;_bbad ++{_dfed =bm1 .Data [_abfff +_bbad ];_adbg =bm2 .Data [_cfge +_bbad ]<<uint (-_efea );_adbg |=bm2 .Data [_cfge +_bbad +1]>>uint (8+_efea );_bbee =_dfed &_adbg ;_cbecg +=tab [_bbee ];};if _cbecg >=_gfdd {return true ,nil ;}else if _aebf :=_cbecg +downcount [_gacg ]-_aggb ;
|
|
|
|
_aebf < _gfdd {return false ,nil ;};};case _dgab >=_ecdga :for _gacg =_faeb ;_gacg < _agee ;_gacg ,_abfff ,_cfge =_gacg +1,_abfff +bm1 .RowStride ,_cfge +bm2 .RowStride {for _bbad =0;_bbad < _ecdga ;_bbad ++{_dfed =bm1 .Data [_abfff +_bbad ];_adbg =bm2 .Data [_cfge +_bbad ]<<uint (-_efea );
|
|
|
|
_adbg |=bm2 .Data [_cfge +_bbad +1]>>uint (8+_efea );_bbee =_dfed &_adbg ;_cbecg +=tab [_bbee ];};_dfed =bm1 .Data [_abfff +_bbad ];_adbg =bm2 .Data [_cfge +_bbad ]<<uint (-_efea );_bbee =_dfed &_adbg ;_cbecg +=tab [_bbee ];if _cbecg >=_gfdd {return true ,nil ;
|
|
|
|
}else if _cbecg +downcount [_gacg ]-_aggb < _gfdd {return false ,nil ;};};};_bcaa :=float32 (_cbecg )*float32 (_cbecg )/(float32 (area1 )*float32 (area2 ));if _bcaa >=scoreThreshold {_g .Log .Trace ("\u0063\u006f\u0075\u006e\u0074\u003a\u0020\u0025\u0064\u0020\u003c\u0020\u0074\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0020\u0025\u0064\u0020\u0062\u0075\u0074\u0020\u0073c\u006f\u0072\u0065\u0020\u0025\u0066\u0020\u003e\u003d\u0020\u0073\u0063\u006fr\u0065\u0054\u0068\u0072\u0065\u0073h\u006f\u006c\u0064 \u0025\u0066",_cbecg ,_gfdd ,_bcaa ,scoreThreshold );
|
|
|
|
};return false ,nil ;};func _ebga (_abdd ,_cabdd *Bitmap ,_dgd ,_cafdg int )(*Bitmap ,error ){const _fdda ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _cabdd ==nil {return nil ,_d .Error (_fdda ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
|
|
|
|
};if _dgd < 1&&_cafdg < 1{return nil ,_d .Error (_fdda ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _dgd ==1&&_cafdg ==1{return _cabdd .Copy (),nil ;};if _dgd ==1||_cafdg ==1{var _gfcb error ;
|
|
|
|
_gafc :=SelCreateBrick (_cafdg ,_dgd ,_cafdg /2,_dgd /2,SelHit );_abdd ,_gfcb =_efg (_abdd ,_cabdd ,_gafc );if _gfcb !=nil {return nil ,_d .Wrap (_gfcb ,_fdda ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
|
|
};return _abdd ,nil ;};_eaac :=SelCreateBrick (1,_dgd ,0,_dgd /2,SelHit );_cafdd :=SelCreateBrick (_cafdg ,1,_cafdg /2,0,SelHit );_bdac ,_dee :=_ccff (nil ,_cabdd ,_eaac );if _dee !=nil {return nil ,_d .Wrap (_dee ,_fdda ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
|
|
};_abdd ,_dee =_ccff (_abdd ,_bdac ,_cafdd );if _dee !=nil {return nil ,_d .Wrap (_dee ,_fdda ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_dee =_gbeg (_bdac ,_abdd ,_eaac );if _dee !=nil {return nil ,_d .Wrap (_dee ,_fdda ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
|
|
};_ ,_dee =_gbeg (_abdd ,_bdac ,_cafdd );if _dee !=nil {return nil ,_d .Wrap (_dee ,_fdda ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _abdd ,nil ;};func (_fcd *Bitmap )GetByte (index int )(byte ,error ){if index > len (_fcd .Data )-1||index < 0{return 0,_d .Errorf ("\u0047e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",index );
|
|
|
|
};return _fcd .Data [index ],nil ;};func TstRSymbol (t *_dd .T ,scale ...int )*Bitmap {_bcdc ,_acbc :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_f .NoError (t ,_acbc );return TstGetScaledSymbol (t ,_bcdc ,scale ...);};func TstPSymbol (t *_dd .T )*Bitmap {t .Helper ();
|
|
|
|
_dacc :=New (5,8);_f .NoError (t ,_dacc .SetPixel (0,0,1));_f .NoError (t ,_dacc .SetPixel (1,0,1));_f .NoError (t ,_dacc .SetPixel (2,0,1));_f .NoError (t ,_dacc .SetPixel (3,0,1));_f .NoError (t ,_dacc .SetPixel (4,1,1));_f .NoError (t ,_dacc .SetPixel (0,1,1));
|
|
|
|
_f .NoError (t ,_dacc .SetPixel (4,2,1));_f .NoError (t ,_dacc .SetPixel (0,2,1));_f .NoError (t ,_dacc .SetPixel (4,3,1));_f .NoError (t ,_dacc .SetPixel (0,3,1));_f .NoError (t ,_dacc .SetPixel (0,4,1));_f .NoError (t ,_dacc .SetPixel (1,4,1));_f .NoError (t ,_dacc .SetPixel (2,4,1));
|
|
|
|
_f .NoError (t ,_dacc .SetPixel (3,4,1));_f .NoError (t ,_dacc .SetPixel (0,5,1));_f .NoError (t ,_dacc .SetPixel (0,6,1));_f .NoError (t ,_dacc .SetPixel (0,7,1));return _dacc ;};func _dfda ()[]int {_dgebd :=make ([]int ,256);_dgebd [0]=0;_dgebd [1]=7;
|
|
|
|
var _eeedc int ;for _eeedc =2;_eeedc < 4;_eeedc ++{_dgebd [_eeedc ]=_dgebd [_eeedc -2]+6;};for _eeedc =4;_eeedc < 8;_eeedc ++{_dgebd [_eeedc ]=_dgebd [_eeedc -4]+5;};for _eeedc =8;_eeedc < 16;_eeedc ++{_dgebd [_eeedc ]=_dgebd [_eeedc -8]+4;};for _eeedc =16;
|
|
|
|
_eeedc < 32;_eeedc ++{_dgebd [_eeedc ]=_dgebd [_eeedc -16]+3;};for _eeedc =32;_eeedc < 64;_eeedc ++{_dgebd [_eeedc ]=_dgebd [_eeedc -32]+2;};for _eeedc =64;_eeedc < 128;_eeedc ++{_dgebd [_eeedc ]=_dgebd [_eeedc -64]+1;};for _eeedc =128;_eeedc < 256;_eeedc ++{_dgebd [_eeedc ]=_dgebd [_eeedc -128];
|
|
|
|
};return _dgebd ;};func (_cfbf *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_cfbf .Width ,Height :_cfbf .Height ,RowStride :_cfbf .RowStride ,Color :_cfbf .Color ,Text :_cfbf .Text ,BitmapNumber :_cfbf .BitmapNumber ,Special :_cfbf .Special ,Data :make ([]byte ,len (_cfbf .Data ))};
|
|
|
|
};func (_aaf *Bitmap )GetVanillaData ()[]byte {if _aaf .Color ==Chocolate {_aaf .inverseData ();};return _aaf .Data ;};func (_dcdf *Boxes )makeSizeIndicator (_cadg ,_effg int ,_fae LocationFilter ,_bfa SizeComparison )*_be .NumSlice {_cacbe :=&_be .NumSlice {};
|
|
|
|
var _cdea ,_cacf ,_gggf int ;for _ ,_edb :=range *_dcdf {_cdea =0;_cacf ,_gggf =_edb .Dx (),_edb .Dy ();switch _fae {case LocSelectWidth :if (_bfa ==SizeSelectIfLT &&_cacf < _cadg )||(_bfa ==SizeSelectIfGT &&_cacf > _cadg )||(_bfa ==SizeSelectIfLTE &&_cacf <=_cadg )||(_bfa ==SizeSelectIfGTE &&_cacf >=_cadg ){_cdea =1;
|
|
|
|
};case LocSelectHeight :if (_bfa ==SizeSelectIfLT &&_gggf < _effg )||(_bfa ==SizeSelectIfGT &&_gggf > _effg )||(_bfa ==SizeSelectIfLTE &&_gggf <=_effg )||(_bfa ==SizeSelectIfGTE &&_gggf >=_effg ){_cdea =1;};case LocSelectIfEither :if (_bfa ==SizeSelectIfLT &&(_gggf < _effg ||_cacf < _cadg ))||(_bfa ==SizeSelectIfGT &&(_gggf > _effg ||_cacf > _cadg ))||(_bfa ==SizeSelectIfLTE &&(_gggf <=_effg ||_cacf <=_cadg ))||(_bfa ==SizeSelectIfGTE &&(_gggf >=_effg ||_cacf >=_cadg )){_cdea =1;
|
|
|
|
};case LocSelectIfBoth :if (_bfa ==SizeSelectIfLT &&(_gggf < _effg &&_cacf < _cadg ))||(_bfa ==SizeSelectIfGT &&(_gggf > _effg &&_cacf > _cadg ))||(_bfa ==SizeSelectIfLTE &&(_gggf <=_effg &&_cacf <=_cadg ))||(_bfa ==SizeSelectIfGTE &&(_gggf >=_effg &&_cacf >=_cadg )){_cdea =1;
|
|
|
|
};};_cacbe .AddInt (_cdea );};return _cacbe ;};func TstWordBitmapWithSpaces (t *_dd .T ,scale ...int )*Bitmap {_ggec :=1;if len (scale )> 0{_ggec =scale [0];};_gedg :=3;_cgbe :=9+7+15+2*_gedg +2*_gedg ;_eeba :=5+_gedg +5+2*_gedg ;_cgcdf :=New (_cgbe *_ggec ,_eeba *_ggec );
|
|
|
|
_eefbg :=&Bitmaps {};var _dgffc *int ;_gedg *=_ggec ;_gdgcc :=_gedg ;_dgffc =&_gdgcc ;_bbeaf :=_gedg ;_gbaaa :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,1*_ggec );_gbaaa =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,_gedg );
|
|
|
|
_gbaaa =TstISymbol (t ,scale ...);TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,1*_ggec );_gbaaa =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,_gedg );_gbaaa =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,1*_ggec );
|
|
|
|
_gbaaa =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,1*_ggec );_gbaaa =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,0);*_dgffc =_gedg ;_bbeaf =5*_ggec +_gedg ;_gbaaa =TstOSymbol (t ,scale ...);
|
|
|
|
TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,1*_ggec );_gbaaa =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,_gedg );_gbaaa =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,1*_ggec );_gbaaa =TstESymbol (t ,scale ...);
|
|
|
|
TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,1*_ggec );_gbaaa =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,1*_ggec );_gbaaa =TstESymbol (t ,scale ...);TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,1*_ggec );_gbaaa =TstRSymbol (t ,scale ...);
|
|
|
|
TstAddSymbol (t ,_eefbg ,_gbaaa ,_dgffc ,_bbeaf ,0);TstWriteSymbols (t ,_eefbg ,_cgcdf );return _cgcdf ;};func (_ebgg *Bitmaps )selectByIndexes (_gbdbe []int )(*Bitmaps ,error ){_gecg :=&Bitmaps {};for _ ,_cfba :=range _gbdbe {_dfacf ,_effac :=_ebgg .GetBitmap (_cfba );
|
|
|
|
if _effac !=nil {return nil ,_d .Wrap (_effac ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_gecg .AddBitmap (_dfacf );};return _gecg ,nil ;};func (_abdc *Selection )findMaxTranslations ()(_baeg ,_cbgb ,_bcgeg ,_egace int ){for _fgaee :=0;
|
|
|
|
_fgaee < _abdc .Height ;_fgaee ++{for _bafg :=0;_bafg < _abdc .Width ;_bafg ++{if _abdc .Data [_fgaee ][_bafg ]==SelHit {_baeg =_gfa (_baeg ,_abdc .Cx -_bafg );_cbgb =_gfa (_cbgb ,_abdc .Cy -_fgaee );_bcgeg =_gfa (_bcgeg ,_bafg -_abdc .Cx );_egace =_gfa (_egace ,_fgaee -_abdc .Cy );
|
|
|
|
};};};return _baeg ,_cbgb ,_bcgeg ,_egace ;};func (_bgf *Bitmaps )SortByWidth (){_ecga :=(*byWidth )(_bgf );_de .Sort (_ecga )};func (_fdgb *Bitmap )ToImage ()_ea .Image {_ggee ,_aeg :=_a .NewImage (_fdgb .Width ,_fdgb .Height ,1,1,_fdgb .Data ,nil ,nil );
|
|
|
|
if _aeg !=nil {_g .Log .Error ("\u0043\u006f\u006e\u0076\u0065\u0072\u0074\u0069\u006e\u0067\u0020j\u0062\u0069\u0067\u0032\u002e\u0042\u0069\u0074m\u0061p\u0020\u0074\u006f\u0020\u0069\u006d\u0061\u0067\u0065\u0075\u0074\u0069\u006c\u002e\u0049\u006d\u0061\u0067e\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_aeg );
|
|
|
|
};return _ggee ;};func (_aefa *Bitmap )GetBitOffset (x int )int {return x &0x07};func (_bcga *Boxes )Get (i int )(*_ea .Rectangle ,error ){const _bfe ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _bcga ==nil {return nil ,_d .Error (_bfe ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
};if i > len (*_bcga )-1{return nil ,_d .Errorf (_bfe ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_bcga )[i ],nil ;};func (_cabb Points )XSorter ()func (_gfda ,_bgeaa int )bool {return func (_gcbe ,_gddd int )bool {return _cabb [_gcbe ].X < _cabb [_gddd ].X };
|
|
|
|
};type byHeight Bitmaps ;const _gdef =5000;func (_aaab *ClassedPoints )XAtIndex (i int )float32 {return (*_aaab .Points )[_aaab .IntSlice [i ]].X };func (_dfba *Bitmap )ClipRectangle (box *_ea .Rectangle )(_ccga *Bitmap ,_gfb *_ea .Rectangle ,_gfgg error ){const _eeeb ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
|
|
|
|
if box ==nil {return nil ,nil ,_d .Error (_eeeb ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_gec ,_fccc :=_dfba .Width ,_dfba .Height ;_eece :=_ea .Rect (0,0,_gec ,_fccc );if !box .Overlaps (_eece ){return nil ,nil ,_d .Error (_eeeb ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");
|
|
|
|
};_cfef :=box .Intersect (_eece );_dga ,_cgc :=_cfef .Min .X ,_cfef .Min .Y ;_cdbf ,_dbea :=_cfef .Dx (),_cfef .Dy ();_ccga =New (_cdbf ,_dbea );_ccga .Text =_dfba .Text ;if _gfgg =_ccga .RasterOperation (0,0,_cdbf ,_dbea ,PixSrc ,_dfba ,_dga ,_cgc );_gfgg !=nil {return nil ,nil ,_d .Wrap (_gfgg ,_eeeb ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
|
|
|
|
};_gfb =&_cfef ;return _ccga ,_gfb ,nil ;};func _bgb ()(_efe [256]uint16 ){for _fac :=0;_fac < 256;_fac ++{if _fac &0x01!=0{_efe [_fac ]|=0x3;};if _fac &0x02!=0{_efe [_fac ]|=0xc;};if _fac &0x04!=0{_efe [_fac ]|=0x30;};if _fac &0x08!=0{_efe [_fac ]|=0xc0;
|
|
|
|
};if _fac &0x10!=0{_efe [_fac ]|=0x300;};if _fac &0x20!=0{_efe [_fac ]|=0xc00;};if _fac &0x40!=0{_efe [_fac ]|=0x3000;};if _fac &0x80!=0{_efe [_fac ]|=0xc000;};};return _efe ;};func (_dddc *Bitmap )GetPixel (x ,y int )bool {_feb :=_dddc .GetByteIndex (x ,y );
|
|
|
|
_fea :=_dddc .GetBitOffset (x );_abae :=uint (7-_fea );if _feb > len (_dddc .Data )-1{_g .Log .Debug ("\u0054\u0072\u0079\u0069\u006e\u0067\u0020\u0074\u006f\u0020\u0067\u0065\u0074\u0020\u0070\u0069\u0078\u0065\u006c\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0064\u0061\u0074\u0061\u0020\u0072\u0061\u006e\u0067\u0065\u002e \u0078\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0079\u003a\u0027\u0025\u0064'\u002c\u0020\u0062m\u003a\u0020\u0027\u0025\u0073\u0027",x ,y ,_dddc );
|
|
|
|
return false ;};if (_dddc .Data [_feb ]>>_abae )&0x01>=1{return true ;};return false ;};func (_cacbd *Bitmap )InverseData (){_cacbd .inverseData ()};func (_gcef *byHeight )Swap (i ,j int ){_gcef .Values [i ],_gcef .Values [j ]=_gcef .Values [j ],_gcef .Values [i ];
|
|
|
|
if _gcef .Boxes !=nil {_gcef .Boxes [i ],_gcef .Boxes [j ]=_gcef .Boxes [j ],_gcef .Boxes [i ];};};func TstImageBitmapInverseData ()[]byte {_deff :=_gbfac .Copy ();_deff .InverseData ();return _deff .Data ;};func _cgb (_fad *Bitmap ,_gac *Bitmap ,_agg int )(_gga error ){const _bbe ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";
|
|
|
|
switch _agg {case 2:_gga =_ddg (_fad ,_gac );case 4:_gga =_db (_fad ,_gac );case 8:_gga =_ff (_fad ,_gac );default:return _d .Error (_bbe ,"\u0065\u0078p\u0061\u006e\u0073\u0069o\u006e\u0020f\u0061\u0063\u0074\u006f\u0072\u0020\u006e\u006ft\u0020\u0069\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020r\u0061\u006e\u0067\u0065");
|
|
|
|
};if _gga !=nil {_gga =_d .Wrap (_gga ,_bbe ,"");};return _gga ;};func (_dffc *BitmapsArray )AddBitmaps (bm *Bitmaps ){_dffc .Values =append (_dffc .Values ,bm )};func TstNSymbol (t *_dd .T ,scale ...int )*Bitmap {_aebcb ,_gdaae :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});
|
|
|
|
_f .NoError (t ,_gdaae );return TstGetScaledSymbol (t ,_aebcb ,scale ...);};type RasterOperator int ;func (_bfcf *ClassedPoints )YAtIndex (i int )float32 {return (*_bfcf .Points )[_bfcf .IntSlice [i ]].Y };func _bd (_bca *Bitmap ,_gad int ,_bff []byte )(_acf *Bitmap ,_bbc error ){const _ggc ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";
|
|
|
|
if _bca ==nil {return nil ,_d .Error (_ggc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _gad < 1||_gad > 4{return nil ,_d .Error (_ggc ,"\u006c\u0065\u0076\u0065\u006c\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0069\u006e\u0020\u0073e\u0074\u0020\u007b\u0031\u002c\u0032\u002c\u0033\u002c\u0034\u007d");
|
|
|
|
};if _bca .Height <=1{return nil ,_d .Errorf (_ggc ,"\u0073o\u0075\u0072c\u0065\u0020\u0068e\u0069\u0067\u0068\u0074\u0020\u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u0061t\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0027\u0032\u0027\u0020-\u0020\u0069\u0073\u003a\u0020\u0027\u0025\u0064\u0027",_bca .Height );
|
|
|
|
};_acf =New (_bca .Width /2,_bca .Height /2);if _bff ==nil {_bff =_ddd ();};_afb :=_ecc (_bca .RowStride ,2*_acf .RowStride );switch _gad {case 1:_bbc =_bbea (_bca ,_acf ,_gad ,_bff ,_afb );case 2:_bbc =_ebg (_bca ,_acf ,_gad ,_bff ,_afb );case 3:_bbc =_dcf (_bca ,_acf ,_gad ,_bff ,_afb );
|
|
|
|
case 4:_bbc =_gacd (_bca ,_acf ,_gad ,_bff ,_afb );};if _bbc !=nil {return nil ,_bbc ;};return _acf ,nil ;};func (_bffc *Bitmap )CreateTemplate ()*Bitmap {return _bffc .createTemplate ()};func (_gcbb *Boxes )Add (box *_ea .Rectangle )error {if _gcbb ==nil {return _d .Error ("\u0042o\u0078\u0065\u0073\u002e\u0041\u0064d","\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
};*_gcbb =append (*_gcbb ,box );return nil ;};func (_bcdb *Boxes )selectWithIndicator (_dafe *_be .NumSlice )(_gadcf *Boxes ,_cfg error ){const _cdca ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
|
|
if _bcdb ==nil {return nil ,_d .Error (_cdca ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _dafe ==nil {return nil ,_d .Error (_cdca ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
};if len (*_dafe )!=len (*_bcdb ){return nil ,_d .Error (_cdca ,"\u0062\u006f\u0078\u0065\u0073\u0020\u0027\u0062\u0027\u0020\u0068\u0061\u0073\u0020\u0064\u0069\u0066\u0066\u0065\u0072\u0065\u006e\u0074\u0020s\u0069\u007a\u0065\u0020\u0074h\u0061\u006e \u0027\u006e\u0061\u0027");
|
|
|
|
};var _cfdf ,_deac int ;for _aca :=0;_aca < len (*_dafe );_aca ++{if _cfdf ,_cfg =_dafe .GetInt (_aca );_cfg !=nil {return nil ,_d .Wrap (_cfg ,_cdca ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _cfdf ==1{_deac ++;
|
|
|
|
};};if _deac ==len (*_bcdb ){return _bcdb ,nil ;};_bged :=Boxes {};for _cfgc :=0;_cfgc < len (*_dafe );_cfgc ++{_cfdf =int ((*_dafe )[_cfgc ]);if _cfdf ==0{continue ;};_bged =append (_bged ,(*_bcdb )[_cfgc ]);};_gadcf =&_bged ;return _gadcf ,nil ;};func _ddg (_fa ,_da *Bitmap )(_gg error ){const _gd ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";
|
|
|
|
_cd :=_da .RowStride ;_fg :=_fa .RowStride ;var (_cdb byte ;_bf uint16 ;_eab ,_ddf ,_cdg ,_ba ,_cf int ;);for _cdg =0;_cdg < _da .Height ;_cdg ++{_eab =_cdg *_cd ;_ddf =2*_cdg *_fg ;for _ba =0;_ba < _cd ;_ba ++{_cdb =_da .Data [_eab +_ba ];_bf =_fcec [_cdb ];
|
|
|
|
_cf =_ddf +_ba *2;if _fa .RowStride !=_da .RowStride *2&&(_ba +1)*2> _fa .RowStride {_gg =_fa .SetByte (_cf ,byte (_bf >>8));}else {_gg =_fa .setTwoBytes (_cf ,_bf );};if _gg !=nil {return _d .Wrap (_gg ,_gd ,"");};};for _ba =0;_ba < _fg ;_ba ++{_cf =_ddf +_fg +_ba ;
|
|
|
|
_cdb =_fa .Data [_ddf +_ba ];if _gg =_fa .SetByte (_cf ,_cdb );_gg !=nil {return _d .Wrapf (_gg ,_gd ,"c\u006f\u0070\u0079\u0020\u0064\u006fu\u0062\u006c\u0065\u0064\u0020\u006ci\u006e\u0065\u003a\u0020\u0027\u0025\u0064'\u002c\u0020\u0042\u0079\u0074\u0065\u003a\u0020\u0027\u0025d\u0027",_ddf +_ba ,_ddf +_fg +_ba );
|
|
|
|
};};};return nil ;};func _fdgg (_degb int )int {if _degb < 0{return -_degb ;};return _degb ;};func (_fgga *Bitmaps )selectByIndicator (_geaff *_be .NumSlice )(_bgfa *Bitmaps ,_bggc error ){const _cbbda ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
|
|
if _fgga ==nil {return nil ,_d .Error (_cbbda ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _geaff ==nil {return nil ,_d .Error (_cbbda ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
|
|
|
|
};if len (_fgga .Values )==0{return _fgga ,nil ;};if len (*_geaff )!=len (_fgga .Values ){return nil ,_d .Errorf (_cbbda ,"\u006ea\u0020\u006ce\u006e\u0067\u0074\u0068:\u0020\u0025\u0064,\u0020\u0069\u0073\u0020\u0064\u0069\u0066\u0066\u0065re\u006e\u0074\u0020t\u0068\u0061n\u0020\u0062\u0069\u0074\u006d\u0061p\u0073\u003a \u0025\u0064",len (*_geaff ),len (_fgga .Values ));
|
|
|
|
};var _eacd ,_cfcb ,_bgbb int ;for _cfcb =0;_cfcb < len (*_geaff );_cfcb ++{if _eacd ,_bggc =_geaff .GetInt (_cfcb );_bggc !=nil {return nil ,_d .Wrap (_bggc ,_cbbda ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _eacd ==1{_bgbb ++;
|
|
|
|
};};if _bgbb ==len (_fgga .Values ){return _fgga ,nil ;};_bgfa =&Bitmaps {};_fdce :=len (_fgga .Values )==len (_fgga .Boxes );for _cfcb =0;_cfcb < len (*_geaff );_cfcb ++{if _eacd =int ((*_geaff )[_cfcb ]);_eacd ==0{continue ;};_bgfa .Values =append (_bgfa .Values ,_fgga .Values [_cfcb ]);
|
|
|
|
if _fdce {_bgfa .Boxes =append (_bgfa .Boxes ,_fgga .Boxes [_cfcb ]);};};return _bgfa ,nil ;};func _defb (_eggb ,_aaad *Bitmap ,_ffad ,_daff int )(*Bitmap ,error ){const _cedd ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";
|
|
|
|
if _aaad ==nil {return nil ,_d .Error (_cedd ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ffad < 1||_daff < 1{return nil ,_d .Error (_cedd ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
|
|
|
|
};if _ffad ==1&&_daff ==1{return _fcdg (_eggb ,_aaad );};if MorphBC ==SymmetricMorphBC {_aee ,_cdbdf :=_degf (_eggb ,_aaad ,_ffad ,_daff );if _cdbdf !=nil {return nil ,_d .Wrap (_cdbdf ,_cedd ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");
|
|
|
|
};return _aee ,nil ;};_caag :=_gfa (_ffad /2,_daff /2);_ebgb :=8*((_caag +7)/8);_fage ,_fdd :=_aaad .AddBorder (_ebgb ,0);if _fdd !=nil {return nil ,_d .Wrapf (_fdd ,_cedd ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_ebgb );
|
|
|
|
};var _dgbae ,_fgeg *Bitmap ;if _ffad ==1||_daff ==1{_eeb :=SelCreateBrick (_daff ,_ffad ,_daff /2,_ffad /2,SelHit );_dgbae ,_fdd =_ccfa (nil ,_fage ,_eeb );if _fdd !=nil {return nil ,_d .Wrap (_fdd ,_cedd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
|
|
};}else {_bacd :=SelCreateBrick (1,_ffad ,0,_ffad /2,SelHit );_bfea ,_efbg :=_gbeg (nil ,_fage ,_bacd );if _efbg !=nil {return nil ,_d .Wrap (_efbg ,_cedd ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");
|
|
|
|
};_bfag :=SelCreateBrick (_daff ,1,_daff /2,0,SelHit );_dgbae ,_efbg =_gbeg (nil ,_bfea ,_bfag );if _efbg !=nil {return nil ,_d .Wrap (_efbg ,_cedd ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
|
|
};if _ ,_efbg =_ccff (_bfea ,_dgbae ,_bacd );_efbg !=nil {return nil ,_d .Wrap (_efbg ,_cedd ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_efbg =_ccff (_dgbae ,_bfea ,_bfag );_efbg !=nil {return nil ,_d .Wrap (_efbg ,_cedd ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
|
|
|
|
};};if _fgeg ,_fdd =_dgbae .RemoveBorder (_ebgb );_fdd !=nil {return nil ,_d .Wrap (_fdd ,_cedd ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _eggb ==nil {return _fgeg ,nil ;};if _ ,_fdd =_fcdg (_eggb ,_fgeg );_fdd !=nil {return nil ,_fdd ;};return _eggb ,nil ;
|
|
|
|
};func NewClassedPoints (points *Points ,classes _be .IntSlice )(*ClassedPoints ,error ){const _agea ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_d .Error (_agea ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");
|
|
|
|
};if classes ==nil {return nil ,_d .Error (_agea ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_geaf :=&ClassedPoints {Points :points ,IntSlice :classes };if _dggb :=_geaf .validateIntSlice ();_dggb !=nil {return nil ,_d .Wrap (_dggb ,_agea ,"");
|
|
|
|
};return _geaf ,nil ;};type byWidth Bitmaps ;func (_befgg *Bitmaps )HeightSorter ()func (_eggca ,_bbaab int )bool {return func (_gcaf ,_aeag int )bool {_cdgc :=_befgg .Values [_gcaf ].Height < _befgg .Values [_aeag ].Height ;_g .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_befgg .Values [_gcaf ].Height ,_befgg .Values [_aeag ].Height ,_cdgc );
|
|
|
|
return _cdgc ;};};func _degf (_befe ,_befa *Bitmap ,_cag ,_edec int )(*Bitmap ,error ){const _cacc ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _befa ==nil {return nil ,_d .Error (_cacc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
};if _cag < 1||_edec < 1{return nil ,_d .Error (_cacc ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _cag ==1&&_edec ==1{return _befa .Copy (),nil ;};if _cag ==1||_edec ==1{_ebae :=SelCreateBrick (_edec ,_cag ,_edec /2,_cag /2,SelHit );
|
|
|
|
var _gbcaa error ;_befe ,_gbcaa =_ccfa (_befe ,_befa ,_ebae );if _gbcaa !=nil {return nil ,_d .Wrap (_gbcaa ,_cacc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
|
|
};return _befe ,nil ;};_gcgb :=SelCreateBrick (1,_cag ,0,_cag /2,SelHit );_fdacg :=SelCreateBrick (_edec ,1,_edec /2,0,SelHit );_gacc ,_bfce :=_gbeg (nil ,_befa ,_gcgb );if _bfce !=nil {return nil ,_d .Wrap (_bfce ,_cacc ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
|
|
};if _befe ,_bfce =_gbeg (_befe ,_gacc ,_fdacg );_bfce !=nil {return nil ,_d .Wrap (_bfce ,_cacc ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_bfce =_ccff (_gacc ,_befe ,_gcgb );_bfce !=nil {return nil ,_d .Wrap (_bfce ,_cacc ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
|
|
};if _ ,_bfce =_ccff (_befe ,_gacc ,_fdacg );_bfce !=nil {return nil ,_d .Wrap (_bfce ,_cacc ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _befe ,nil ;};func _gabc (_ddgfc *Bitmap ,_fgdb ...MorphProcess )(_cfdbg *Bitmap ,_ddba error ){const _ddfgc ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";
|
|
|
|
if _ddgfc ==nil {return nil ,_d .Error (_ddfgc ,"\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065 \u0073\u006f\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
|
|
|
|
};if len (_fgdb )==0{return nil ,_d .Error (_ddfgc ,"m\u006f\u0072\u0070\u0068\u0053\u0065q\u0075\u0065\u006e\u0063\u0065\u002c \u0073\u0065\u0071\u0075\u0065\u006e\u0063e\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};if _ddba =_ecfd (_fgdb ...);
|
|
|
|
_ddba !=nil {return nil ,_d .Wrap (_ddba ,_ddfgc ,"");};var _agcf ,_fcbe ,_abed int ;_cfdbg =_ddgfc .Copy ();for _ ,_edecf :=range _fgdb {switch _edecf .Operation {case MopDilation :_agcf ,_fcbe =_edecf .getWidthHeight ();_cfdbg ,_ddba =DilateBrick (nil ,_cfdbg ,_agcf ,_fcbe );
|
|
|
|
if _ddba !=nil {return nil ,_d .Wrap (_ddba ,_ddfgc ,"");};case MopErosion :_agcf ,_fcbe =_edecf .getWidthHeight ();_cfdbg ,_ddba =_cea (nil ,_cfdbg ,_agcf ,_fcbe );if _ddba !=nil {return nil ,_d .Wrap (_ddba ,_ddfgc ,"");};case MopOpening :_agcf ,_fcbe =_edecf .getWidthHeight ();
|
|
|
|
_cfdbg ,_ddba =_ebga (nil ,_cfdbg ,_agcf ,_fcbe );if _ddba !=nil {return nil ,_d .Wrap (_ddba ,_ddfgc ,"");};case MopClosing :_agcf ,_fcbe =_edecf .getWidthHeight ();_cfdbg ,_ddba =_defb (nil ,_cfdbg ,_agcf ,_fcbe );if _ddba !=nil {return nil ,_d .Wrap (_ddba ,_ddfgc ,"");
|
|
|
|
};case MopRankBinaryReduction :_cfdbg ,_ddba =_fbd (_cfdbg ,_edecf .Arguments ...);if _ddba !=nil {return nil ,_d .Wrap (_ddba ,_ddfgc ,"");};case MopReplicativeBinaryExpansion :_cfdbg ,_ddba =_dceg (_cfdbg ,_edecf .Arguments [0]);if _ddba !=nil {return nil ,_d .Wrap (_ddba ,_ddfgc ,"");
|
|
|
|
};case MopAddBorder :_abed =_edecf .Arguments [0];_cfdbg ,_ddba =_cfdbg .AddBorder (_abed ,0);if _ddba !=nil {return nil ,_d .Wrap (_ddba ,_ddfgc ,"");};default:return nil ,_d .Error (_ddfgc ,"i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006d\u006fr\u0070\u0068\u004f\u0070\u0065\u0072\u0061ti\u006f\u006e\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0074\u006f t\u0068\u0065 \u0073\u0065\u0071\u0075\u0065\u006e\u0063\u0065");
|
|
|
|
};};if _abed > 0{_cfdbg ,_ddba =_cfdbg .RemoveBorder (_abed );if _ddba !=nil {return nil ,_d .Wrap (_ddba ,_ddfgc ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _cfdbg ,nil ;};func TstImageBitmap ()*Bitmap {return _gbfac .Copy ()};
|
|
|
|
func _cabd (_cbde ,_afa byte ,_fbgae CombinationOperator )byte {switch _fbgae {case CmbOpOr :return _afa |_cbde ;case CmbOpAnd :return _afa &_cbde ;case CmbOpXor :return _afa ^_cbde ;case CmbOpXNor :return ^(_afa ^_cbde );case CmbOpNot :return ^(_afa );
|
|
|
|
default:return _afa ;};};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func _fef (_dda ,_fbfe *Bitmap ,_gbfg ,_aeaa ,_fde ,_cfdb ,_fbb ,_aaaca ,_dac ,_aec int ,_bggd CombinationOperator ,_dbdd int )error {var _ccgc int ;
|
|
|
|
_eda :=func (){_ccgc ++;_fde +=_fbfe .RowStride ;_cfdb +=_dda .RowStride ;_fbb +=_dda .RowStride };for _ccgc =_gbfg ;_ccgc < _aeaa ;_eda (){var _beeg uint16 ;_fffe :=_fde ;for _dad :=_cfdb ;_dad <=_fbb ;_dad ++{_ccgcc ,_adc :=_fbfe .GetByte (_fffe );if _adc !=nil {return _adc ;
|
|
|
|
};_cdfb ,_adc :=_dda .GetByte (_dad );if _adc !=nil {return _adc ;};_beeg =(_beeg |(uint16 (_cdfb )&0xff))<<uint (_aec );_cdfb =byte (_beeg >>8);if _adc =_fbfe .SetByte (_fffe ,_cabd (_ccgcc ,_cdfb ,_bggd ));_adc !=nil {return _adc ;};_fffe ++;_beeg <<=uint (_dac );
|
|
|
|
if _dad ==_fbb {_cdfb =byte (_beeg >>(8-uint8 (_aec )));if _dbdd !=0{_cdfb =_age (uint (8+_aaaca ),_cdfb );};_ccgcc ,_adc =_fbfe .GetByte (_fffe );if _adc !=nil {return _adc ;};if _adc =_fbfe .SetByte (_fffe ,_cabd (_ccgcc ,_cdfb ,_bggd ));_adc !=nil {return _adc ;
|
|
|
|
};};};};return nil ;};func (_fcbd *Bitmap )nextOnPixelLow (_gdbe ,_acdd ,_fbce ,_ggcbc ,_dag int )(_aab _ea .Point ,_dfca bool ,_dgg error ){const _bcd ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
|
|
|
|
var (_eff int ;_ade byte ;);_bbfe :=_dag *_fbce ;_decd :=_bbfe +(_ggcbc /8);if _ade ,_dgg =_fcbd .GetByte (_decd );_dgg !=nil {return _aab ,false ,_d .Wrap (_dgg ,_bcd ,"\u0078\u0053\u0074\u0061\u0072\u0074\u0020\u0061\u006e\u0064 \u0079\u0053\u0074\u0061\u0072\u0074\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065");
|
|
|
|
};if _ade !=0{_edc :=_ggcbc -(_ggcbc %8)+7;for _eff =_ggcbc ;_eff <=_edc &&_eff < _gdbe ;_eff ++{if _fcbd .GetPixel (_eff ,_dag ){_aab .X =_eff ;_aab .Y =_dag ;return _aab ,true ,nil ;};};};_fgae :=(_ggcbc /8)+1;_eff =8*_fgae ;var _deg int ;for _decd =_bbfe +_fgae ;
|
|
|
|
_eff < _gdbe ;_decd ,_eff =_decd +1,_eff +8{if _ade ,_dgg =_fcbd .GetByte (_decd );_dgg !=nil {return _aab ,false ,_d .Wrap (_dgg ,_bcd ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _ade ==0{continue ;
|
|
|
|
};for _deg =0;_deg < 8&&_eff < _gdbe ;_deg ,_eff =_deg +1,_eff +1{if _fcbd .GetPixel (_eff ,_dag ){_aab .X =_eff ;_aab .Y =_dag ;return _aab ,true ,nil ;};};};for _ege :=_dag +1;_ege < _acdd ;_ege ++{_bbfe =_ege *_fbce ;for _decd ,_eff =_bbfe ,0;_eff < _gdbe ;
|
|
|
|
_decd ,_eff =_decd +1,_eff +8{if _ade ,_dgg =_fcbd .GetByte (_decd );_dgg !=nil {return _aab ,false ,_d .Wrap (_dgg ,_bcd ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _ade ==0{continue ;};for _deg =0;_deg < 8&&_eff < _gdbe ;
|
|
|
|
_deg ,_eff =_deg +1,_eff +1{if _fcbd .GetPixel (_eff ,_ege ){_aab .X =_eff ;_aab .Y =_ege ;return _aab ,true ,nil ;};};};};return _aab ,false ,nil ;};func _abddf (_fdgbeg *Bitmap ,_gdbb ,_cfecg int ,_cabg ,_defdd int ,_eeedf RasterOperator ){var (_fdcb int ;
|
|
|
|
_agbg byte ;_affa ,_bfae int ;_fagbf int ;);_bfgd :=_cabg >>3;_gfbbc :=_cabg &7;if _gfbbc > 0{_agbg =_bcedd [_gfbbc ];};_fdcb =_fdgbeg .RowStride *_cfecg +(_gdbb >>3);switch _eeedf {case PixClr :for _affa =0;_affa < _defdd ;_affa ++{_fagbf =_fdcb +_affa *_fdgbeg .RowStride ;
|
|
|
|
for _bfae =0;_bfae < _bfgd ;_bfae ++{_fdgbeg .Data [_fagbf ]=0x0;_fagbf ++;};if _gfbbc > 0{_fdgbeg .Data [_fagbf ]=_gbgeb (_fdgbeg .Data [_fagbf ],0x0,_agbg );};};case PixSet :for _affa =0;_affa < _defdd ;_affa ++{_fagbf =_fdcb +_affa *_fdgbeg .RowStride ;
|
|
|
|
for _bfae =0;_bfae < _bfgd ;_bfae ++{_fdgbeg .Data [_fagbf ]=0xff;_fagbf ++;};if _gfbbc > 0{_fdgbeg .Data [_fagbf ]=_gbgeb (_fdgbeg .Data [_fagbf ],0xff,_agbg );};};case PixNotDst :for _affa =0;_affa < _defdd ;_affa ++{_fagbf =_fdcb +_affa *_fdgbeg .RowStride ;
|
|
|
|
for _bfae =0;_bfae < _bfgd ;_bfae ++{_fdgbeg .Data [_fagbf ]=^_fdgbeg .Data [_fagbf ];_fagbf ++;};if _gfbbc > 0{_fdgbeg .Data [_fagbf ]=_gbgeb (_fdgbeg .Data [_fagbf ],^_fdgbeg .Data [_fagbf ],_agbg );};};};};func (_fagb Points )GetIntY (i int )(int ,error ){if i >=len (_fagb ){return 0,_d .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0059","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
|
|
};return int (_fagb [i ].Y ),nil ;};func (_ecbd *ClassedPoints )Less (i ,j int )bool {return _ecbd ._gbgff (i ,j )};type Getter interface{GetBitmap ()*Bitmap ;};func (_cee *Bitmap )setTwoBytes (_dgbaa int ,_gaed uint16 )error {if _dgbaa +1> len (_cee .Data )-1{return _d .Errorf ("s\u0065\u0074\u0054\u0077\u006f\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_dgbaa );
|
|
|
|
};_cee .Data [_dgbaa ]=byte ((_gaed &0xff00)>>8);_cee .Data [_dgbaa +1]=byte (_gaed &0xff);return nil ;};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _gfae ,_ccba int ;
|
|
|
|
_bcfg :=src .RowStride -1;if x < 0{_ccba =-x ;x =0;}else if x +src .Width > dst .Width {_bcfg -=src .Width +x -dst .Width ;};if y < 0{_gfae =-y ;y =0;_ccba +=src .RowStride ;_bcfg +=src .RowStride ;}else if y +src .Height > dst .Height {_gfae =src .Height +y -dst .Height ;
|
|
|
|
};var (_daa int ;_badg error ;);_aadb :=x &0x07;_gged :=8-_aadb ;_cab :=src .Width &0x07;_ccbcg :=_gged -_cab ;_gaab :=_gged &0x07!=0;_eaed :=src .Width <=((_bcfg -_ccba )<<3)+_gged ;_ega :=dst .GetByteIndex (x ,y );_gcff :=_gfae +dst .Height ;if src .Height > _gcff {_daa =_gcff ;
|
|
|
|
}else {_daa =src .Height ;};switch {case !_gaab :_badg =_gba (src ,dst ,_gfae ,_daa ,_ega ,_ccba ,_bcfg ,op );case _eaed :_badg =_fafg (src ,dst ,_gfae ,_daa ,_ega ,_ccba ,_bcfg ,_ccbcg ,_aadb ,_gged ,op );default:_badg =_fef (src ,dst ,_gfae ,_daa ,_ega ,_ccba ,_bcfg ,_ccbcg ,_aadb ,_gged ,op ,_cab );
|
|
|
|
};return _badg ;};func init (){const _ccaee ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_abeb =New (50,40);var _gedeba error ;_abeb ,_gedeba =_abeb .AddBorder (2,1);if _gedeba !=nil {panic (_d .Wrap (_gedeba ,_ccaee ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
|
|
|
|
};_gbfac ,_gedeba =NewWithData (50,22,_eecb );if _gedeba !=nil {panic (_d .Wrap (_gedeba ,_ccaee ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};};var (_fcec =_bgb ();_defc =_bgg ();_ffcd =_abb (););func (_egbg *Bitmap )setAll ()error {_eed :=_dfaa (_egbg ,0,0,_egbg .Width ,_egbg .Height ,PixSet ,nil ,0,0);
|
|
|
|
if _eed !=nil {return _d .Wrap (_eed ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func (_cacec *Bitmaps )AddBitmap (bm *Bitmap ){_cacec .Values =append (_cacec .Values ,bm )};func _dfaa (_ecfda *Bitmap ,_gfbc ,_cdcc ,_gbfa ,_gffa int ,_fbeg RasterOperator ,_defgb *Bitmap ,_addf ,_gfag int )error {const _eddd ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
|
|
|
|
if _ecfda ==nil {return _d .Error (_eddd ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _fbeg ==PixDst {return nil ;};switch _fbeg {case PixClr ,PixSet ,PixNotDst :_cdeg (_ecfda ,_gfbc ,_cdcc ,_gbfa ,_gffa ,_fbeg );
|
|
|
|
return nil ;};if _defgb ==nil {_g .Log .Debug ("\u0052a\u0073\u0074e\u0072\u004f\u0070\u0065r\u0061\u0074\u0069o\u006e\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020bi\u0074\u006d\u0061p\u0020\u0069s\u0020\u006e\u006f\u0074\u0020\u0064e\u0066\u0069n\u0065\u0064");
|
|
|
|
return _d .Error (_eddd ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _dgaa :=_aded (_ecfda ,_gfbc ,_cdcc ,_gbfa ,_gffa ,_fbeg ,_defgb ,_addf ,_gfag );_dgaa !=nil {return _d .Wrap (_dgaa ,_eddd ,"");};return nil ;
|
|
|
|
};func _abac (_aaeb *Bitmap ,_gfea ,_gebe ,_ebde ,_cdgfe int ,_dabcf RasterOperator ,_ffce *Bitmap ,_gadd ,_fede int )error {var (_feba byte ;_fba int ;_ddgb int ;_dfafc ,_febc int ;_cecde ,_ffff int ;);_cgcce :=_ebde >>3;_fabc :=_ebde &7;if _fabc > 0{_feba =_bcedd [_fabc ];
|
|
|
|
};_fba =_ffce .RowStride *_fede +(_gadd >>3);_ddgb =_aaeb .RowStride *_gebe +(_gfea >>3);switch _dabcf {case PixSrc :for _cecde =0;_cecde < _cdgfe ;_cecde ++{_dfafc =_fba +_cecde *_ffce .RowStride ;_febc =_ddgb +_cecde *_aaeb .RowStride ;for _ffff =0;_ffff < _cgcce ;
|
|
|
|
_ffff ++{_aaeb .Data [_febc ]=_ffce .Data [_dfafc ];_febc ++;_dfafc ++;};if _fabc > 0{_aaeb .Data [_febc ]=_gbgeb (_aaeb .Data [_febc ],_ffce .Data [_dfafc ],_feba );};};case PixNotSrc :for _cecde =0;_cecde < _cdgfe ;_cecde ++{_dfafc =_fba +_cecde *_ffce .RowStride ;
|
|
|
|
_febc =_ddgb +_cecde *_aaeb .RowStride ;for _ffff =0;_ffff < _cgcce ;_ffff ++{_aaeb .Data [_febc ]=^(_ffce .Data [_dfafc ]);_febc ++;_dfafc ++;};if _fabc > 0{_aaeb .Data [_febc ]=_gbgeb (_aaeb .Data [_febc ],^_ffce .Data [_dfafc ],_feba );};};case PixSrcOrDst :for _cecde =0;
|
|
|
|
_cecde < _cdgfe ;_cecde ++{_dfafc =_fba +_cecde *_ffce .RowStride ;_febc =_ddgb +_cecde *_aaeb .RowStride ;for _ffff =0;_ffff < _cgcce ;_ffff ++{_aaeb .Data [_febc ]|=_ffce .Data [_dfafc ];_febc ++;_dfafc ++;};if _fabc > 0{_aaeb .Data [_febc ]=_gbgeb (_aaeb .Data [_febc ],_ffce .Data [_dfafc ]|_aaeb .Data [_febc ],_feba );
|
|
|
|
};};case PixSrcAndDst :for _cecde =0;_cecde < _cdgfe ;_cecde ++{_dfafc =_fba +_cecde *_ffce .RowStride ;_febc =_ddgb +_cecde *_aaeb .RowStride ;for _ffff =0;_ffff < _cgcce ;_ffff ++{_aaeb .Data [_febc ]&=_ffce .Data [_dfafc ];_febc ++;_dfafc ++;};if _fabc > 0{_aaeb .Data [_febc ]=_gbgeb (_aaeb .Data [_febc ],_ffce .Data [_dfafc ]&_aaeb .Data [_febc ],_feba );
|
|
|
|
};};case PixSrcXorDst :for _cecde =0;_cecde < _cdgfe ;_cecde ++{_dfafc =_fba +_cecde *_ffce .RowStride ;_febc =_ddgb +_cecde *_aaeb .RowStride ;for _ffff =0;_ffff < _cgcce ;_ffff ++{_aaeb .Data [_febc ]^=_ffce .Data [_dfafc ];_febc ++;_dfafc ++;};if _fabc > 0{_aaeb .Data [_febc ]=_gbgeb (_aaeb .Data [_febc ],_ffce .Data [_dfafc ]^_aaeb .Data [_febc ],_feba );
|
|
|
|
};};case PixNotSrcOrDst :for _cecde =0;_cecde < _cdgfe ;_cecde ++{_dfafc =_fba +_cecde *_ffce .RowStride ;_febc =_ddgb +_cecde *_aaeb .RowStride ;for _ffff =0;_ffff < _cgcce ;_ffff ++{_aaeb .Data [_febc ]|=^(_ffce .Data [_dfafc ]);_febc ++;_dfafc ++;};
|
|
|
|
if _fabc > 0{_aaeb .Data [_febc ]=_gbgeb (_aaeb .Data [_febc ],^(_ffce .Data [_dfafc ])|_aaeb .Data [_febc ],_feba );};};case PixNotSrcAndDst :for _cecde =0;_cecde < _cdgfe ;_cecde ++{_dfafc =_fba +_cecde *_ffce .RowStride ;_febc =_ddgb +_cecde *_aaeb .RowStride ;
|
|
|
|
for _ffff =0;_ffff < _cgcce ;_ffff ++{_aaeb .Data [_febc ]&=^(_ffce .Data [_dfafc ]);_febc ++;_dfafc ++;};if _fabc > 0{_aaeb .Data [_febc ]=_gbgeb (_aaeb .Data [_febc ],^(_ffce .Data [_dfafc ])&_aaeb .Data [_febc ],_feba );};};case PixSrcOrNotDst :for _cecde =0;
|
|
|
|
_cecde < _cdgfe ;_cecde ++{_dfafc =_fba +_cecde *_ffce .RowStride ;_febc =_ddgb +_cecde *_aaeb .RowStride ;for _ffff =0;_ffff < _cgcce ;_ffff ++{_aaeb .Data [_febc ]=_ffce .Data [_dfafc ]|^(_aaeb .Data [_febc ]);_febc ++;_dfafc ++;};if _fabc > 0{_aaeb .Data [_febc ]=_gbgeb (_aaeb .Data [_febc ],_ffce .Data [_dfafc ]|^(_aaeb .Data [_febc ]),_feba );
|
|
|
|
};};case PixSrcAndNotDst :for _cecde =0;_cecde < _cdgfe ;_cecde ++{_dfafc =_fba +_cecde *_ffce .RowStride ;_febc =_ddgb +_cecde *_aaeb .RowStride ;for _ffff =0;_ffff < _cgcce ;_ffff ++{_aaeb .Data [_febc ]=_ffce .Data [_dfafc ]&^(_aaeb .Data [_febc ]);
|
|
|
|
_febc ++;_dfafc ++;};if _fabc > 0{_aaeb .Data [_febc ]=_gbgeb (_aaeb .Data [_febc ],_ffce .Data [_dfafc ]&^(_aaeb .Data [_febc ]),_feba );};};case PixNotPixSrcOrDst :for _cecde =0;_cecde < _cdgfe ;_cecde ++{_dfafc =_fba +_cecde *_ffce .RowStride ;_febc =_ddgb +_cecde *_aaeb .RowStride ;
|
|
|
|
for _ffff =0;_ffff < _cgcce ;_ffff ++{_aaeb .Data [_febc ]=^(_ffce .Data [_dfafc ]|_aaeb .Data [_febc ]);_febc ++;_dfafc ++;};if _fabc > 0{_aaeb .Data [_febc ]=_gbgeb (_aaeb .Data [_febc ],^(_ffce .Data [_dfafc ]|_aaeb .Data [_febc ]),_feba );};};case PixNotPixSrcAndDst :for _cecde =0;
|
|
|
|
_cecde < _cdgfe ;_cecde ++{_dfafc =_fba +_cecde *_ffce .RowStride ;_febc =_ddgb +_cecde *_aaeb .RowStride ;for _ffff =0;_ffff < _cgcce ;_ffff ++{_aaeb .Data [_febc ]=^(_ffce .Data [_dfafc ]&_aaeb .Data [_febc ]);_febc ++;_dfafc ++;};if _fabc > 0{_aaeb .Data [_febc ]=_gbgeb (_aaeb .Data [_febc ],^(_ffce .Data [_dfafc ]&_aaeb .Data [_febc ]),_feba );
|
|
|
|
};};case PixNotPixSrcXorDst :for _cecde =0;_cecde < _cdgfe ;_cecde ++{_dfafc =_fba +_cecde *_ffce .RowStride ;_febc =_ddgb +_cecde *_aaeb .RowStride ;for _ffff =0;_ffff < _cgcce ;_ffff ++{_aaeb .Data [_febc ]=^(_ffce .Data [_dfafc ]^_aaeb .Data [_febc ]);
|
|
|
|
_febc ++;_dfafc ++;};if _fabc > 0{_aaeb .Data [_febc ]=_gbgeb (_aaeb .Data [_febc ],^(_ffce .Data [_dfafc ]^_aaeb .Data [_febc ]),_feba );};};default:_g .Log .Debug ("\u0050\u0072ov\u0069\u0064\u0065d\u0020\u0069\u006e\u0076ali\u0064 r\u0061\u0073\u0074\u0065\u0072\u0020\u006fpe\u0072\u0061\u0074\u006f\u0072\u003a\u0020%\u0076",_dabcf );
|
|
|
|
return _d .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004co\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
|
|
|
|
};return nil ;};func Extract (roi _ea .Rectangle ,src *Bitmap )(*Bitmap ,error ){_bccg :=New (roi .Dx (),roi .Dy ());_cced :=roi .Min .X &0x07;_abea :=8-_cced ;_deab :=uint (8-_bccg .Width &0x07);_dafg :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_ffbc :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );
|
|
|
|
_bed :=_bccg .RowStride ==_ffbc +1-_dafg ;var _bcecd int ;for _fgdg :=roi .Min .Y ;_fgdg < roi .Max .Y ;_fgdg ++{_affc :=_dafg ;_cgcc :=_bcecd ;switch {case _dafg ==_ffbc :_fee ,_eafb :=src .GetByte (_affc );if _eafb !=nil {return nil ,_eafb ;};_fee <<=uint (_cced );
|
|
|
|
_eafb =_bccg .SetByte (_cgcc ,_age (_deab ,_fee ));if _eafb !=nil {return nil ,_eafb ;};case _cced ==0:for _ffag :=_dafg ;_ffag <=_ffbc ;_ffag ++{_ggad ,_fdac :=src .GetByte (_affc );if _fdac !=nil {return nil ,_fdac ;};_affc ++;if _ffag ==_ffbc &&_bed {_ggad =_age (_deab ,_ggad );
|
|
|
|
};_fdac =_bccg .SetByte (_cgcc ,_ggad );if _fdac !=nil {return nil ,_fdac ;};_cgcc ++;};default:_ecdf :=_gegb (src ,_bccg ,uint (_cced ),uint (_abea ),_deab ,_dafg ,_ffbc ,_bed ,_affc ,_cgcc );if _ecdf !=nil {return nil ,_ecdf ;};};_dafg +=src .RowStride ;
|
|
|
|
_ffbc +=src .RowStride ;_bcecd +=_bccg .RowStride ;};return _bccg ,nil ;};func (_febef *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_ccaa *Bitmaps ,_eegd error ){const _ecdfd ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
|
|
|
|
if _febef ==nil {return nil ,_d .Error (_ecdfd ,"\u0027\u0062\u0027 B\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_d .Errorf (_ecdfd ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );
|
|
|
|
};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_d .Errorf (_ecdfd ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
|
|
|
|
};_gbbd ,_eegd :=_febef .makeSizeIndicator (width ,height ,tp ,relation );if _eegd !=nil {return nil ,_d .Wrap (_eegd ,_ecdfd ,"");};_ccaa ,_eegd =_febef .selectByIndicator (_gbbd );if _eegd !=nil {return nil ,_d .Wrap (_eegd ,_ecdfd ,"");};return _ccaa ,nil ;
|
|
|
|
};type BoundaryCondition int ;func (_dcdd *Bitmap )SizesEqual (s *Bitmap )bool {if _dcdd ==s {return true ;};if _dcdd .Width !=s .Width ||_dcdd .Height !=s .Height {return false ;};return true ;};func _cfdg (_aebec ,_dagf *Bitmap ,_bgde *Selection )(*Bitmap ,error ){const _ebcfg ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";
|
|
|
|
var _ccgff ,_ebaac int ;if _dagf ==nil {return nil ,_d .Error (_ebcfg ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _bgde ==nil {return nil ,_d .Error (_ebcfg ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
|
|
};_ccgff =_bgde .Width ;_ebaac =_bgde .Height ;if _ccgff ==0||_ebaac ==0{return nil ,_d .Error (_ebcfg ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _aebec ==nil {return _dagf .createTemplate (),nil ;};if _gfgd :=_aebec .resizeImageData (_dagf );
|
|
|
|
_gfgd !=nil {return nil ,_gfgd ;};return _aebec ,nil ;};func (_cddg *byHeight )Less (i ,j int )bool {return _cddg .Values [i ].Height < _cddg .Values [j ].Height };func (_ecbf MorphProcess )getWidthHeight ()(_gdg ,_egba int ){return _ecbf .Arguments [0],_ecbf .Arguments [1];
|
|
|
|
};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_dddd *Bitmaps )GetBox (i int )(*_ea .Rectangle ,error ){const _dddae ="\u0047\u0065\u0074\u0042\u006f\u0078";
|
|
|
|
if _dddd ==nil {return nil ,_d .Error (_dddae ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_dddd .Boxes )-1{return nil ,_d .Errorf (_dddae ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
|
|
};return _dddd .Boxes [i ],nil ;};func _aeeb (_bab *Bitmap ,_ddfa ,_dgdd ,_aefacg ,_cdcg int ,_abead RasterOperator ,_eccd *Bitmap ,_cfbe ,_baag int )error {var (_ggdc bool ;_gdcea bool ;_addg byte ;_eagdg int ;_aadf int ;_agbb int ;_aaaf int ;_cda bool ;
|
|
|
|
_edaf int ;_aeab int ;_egbd int ;_cceg bool ;_dege byte ;_cdbda int ;_dbcf int ;_aadad int ;_cege byte ;_deec int ;_bbaa int ;_edeff uint ;_aged uint ;_babg byte ;_cgcd shift ;_cged bool ;_dace bool ;_cbbd ,_bced int ;);if _cfbe &7!=0{_bbaa =8-(_cfbe &7);
|
|
|
|
};if _ddfa &7!=0{_aadf =8-(_ddfa &7);};if _bbaa ==0&&_aadf ==0{_babg =_efbgc [0];}else {if _aadf > _bbaa {_edeff =uint (_aadf -_bbaa );}else {_edeff =uint (8-(_bbaa -_aadf ));};_aged =8-_edeff ;_babg =_efbgc [_edeff ];};if (_ddfa &7)!=0{_ggdc =true ;_eagdg =8-(_ddfa &7);
|
|
|
|
_addg =_efbgc [_eagdg ];_agbb =_bab .RowStride *_dgdd +(_ddfa >>3);_aaaf =_eccd .RowStride *_baag +(_cfbe >>3);_deec =8-(_cfbe &7);if _eagdg > _deec {_cgcd =_agede ;if _aefacg >=_bbaa {_cged =true ;};}else {_cgcd =_bdfg ;};};if _aefacg < _eagdg {_gdcea =true ;
|
|
|
|
_addg &=_bcedd [8-_eagdg +_aefacg ];};if !_gdcea {_edaf =(_aefacg -_eagdg )>>3;if _edaf !=0{_cda =true ;_aeab =_bab .RowStride *_dgdd +((_ddfa +_aadf )>>3);_egbd =_eccd .RowStride *_baag +((_cfbe +_aadf )>>3);};};_cdbda =(_ddfa +_aefacg )&7;if !(_gdcea ||_cdbda ==0){_cceg =true ;
|
|
|
|
_dege =_bcedd [_cdbda ];_dbcf =_bab .RowStride *_dgdd +((_ddfa +_aadf )>>3)+_edaf ;_aadad =_eccd .RowStride *_baag +((_cfbe +_aadf )>>3)+_edaf ;if _cdbda > int (_aged ){_dace =true ;};};switch _abead {case PixSrc :if _ggdc {for _cbbd =0;_cbbd < _cdcg ;
|
|
|
|
_cbbd ++{if _cgcd ==_agede {_cege =_eccd .Data [_aaaf ]<<_edeff ;if _cged {_cege =_gbgeb (_cege ,_eccd .Data [_aaaf +1]>>_aged ,_babg );};}else {_cege =_eccd .Data [_aaaf ]>>_aged ;};_bab .Data [_agbb ]=_gbgeb (_bab .Data [_agbb ],_cege ,_addg );_agbb +=_bab .RowStride ;
|
|
|
|
_aaaf +=_eccd .RowStride ;};};if _cda {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{for _bced =0;_bced < _edaf ;_bced ++{_cege =_gbgeb (_eccd .Data [_egbd +_bced ]<<_edeff ,_eccd .Data [_egbd +_bced +1]>>_aged ,_babg );_bab .Data [_aeab +_bced ]=_cege ;};_aeab +=_bab .RowStride ;
|
|
|
|
_egbd +=_eccd .RowStride ;};};if _cceg {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{_cege =_eccd .Data [_aadad ]<<_edeff ;if _dace {_cege =_gbgeb (_cege ,_eccd .Data [_aadad +1]>>_aged ,_babg );};_bab .Data [_dbcf ]=_gbgeb (_bab .Data [_dbcf ],_cege ,_dege );
|
|
|
|
_dbcf +=_bab .RowStride ;_aadad +=_eccd .RowStride ;};};case PixNotSrc :if _ggdc {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{if _cgcd ==_agede {_cege =_eccd .Data [_aaaf ]<<_edeff ;if _cged {_cege =_gbgeb (_cege ,_eccd .Data [_aaaf +1]>>_aged ,_babg );};}else {_cege =_eccd .Data [_aaaf ]>>_aged ;
|
|
|
|
};_bab .Data [_agbb ]=_gbgeb (_bab .Data [_agbb ],^_cege ,_addg );_agbb +=_bab .RowStride ;_aaaf +=_eccd .RowStride ;};};if _cda {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{for _bced =0;_bced < _edaf ;_bced ++{_cege =_gbgeb (_eccd .Data [_egbd +_bced ]<<_edeff ,_eccd .Data [_egbd +_bced +1]>>_aged ,_babg );
|
|
|
|
_bab .Data [_aeab +_bced ]=^_cege ;};_aeab +=_bab .RowStride ;_egbd +=_eccd .RowStride ;};};if _cceg {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{_cege =_eccd .Data [_aadad ]<<_edeff ;if _dace {_cege =_gbgeb (_cege ,_eccd .Data [_aadad +1]>>_aged ,_babg );};_bab .Data [_dbcf ]=_gbgeb (_bab .Data [_dbcf ],^_cege ,_dege );
|
|
|
|
_dbcf +=_bab .RowStride ;_aadad +=_eccd .RowStride ;};};case PixSrcOrDst :if _ggdc {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{if _cgcd ==_agede {_cege =_eccd .Data [_aaaf ]<<_edeff ;if _cged {_cege =_gbgeb (_cege ,_eccd .Data [_aaaf +1]>>_aged ,_babg );};}else {_cege =_eccd .Data [_aaaf ]>>_aged ;
|
|
|
|
};_bab .Data [_agbb ]=_gbgeb (_bab .Data [_agbb ],_cege |_bab .Data [_agbb ],_addg );_agbb +=_bab .RowStride ;_aaaf +=_eccd .RowStride ;};};if _cda {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{for _bced =0;_bced < _edaf ;_bced ++{_cege =_gbgeb (_eccd .Data [_egbd +_bced ]<<_edeff ,_eccd .Data [_egbd +_bced +1]>>_aged ,_babg );
|
|
|
|
_bab .Data [_aeab +_bced ]|=_cege ;};_aeab +=_bab .RowStride ;_egbd +=_eccd .RowStride ;};};if _cceg {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{_cege =_eccd .Data [_aadad ]<<_edeff ;if _dace {_cege =_gbgeb (_cege ,_eccd .Data [_aadad +1]>>_aged ,_babg );};_bab .Data [_dbcf ]=_gbgeb (_bab .Data [_dbcf ],_cege |_bab .Data [_dbcf ],_dege );
|
|
|
|
_dbcf +=_bab .RowStride ;_aadad +=_eccd .RowStride ;};};case PixSrcAndDst :if _ggdc {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{if _cgcd ==_agede {_cege =_eccd .Data [_aaaf ]<<_edeff ;if _cged {_cege =_gbgeb (_cege ,_eccd .Data [_aaaf +1]>>_aged ,_babg );};}else {_cege =_eccd .Data [_aaaf ]>>_aged ;
|
|
|
|
};_bab .Data [_agbb ]=_gbgeb (_bab .Data [_agbb ],_cege &_bab .Data [_agbb ],_addg );_agbb +=_bab .RowStride ;_aaaf +=_eccd .RowStride ;};};if _cda {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{for _bced =0;_bced < _edaf ;_bced ++{_cege =_gbgeb (_eccd .Data [_egbd +_bced ]<<_edeff ,_eccd .Data [_egbd +_bced +1]>>_aged ,_babg );
|
|
|
|
_bab .Data [_aeab +_bced ]&=_cege ;};_aeab +=_bab .RowStride ;_egbd +=_eccd .RowStride ;};};if _cceg {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{_cege =_eccd .Data [_aadad ]<<_edeff ;if _dace {_cege =_gbgeb (_cege ,_eccd .Data [_aadad +1]>>_aged ,_babg );};_bab .Data [_dbcf ]=_gbgeb (_bab .Data [_dbcf ],_cege &_bab .Data [_dbcf ],_dege );
|
|
|
|
_dbcf +=_bab .RowStride ;_aadad +=_eccd .RowStride ;};};case PixSrcXorDst :if _ggdc {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{if _cgcd ==_agede {_cege =_eccd .Data [_aaaf ]<<_edeff ;if _cged {_cege =_gbgeb (_cege ,_eccd .Data [_aaaf +1]>>_aged ,_babg );};}else {_cege =_eccd .Data [_aaaf ]>>_aged ;
|
|
|
|
};_bab .Data [_agbb ]=_gbgeb (_bab .Data [_agbb ],_cege ^_bab .Data [_agbb ],_addg );_agbb +=_bab .RowStride ;_aaaf +=_eccd .RowStride ;};};if _cda {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{for _bced =0;_bced < _edaf ;_bced ++{_cege =_gbgeb (_eccd .Data [_egbd +_bced ]<<_edeff ,_eccd .Data [_egbd +_bced +1]>>_aged ,_babg );
|
|
|
|
_bab .Data [_aeab +_bced ]^=_cege ;};_aeab +=_bab .RowStride ;_egbd +=_eccd .RowStride ;};};if _cceg {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{_cege =_eccd .Data [_aadad ]<<_edeff ;if _dace {_cege =_gbgeb (_cege ,_eccd .Data [_aadad +1]>>_aged ,_babg );};_bab .Data [_dbcf ]=_gbgeb (_bab .Data [_dbcf ],_cege ^_bab .Data [_dbcf ],_dege );
|
|
|
|
_dbcf +=_bab .RowStride ;_aadad +=_eccd .RowStride ;};};case PixNotSrcOrDst :if _ggdc {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{if _cgcd ==_agede {_cege =_eccd .Data [_aaaf ]<<_edeff ;if _cged {_cege =_gbgeb (_cege ,_eccd .Data [_aaaf +1]>>_aged ,_babg );};
|
|
|
|
}else {_cege =_eccd .Data [_aaaf ]>>_aged ;};_bab .Data [_agbb ]=_gbgeb (_bab .Data [_agbb ],^_cege |_bab .Data [_agbb ],_addg );_agbb +=_bab .RowStride ;_aaaf +=_eccd .RowStride ;};};if _cda {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{for _bced =0;_bced < _edaf ;
|
|
|
|
_bced ++{_cege =_gbgeb (_eccd .Data [_egbd +_bced ]<<_edeff ,_eccd .Data [_egbd +_bced +1]>>_aged ,_babg );_bab .Data [_aeab +_bced ]|=^_cege ;};_aeab +=_bab .RowStride ;_egbd +=_eccd .RowStride ;};};if _cceg {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{_cege =_eccd .Data [_aadad ]<<_edeff ;
|
|
|
|
if _dace {_cege =_gbgeb (_cege ,_eccd .Data [_aadad +1]>>_aged ,_babg );};_bab .Data [_dbcf ]=_gbgeb (_bab .Data [_dbcf ],^_cege |_bab .Data [_dbcf ],_dege );_dbcf +=_bab .RowStride ;_aadad +=_eccd .RowStride ;};};case PixNotSrcAndDst :if _ggdc {for _cbbd =0;
|
|
|
|
_cbbd < _cdcg ;_cbbd ++{if _cgcd ==_agede {_cege =_eccd .Data [_aaaf ]<<_edeff ;if _cged {_cege =_gbgeb (_cege ,_eccd .Data [_aaaf +1]>>_aged ,_babg );};}else {_cege =_eccd .Data [_aaaf ]>>_aged ;};_bab .Data [_agbb ]=_gbgeb (_bab .Data [_agbb ],^_cege &_bab .Data [_agbb ],_addg );
|
|
|
|
_agbb +=_bab .RowStride ;_aaaf +=_eccd .RowStride ;};};if _cda {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{for _bced =0;_bced < _edaf ;_bced ++{_cege =_gbgeb (_eccd .Data [_egbd +_bced ]<<_edeff ,_eccd .Data [_egbd +_bced +1]>>_aged ,_babg );_bab .Data [_aeab +_bced ]&=^_cege ;
|
|
|
|
};_aeab +=_bab .RowStride ;_egbd +=_eccd .RowStride ;};};if _cceg {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{_cege =_eccd .Data [_aadad ]<<_edeff ;if _dace {_cege =_gbgeb (_cege ,_eccd .Data [_aadad +1]>>_aged ,_babg );};_bab .Data [_dbcf ]=_gbgeb (_bab .Data [_dbcf ],^_cege &_bab .Data [_dbcf ],_dege );
|
|
|
|
_dbcf +=_bab .RowStride ;_aadad +=_eccd .RowStride ;};};case PixSrcOrNotDst :if _ggdc {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{if _cgcd ==_agede {_cege =_eccd .Data [_aaaf ]<<_edeff ;if _cged {_cege =_gbgeb (_cege ,_eccd .Data [_aaaf +1]>>_aged ,_babg );};
|
|
|
|
}else {_cege =_eccd .Data [_aaaf ]>>_aged ;};_bab .Data [_agbb ]=_gbgeb (_bab .Data [_agbb ],_cege |^_bab .Data [_agbb ],_addg );_agbb +=_bab .RowStride ;_aaaf +=_eccd .RowStride ;};};if _cda {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{for _bced =0;_bced < _edaf ;
|
|
|
|
_bced ++{_cege =_gbgeb (_eccd .Data [_egbd +_bced ]<<_edeff ,_eccd .Data [_egbd +_bced +1]>>_aged ,_babg );_bab .Data [_aeab +_bced ]=_cege |^_bab .Data [_aeab +_bced ];};_aeab +=_bab .RowStride ;_egbd +=_eccd .RowStride ;};};if _cceg {for _cbbd =0;_cbbd < _cdcg ;
|
|
|
|
_cbbd ++{_cege =_eccd .Data [_aadad ]<<_edeff ;if _dace {_cege =_gbgeb (_cege ,_eccd .Data [_aadad +1]>>_aged ,_babg );};_bab .Data [_dbcf ]=_gbgeb (_bab .Data [_dbcf ],_cege |^_bab .Data [_dbcf ],_dege );_dbcf +=_bab .RowStride ;_aadad +=_eccd .RowStride ;
|
|
|
|
};};case PixSrcAndNotDst :if _ggdc {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{if _cgcd ==_agede {_cege =_eccd .Data [_aaaf ]<<_edeff ;if _cged {_cege =_gbgeb (_cege ,_eccd .Data [_aaaf +1]>>_aged ,_babg );};}else {_cege =_eccd .Data [_aaaf ]>>_aged ;};_bab .Data [_agbb ]=_gbgeb (_bab .Data [_agbb ],_cege &^_bab .Data [_agbb ],_addg );
|
|
|
|
_agbb +=_bab .RowStride ;_aaaf +=_eccd .RowStride ;};};if _cda {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{for _bced =0;_bced < _edaf ;_bced ++{_cege =_gbgeb (_eccd .Data [_egbd +_bced ]<<_edeff ,_eccd .Data [_egbd +_bced +1]>>_aged ,_babg );_bab .Data [_aeab +_bced ]=_cege &^_bab .Data [_aeab +_bced ];
|
|
|
|
};_aeab +=_bab .RowStride ;_egbd +=_eccd .RowStride ;};};if _cceg {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{_cege =_eccd .Data [_aadad ]<<_edeff ;if _dace {_cege =_gbgeb (_cege ,_eccd .Data [_aadad +1]>>_aged ,_babg );};_bab .Data [_dbcf ]=_gbgeb (_bab .Data [_dbcf ],_cege &^_bab .Data [_dbcf ],_dege );
|
|
|
|
_dbcf +=_bab .RowStride ;_aadad +=_eccd .RowStride ;};};case PixNotPixSrcOrDst :if _ggdc {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{if _cgcd ==_agede {_cege =_eccd .Data [_aaaf ]<<_edeff ;if _cged {_cege =_gbgeb (_cege ,_eccd .Data [_aaaf +1]>>_aged ,_babg );
|
|
|
|
};}else {_cege =_eccd .Data [_aaaf ]>>_aged ;};_bab .Data [_agbb ]=_gbgeb (_bab .Data [_agbb ],^(_cege |_bab .Data [_agbb ]),_addg );_agbb +=_bab .RowStride ;_aaaf +=_eccd .RowStride ;};};if _cda {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{for _bced =0;_bced < _edaf ;
|
|
|
|
_bced ++{_cege =_gbgeb (_eccd .Data [_egbd +_bced ]<<_edeff ,_eccd .Data [_egbd +_bced +1]>>_aged ,_babg );_bab .Data [_aeab +_bced ]=^(_cege |_bab .Data [_aeab +_bced ]);};_aeab +=_bab .RowStride ;_egbd +=_eccd .RowStride ;};};if _cceg {for _cbbd =0;_cbbd < _cdcg ;
|
|
|
|
_cbbd ++{_cege =_eccd .Data [_aadad ]<<_edeff ;if _dace {_cege =_gbgeb (_cege ,_eccd .Data [_aadad +1]>>_aged ,_babg );};_bab .Data [_dbcf ]=_gbgeb (_bab .Data [_dbcf ],^(_cege |_bab .Data [_dbcf ]),_dege );_dbcf +=_bab .RowStride ;_aadad +=_eccd .RowStride ;
|
|
|
|
};};case PixNotPixSrcAndDst :if _ggdc {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{if _cgcd ==_agede {_cege =_eccd .Data [_aaaf ]<<_edeff ;if _cged {_cege =_gbgeb (_cege ,_eccd .Data [_aaaf +1]>>_aged ,_babg );};}else {_cege =_eccd .Data [_aaaf ]>>_aged ;};_bab .Data [_agbb ]=_gbgeb (_bab .Data [_agbb ],^(_cege &_bab .Data [_agbb ]),_addg );
|
|
|
|
_agbb +=_bab .RowStride ;_aaaf +=_eccd .RowStride ;};};if _cda {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{for _bced =0;_bced < _edaf ;_bced ++{_cege =_gbgeb (_eccd .Data [_egbd +_bced ]<<_edeff ,_eccd .Data [_egbd +_bced +1]>>_aged ,_babg );_bab .Data [_aeab +_bced ]=^(_cege &_bab .Data [_aeab +_bced ]);
|
|
|
|
};_aeab +=_bab .RowStride ;_egbd +=_eccd .RowStride ;};};if _cceg {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{_cege =_eccd .Data [_aadad ]<<_edeff ;if _dace {_cege =_gbgeb (_cege ,_eccd .Data [_aadad +1]>>_aged ,_babg );};_bab .Data [_dbcf ]=_gbgeb (_bab .Data [_dbcf ],^(_cege &_bab .Data [_dbcf ]),_dege );
|
|
|
|
_dbcf +=_bab .RowStride ;_aadad +=_eccd .RowStride ;};};case PixNotPixSrcXorDst :if _ggdc {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{if _cgcd ==_agede {_cege =_eccd .Data [_aaaf ]<<_edeff ;if _cged {_cege =_gbgeb (_cege ,_eccd .Data [_aaaf +1]>>_aged ,_babg );
|
|
|
|
};}else {_cege =_eccd .Data [_aaaf ]>>_aged ;};_bab .Data [_agbb ]=_gbgeb (_bab .Data [_agbb ],^(_cege ^_bab .Data [_agbb ]),_addg );_agbb +=_bab .RowStride ;_aaaf +=_eccd .RowStride ;};};if _cda {for _cbbd =0;_cbbd < _cdcg ;_cbbd ++{for _bced =0;_bced < _edaf ;
|
|
|
|
_bced ++{_cege =_gbgeb (_eccd .Data [_egbd +_bced ]<<_edeff ,_eccd .Data [_egbd +_bced +1]>>_aged ,_babg );_bab .Data [_aeab +_bced ]=^(_cege ^_bab .Data [_aeab +_bced ]);};_aeab +=_bab .RowStride ;_egbd +=_eccd .RowStride ;};};if _cceg {for _cbbd =0;_cbbd < _cdcg ;
|
|
|
|
_cbbd ++{_cege =_eccd .Data [_aadad ]<<_edeff ;if _dace {_cege =_gbgeb (_cege ,_eccd .Data [_aadad +1]>>_aged ,_babg );};_bab .Data [_dbcf ]=_gbgeb (_bab .Data [_dbcf ],^(_cege ^_bab .Data [_dbcf ]),_dege );_dbcf +=_bab .RowStride ;_aadad +=_eccd .RowStride ;
|
|
|
|
};};default:_g .Log .Debug ("\u004f\u0070e\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006e\u006f\u0074\u0020\u0070\u0065\u0072\u006d\u0069tt\u0065\u0064",_abead );return _d .Error ("\u0072a\u0073t\u0065\u0072\u004f\u0070\u0047e\u006e\u0065r\u0061\u006c\u004c\u006f\u0077","\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065r\u0061\u0074\u0069\u006f\u006e\u0020\u006eo\u0074\u0020\u0070\u0065\u0072\u006d\u0069\u0074\u0074\u0065\u0064");
|
|
|
|
};return nil ;};func _aafg (_aad ,_bdf ,_abga *Bitmap )(*Bitmap ,error ){const _edeb ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _bdf ==nil {return nil ,_d .Error (_edeb ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
|
|
|
|
};if _abga ==nil {return nil ,_d .Error (_edeb ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _aad ==_abga {return nil ,_d .Error (_edeb ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_bdf .SizesEqual (_abga ){_g .Log .Debug ("\u0025s\u0020\u002d \u0042\u0069\u0074\u006da\u0070\u0020\u0027b\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074 e\u0071\u0075\u0061l\u0020\u0073i\u007a\u0065\u0020\u0077\u0069\u0074h\u0020\u0027b\u0032\u0027",_edeb );
|
|
|
|
};var _gcfa error ;if _aad ,_gcfa =_fcdg (_aad ,_bdf );_gcfa !=nil {return nil ,_d .Wrap (_gcfa ,_edeb ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _gcfa =_aad .RasterOperation (0,0,_aad .Width ,_aad .Height ,PixSrcXorDst ,_abga ,0,0);
|
|
|
|
_gcfa !=nil {return nil ,_d .Wrap (_gcfa ,_edeb ,"");};return _aad ,nil ;};func (_eeef *Bitmap )clipRectangle (_gea ,_cgcb *_ea .Rectangle )(_geg *Bitmap ,_dgb error ){const _gdc ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
|
|
|
|
if _gea ==nil {return nil ,_d .Error (_gdc ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_gae ,_ebd :=_eeef .Width ,_eeef .Height ;_fbc ,_dgb :=ClipBoxToRectangle (_gea ,_gae ,_ebd );if _dgb !=nil {_g .Log .Warning ("\u0027\u0062ox\u0027\u0020\u0064o\u0065\u0073\u006e\u0027t o\u0076er\u006c\u0061\u0070\u0020\u0062\u0069\u0074ma\u0070\u0020\u0027\u0062\u0027\u003a\u0020%\u0076",_dgb );
|
|
|
|
return nil ,nil ;};_aegc ,_cfa :=_fbc .Min .X ,_fbc .Min .Y ;_cace ,_gbgb :=_fbc .Max .X -_fbc .Min .X ,_fbc .Max .Y -_fbc .Min .Y ;_geg =New (_cace ,_gbgb );_geg .Text =_eeef .Text ;if _dgb =_geg .RasterOperation (0,0,_cace ,_gbgb ,PixSrc ,_eeef ,_aegc ,_cfa );
|
|
|
|
_dgb !=nil {return nil ,_d .Wrap (_dgb ,_gdc ,"");};if _cgcb !=nil {*_cgcb =*_fbc ;};return _geg ,nil ;};func (_dcfd *Bitmap )inverseData (){if _fcg :=_dcfd .RasterOperation (0,0,_dcfd .Width ,_dcfd .Height ,PixNotDst ,nil ,0,0);_fcg !=nil {_g .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_fcg );
|
|
|
|
};if _dcfd .Color ==Chocolate {_dcfd .Color =Vanilla ;}else {_dcfd .Color =Chocolate ;};};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _dfaa (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};
|
|
|
|
func _fafg (_cffe ,_bbcd *Bitmap ,_eagc ,_ddfg ,_dbaf ,_dggd ,_afde ,_gcea ,_becd ,_bba int ,_aace CombinationOperator )error {var _ccgb int ;_adbf :=func (){_ccgb ++;_dbaf +=_bbcd .RowStride ;_dggd +=_cffe .RowStride ;_afde +=_cffe .RowStride };for _ccgb =_eagc ;
|
|
|
|
_ccgb < _ddfg ;_adbf (){var _cadc uint16 ;_face :=_dbaf ;for _fgb :=_dggd ;_fgb <=_afde ;_fgb ++{_fcgb ,_edcc :=_bbcd .GetByte (_face );if _edcc !=nil {return _edcc ;};_bega ,_edcc :=_cffe .GetByte (_fgb );if _edcc !=nil {return _edcc ;};_cadc =(_cadc |uint16 (_bega ))<<uint (_bba );
|
|
|
|
_bega =byte (_cadc >>8);if _fgb ==_afde {_bega =_age (uint (_gcea ),_bega );};if _edcc =_bbcd .SetByte (_face ,_cabd (_fcgb ,_bega ,_aace ));_edcc !=nil {return _edcc ;};_face ++;_cadc <<=uint (_becd );};};return nil ;};func New (width ,height int )*Bitmap {_ggcb :=_dedf (width ,height );
|
|
|
|
_ggcb .Data =make ([]byte ,height *_ggcb .RowStride );return _ggcb ;};func _cdab (_bfegf *Bitmap ,_ccfbe *_be .Stack ,_ddee ,_efga ,_edbe int )(_cefd *_ea .Rectangle ,_gaec error ){const _ecbfa ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
|
|
|
|
if _bfegf ==nil {return nil ,_d .Error (_ecbfa ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _ccfbe ==nil {return nil ,_d .Error (_ecbfa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
|
|
|
|
};switch _edbe {case 4:if _cefd ,_gaec =_cddb (_bfegf ,_ccfbe ,_ddee ,_efga );_gaec !=nil {return nil ,_d .Wrap (_gaec ,_ecbfa ,"");};return _cefd ,nil ;case 8:if _cefd ,_gaec =_bdgfa (_bfegf ,_ccfbe ,_ddee ,_efga );_gaec !=nil {return nil ,_d .Wrap (_gaec ,_ecbfa ,"");
|
|
|
|
};return _cefd ,nil ;default:return nil ,_d .Errorf (_ecbfa ,"\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u0069\u0073 \u006eo\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038\u003a\u0020\u0027\u0025\u0064\u0027",_edbe );
|
|
|
|
};};
|