mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-02 22:17:06 +08:00
662 lines
196 KiB
Go
662 lines
196 KiB
Go
//
|
|
// 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/
|
|
|
|
package bitmap ;import (_ca "encoding/binary";_gd "github.com/stretchr/testify/require";_dc "github.com/unidoc/unipdf/v3/common";_d "github.com/unidoc/unipdf/v3/internal/bitwise";_ace "github.com/unidoc/unipdf/v3/internal/imageutil";_b "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
|
|
_a "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_bb "image";_f "math";_c "sort";_e "strings";_ac "testing";);func (_aagc *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_egg *Boxes ,_gbbg error ){const _feba ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
|
|
if _aagc ==nil {return nil ,_a .Error (_feba ,"\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 ,_a .Error (_feba ,"\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 _egg ,_gbbg =_aagc .connComponentsBB (connectivity );_gbbg !=nil {return nil ,_a .Wrap (_gbbg ,_feba ,"");};}else {if _egg ,_gbbg =_aagc .connComponentsBitmapsBB (bms ,connectivity );_gbbg !=nil {return nil ,_a .Wrap (_gbbg ,_feba ,"");
|
|
};};return _egg ,nil ;};type Getter interface{GetBitmap ()*Bitmap ;};func _bcgc (_eec ,_dfda *Bitmap ,_gebd *Selection )(*Bitmap ,error ){const _ffbd ="\u0065\u0072\u006fd\u0065";var (_bdbga error ;_edcd *Bitmap ;);_eec ,_bdbga =_edcdg (_eec ,_dfda ,_gebd ,&_edcd );
|
|
if _bdbga !=nil {return nil ,_a .Wrap (_bdbga ,_ffbd ,"");};if _bdbga =_eec .setAll ();_bdbga !=nil {return nil ,_a .Wrap (_bdbga ,_ffbd ,"");};var _gaag SelectionValue ;for _fbfg :=0;_fbfg < _gebd .Height ;_fbfg ++{for _eedgf :=0;_eedgf < _gebd .Width ;
|
|
_eedgf ++{_gaag =_gebd .Data [_fbfg ][_eedgf ];if _gaag ==SelHit {_bdbga =_gfdaa (_eec ,_gebd .Cx -_eedgf ,_gebd .Cy -_fbfg ,_dfda .Width ,_dfda .Height ,PixSrcAndDst ,_edcd ,0,0);if _bdbga !=nil {return nil ,_a .Wrap (_bdbga ,_ffbd ,"");};};};};if MorphBC ==SymmetricMorphBC {return _eec ,nil ;
|
|
};_cecfa ,_cege ,_agdg ,_caccd :=_gebd .findMaxTranslations ();if _cecfa > 0{if _bdbga =_eec .RasterOperation (0,0,_cecfa ,_dfda .Height ,PixClr ,nil ,0,0);_bdbga !=nil {return nil ,_a .Wrap (_bdbga ,_ffbd ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _agdg > 0{if _bdbga =_eec .RasterOperation (_dfda .Width -_agdg ,0,_agdg ,_dfda .Height ,PixClr ,nil ,0,0);
|
|
_bdbga !=nil {return nil ,_a .Wrap (_bdbga ,_ffbd ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _cege > 0{if _bdbga =_eec .RasterOperation (0,0,_dfda .Width ,_cege ,PixClr ,nil ,0,0);_bdbga !=nil {return nil ,_a .Wrap (_bdbga ,_ffbd ,"\u0079\u0070\u0020\u003e\u0020\u0030");
|
|
};};if _caccd > 0{if _bdbga =_eec .RasterOperation (0,_dfda .Height -_caccd ,_dfda .Width ,_caccd ,PixClr ,nil ,0,0);_bdbga !=nil {return nil ,_a .Wrap (_bdbga ,_ffbd ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _eec ,nil ;};func (_dbdcb *byWidth )Len ()int {return len (_dbdcb .Values )};
|
|
func (_beeb *Bitmap )GetPixel (x ,y int )bool {_ceba :=_beeb .GetByteIndex (x ,y );_edde :=_beeb .GetBitOffset (x );_cabd :=uint (7-_edde );if _ceba > len (_beeb .Data )-1{_dc .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 ,_beeb );
|
|
return false ;};if (_beeb .Data [_ceba ]>>_cabd )&0x01>=1{return true ;};return false ;};type BoundaryCondition int ;const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;
|
|
);const _ddad =5000;func (_ebdd *Bitmap )nextOnPixel (_cecf ,_ceef int )(_cegd _bb .Point ,_cacc bool ,_cabgd error ){const _gfda ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_cegd ,_cacc ,_cabgd =_ebdd .nextOnPixelLow (_ebdd .Width ,_ebdd .Height ,_ebdd .RowStride ,_cecf ,_ceef );
|
|
if _cabgd !=nil {return _cegd ,false ,_a .Wrap (_cabgd ,_gfda ,"");};return _cegd ,_cacc ,nil ;};func (_caade *Bitmap )String ()string {var _bfge ="\u000a";for _efg :=0;_efg < _caade .Height ;_efg ++{var _ffae string ;for _cgdc :=0;_cgdc < _caade .Width ;
|
|
_cgdc ++{_bfe :=_caade .GetPixel (_cgdc ,_efg );if _bfe {_ffae +="\u0031";}else {_ffae +="\u0030";};};_bfge +=_ffae +"\u000a";};return _bfge ;};func (_fbgae *ClassedPoints )SortByX (){_fbgae ._aceafa =_fbgae .xSortFunction ();_c .Sort (_fbgae )};func (_bbgd *Boxes )selectWithIndicator (_fadb *_b .NumSlice )(_gcdf *Boxes ,_gaaa error ){const _ebaf ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _bbgd ==nil {return nil ,_a .Error (_ebaf ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _fadb ==nil {return nil ,_a .Error (_ebaf ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if len (*_fadb )!=len (*_bbgd ){return nil ,_a .Error (_ebaf ,"\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 _cfbb ,_fgd int ;for _abef :=0;_abef < len (*_fadb );_abef ++{if _cfbb ,_gaaa =_fadb .GetInt (_abef );_gaaa !=nil {return nil ,_a .Wrap (_gaaa ,_ebaf ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _cfbb ==1{_fgd ++;
|
|
};};if _fgd ==len (*_bbgd ){return _bbgd ,nil ;};_daf :=Boxes {};for _dfcg :=0;_dfcg < len (*_fadb );_dfcg ++{_cfbb =int ((*_fadb )[_dfcg ]);if _cfbb ==0{continue ;};_daf =append (_daf ,(*_bbgd )[_dfcg ]);};_gcdf =&_daf ;return _gcdf ,nil ;};type RasterOperator int ;
|
|
const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func MakePixelSumTab8 ()[]int {return _daea ()};func (_ceefg *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _ggcd ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";
|
|
if len (_ceefg .Values )==0{return nil ,_a .Error (_ggcd ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_cdcb :=&BitmapsArray {};_ceefg .SortByWidth ();_accfe :=-1;_geff :=-1;for _gdab :=0;_gdab < len (_ceefg .Values );
|
|
_gdab ++{_ggbfc :=_ceefg .Values [_gdab ].Width ;if _ggbfc > _accfe {_accfe =_ggbfc ;_geff ++;_cdcb .Values =append (_cdcb .Values ,&Bitmaps {});};_cdcb .Values [_geff ].AddBitmap (_ceefg .Values [_gdab ]);};return _cdcb ,nil ;};func _dfc (_ec *Bitmap ,_bf int )(*Bitmap ,error ){const _fc ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";
|
|
if _ec ==nil {return nil ,_a .Error (_fc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _bf ==1{return _gbc (nil ,_ec );};if _bf !=2&&_bf !=4&&_bf !=8{return nil ,_a .Error (_fc ,"\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");
|
|
};_caad :=_bf *_ec .Width ;_bba :=_bf *_ec .Height ;_cc :=New (_caad ,_bba );var _age error ;switch _bf {case 2:_age =_de (_cc ,_ec );case 4:_age =_bc (_cc ,_ec );case 8:_age =_dfe (_cc ,_ec );};if _age !=nil {return nil ,_a .Wrap (_age ,_fc ,"");};return _cc ,nil ;
|
|
};func init (){for _edd :=0;_edd < 256;_edd ++{_ggc [_edd ]=uint8 (_edd &0x1)+(uint8 (_edd >>1)&0x1)+(uint8 (_edd >>2)&0x1)+(uint8 (_edd >>3)&0x1)+(uint8 (_edd >>4)&0x1)+(uint8 (_edd >>5)&0x1)+(uint8 (_edd >>6)&0x1)+(uint8 (_edd >>7)&0x1);};};func _gdc (_bff *Bitmap ,_ebc *Bitmap ,_fbaa int )(_adb error ){const _gff ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";
|
|
switch _fbaa {case 2:_adb =_de (_bff ,_ebc );case 4:_adb =_bc (_bff ,_ebc );case 8:_adb =_dfe (_bff ,_ebc );default:return _a .Error (_gff ,"\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 _adb !=nil {_adb =_a .Wrap (_adb ,_gff ,"");};return _adb ;};func (_effd MorphProcess )getWidthHeight ()(_gfab ,_aggd int ){return _effd .Arguments [0],_effd .Arguments [1];};func (_adbc *Bitmap )addPadBits ()(_ccbdg error ){const _cdb ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";
|
|
_faa :=_adbc .Width %8;if _faa ==0{return nil ;};_eegd :=_adbc .Width /8;_fcf :=_d .NewReader (_adbc .Data );_aeeg :=make ([]byte ,_adbc .Height *_adbc .RowStride );_gcf :=_d .NewWriterMSB (_aeeg );_gbe :=make ([]byte ,_eegd );var (_ecb int ;_aaa uint64 ;
|
|
);for _ecb =0;_ecb < _adbc .Height ;_ecb ++{if _ ,_ccbdg =_fcf .Read (_gbe );_ccbdg !=nil {return _a .Wrap (_ccbdg ,_cdb ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_ccbdg =_gcf .Write (_gbe );_ccbdg !=nil {return _a .Wrap (_ccbdg ,_cdb ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");
|
|
};if _aaa ,_ccbdg =_fcf .ReadBits (byte (_faa ));_ccbdg !=nil {return _a .Wrap (_ccbdg ,_cdb ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _ccbdg =_gcf .WriteByte (byte (_aaa )<<uint (8-_faa ));_ccbdg !=nil {return _a .Wrap (_ccbdg ,_cdb ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");
|
|
};};_adbc .Data =_gcf .Data ();return nil ;};func _aabb (_gccd ,_ddcd ,_egfc *Bitmap )(*Bitmap ,error ){const _abbf ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _ddcd ==nil {return nil ,_a .Error (_abbf ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
|
|
};if _egfc ==nil {return nil ,_a .Error (_abbf ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _eddc error ;switch {case _gccd ==_ddcd :if _eddc =_gccd .RasterOperation (0,0,_ddcd .Width ,_ddcd .Height ,PixNotSrcAndDst ,_egfc ,0,0);
|
|
_eddc !=nil {return nil ,_a .Wrap (_eddc ,_abbf ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _gccd ==_egfc :if _eddc =_gccd .RasterOperation (0,0,_ddcd .Width ,_ddcd .Height ,PixNotSrcAndDst ,_ddcd ,0,0);_eddc !=nil {return nil ,_a .Wrap (_eddc ,_abbf ,"\u0064 \u003d\u003d\u0020\u0073\u0032");
|
|
};default:_gccd ,_eddc =_gbc (_gccd ,_ddcd );if _eddc !=nil {return nil ,_a .Wrap (_eddc ,_abbf ,"");};if _eddc =_gccd .RasterOperation (0,0,_ddcd .Width ,_ddcd .Height ,PixNotSrcAndDst ,_egfc ,0,0);_eddc !=nil {return nil ,_a .Wrap (_eddc ,_abbf ,"\u0064e\u0066\u0061\u0075\u006c\u0074");
|
|
};};return _gccd ,nil ;};func (_dbde *Bitmap )SetDefaultPixel (){for _eabd :=range _dbde .Data {_dbde .Data [_eabd ]=byte (0xff);};};func _cbfd (_cda ,_fccdb *Bitmap ,_adcf ,_cdgg int )(_bfec error ){const _efddf ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";
|
|
var (_bbge ,_gggd ,_fcabg ,_edbf int ;_cgbb ,_cfef ,_babe ,_daae ,_fcde ,_dcaa ,_afcg byte ;);for _bbge =0;_bbge < _adcf ;_bbge ++{_fcabg =_bbge *_cda .RowStride ;_edbf =_bbge *_fccdb .RowStride ;for _gggd =0;_gggd < _cdgg ;_gggd ++{_cgbb ,_bfec =_cda .GetByte (_fcabg +_gggd );
|
|
if _bfec !=nil {return _a .Wrap (_bfec ,_efddf ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_cfef ,_bfec =_fccdb .GetByte (_edbf +_gggd );if _bfec !=nil {return _a .Wrap (_bfec ,_efddf ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");
|
|
};if _bbge > 0{_babe ,_bfec =_cda .GetByte (_fcabg -_cda .RowStride +_gggd );if _bfec !=nil {return _a .Wrap (_bfec ,_efddf ,"\u0069\u0020\u003e \u0030");};_cgbb |=_babe ;};if _gggd > 0{_daae ,_bfec =_cda .GetByte (_fcabg +_gggd -1);if _bfec !=nil {return _a .Wrap (_bfec ,_efddf ,"\u006a\u0020\u003e \u0030");
|
|
};_cgbb |=_daae <<7;};_cgbb &=_cfef ;if _cgbb ==0||(^_cgbb )==0{if _bfec =_cda .SetByte (_fcabg +_gggd ,_cgbb );_bfec !=nil {return _a .Wrap (_bfec ,_efddf ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");
|
|
};continue ;};for {_afcg =_cgbb ;_cgbb =(_cgbb |(_cgbb >>1)|(_cgbb <<1))&_cfef ;if (_cgbb ^_afcg )==0{if _bfec =_cda .SetByte (_fcabg +_gggd ,_cgbb );_bfec !=nil {return _a .Wrap (_bfec ,_efddf ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
|
|
};break ;};};};};for _bbge =_adcf -1;_bbge >=0;_bbge --{_fcabg =_bbge *_cda .RowStride ;_edbf =_bbge *_fccdb .RowStride ;for _gggd =_cdgg -1;_gggd >=0;_gggd --{if _cgbb ,_bfec =_cda .GetByte (_fcabg +_gggd );_bfec !=nil {return _a .Wrap (_bfec ,_efddf ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");
|
|
};if _cfef ,_bfec =_fccdb .GetByte (_edbf +_gggd );_bfec !=nil {return _a .Wrap (_bfec ,_efddf ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _bbge < _adcf -1{if _fcde ,_bfec =_cda .GetByte (_fcabg +_cda .RowStride +_gggd );
|
|
_bfec !=nil {return _a .Wrap (_bfec ,_efddf ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_cgbb |=_fcde ;};if _gggd < _cdgg -1{if _dcaa ,_bfec =_cda .GetByte (_fcabg +_gggd +1);_bfec !=nil {return _a .Wrap (_bfec ,_efddf ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");
|
|
};_cgbb |=_dcaa >>7;};_cgbb &=_cfef ;if _cgbb ==0||(^_cgbb )==0{if _bfec =_cda .SetByte (_fcabg +_gggd ,_cgbb );_bfec !=nil {return _a .Wrap (_bfec ,_efddf ,"\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 {_afcg =_cgbb ;_cgbb =(_cgbb |(_cgbb >>1)|(_cgbb <<1))&_cfef ;if (_cgbb ^_afcg )==0{if _bfec =_cda .SetByte (_fcabg +_gggd ,_cgbb );_bfec !=nil {return _a .Wrap (_bfec ,_efddf ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
|
|
};break ;};};};};return nil ;};func (_egd *Bitmap )SetPixel (x ,y int ,pixel byte )error {_egda :=_egd .GetByteIndex (x ,y );if _egda > len (_egd .Data )-1{return _a .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",_egda );
|
|
};_gbd :=_egd .GetBitOffset (x );_cabg :=uint (7-_gbd );_eeg :=_egd .Data [_egda ];var _ebab byte ;if pixel ==1{_ebab =_eeg |(pixel &0x01<<_cabg );}else {_ebab =_eeg &^(1<<_cabg );};_egd .Data [_egda ]=_ebab ;return nil ;};func (_agfab *Bitmap )setPadBits (_gfa int ){_bfgg :=8-_agfab .Width %8;
|
|
if _bfgg ==8{return ;};_cfg :=_agfab .Width /8;_debge :=_gcba [_bfgg ];if _gfa ==0{_debge ^=_debge ;};var _faff int ;for _fccd :=0;_fccd < _agfab .Height ;_fccd ++{_faff =_fccd *_agfab .RowStride +_cfg ;if _gfa ==0{_agfab .Data [_faff ]&=_debge ;}else {_agfab .Data [_faff ]|=_debge ;
|
|
};};};func (_gba *Bitmap )Equivalent (s *Bitmap )bool {return _gba .equivalent (s )};func (_fbff *Bitmaps )makeSizeIndicator (_dgae ,_feed int ,_aeff LocationFilter ,_gdbf SizeComparison )(_ffcaa *_b .NumSlice ,_bbbbf error ){const _babgb ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _fbff ==nil {return nil ,_a .Error (_babgb ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _aeff {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_a .Errorf (_babgb ,"\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",_aeff );
|
|
};switch _gdbf {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_a .Errorf (_babgb ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_gdbf );
|
|
};_ffcaa =&_b .NumSlice {};var (_egfe ,_ddbd ,_beae int ;_gfaf *Bitmap ;);for _ ,_gfaf =range _fbff .Values {_egfe =0;_ddbd ,_beae =_gfaf .Width ,_gfaf .Height ;switch _aeff {case LocSelectWidth :if (_gdbf ==SizeSelectIfLT &&_ddbd < _dgae )||(_gdbf ==SizeSelectIfGT &&_ddbd > _dgae )||(_gdbf ==SizeSelectIfLTE &&_ddbd <=_dgae )||(_gdbf ==SizeSelectIfGTE &&_ddbd >=_dgae )||(_gdbf ==SizeSelectIfEQ &&_ddbd ==_dgae ){_egfe =1;
|
|
};case LocSelectHeight :if (_gdbf ==SizeSelectIfLT &&_beae < _feed )||(_gdbf ==SizeSelectIfGT &&_beae > _feed )||(_gdbf ==SizeSelectIfLTE &&_beae <=_feed )||(_gdbf ==SizeSelectIfGTE &&_beae >=_feed )||(_gdbf ==SizeSelectIfEQ &&_beae ==_feed ){_egfe =1;
|
|
};case LocSelectIfEither :if (_gdbf ==SizeSelectIfLT &&(_ddbd < _dgae ||_beae < _feed ))||(_gdbf ==SizeSelectIfGT &&(_ddbd > _dgae ||_beae > _feed ))||(_gdbf ==SizeSelectIfLTE &&(_ddbd <=_dgae ||_beae <=_feed ))||(_gdbf ==SizeSelectIfGTE &&(_ddbd >=_dgae ||_beae >=_feed ))||(_gdbf ==SizeSelectIfEQ &&(_ddbd ==_dgae ||_beae ==_feed )){_egfe =1;
|
|
};case LocSelectIfBoth :if (_gdbf ==SizeSelectIfLT &&(_ddbd < _dgae &&_beae < _feed ))||(_gdbf ==SizeSelectIfGT &&(_ddbd > _dgae &&_beae > _feed ))||(_gdbf ==SizeSelectIfLTE &&(_ddbd <=_dgae &&_beae <=_feed ))||(_gdbf ==SizeSelectIfGTE &&(_ddbd >=_dgae &&_beae >=_feed ))||(_gdbf ==SizeSelectIfEQ &&(_ddbd ==_dgae &&_beae ==_feed )){_egfe =1;
|
|
};};_ffcaa .AddInt (_egfe );};return _ffcaa ,nil ;};func TstESymbol (t *_ac .T ,scale ...int )*Bitmap {_aacd ,_cgac :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_gd .NoError (t ,_cgac );return TstGetScaledSymbol (t ,_aacd ,scale ...);};func _feeg (_ffcfge *Bitmap ,_ccc ...MorphProcess )(_acdb *Bitmap ,_fcgc error ){const _bdde ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";
|
|
if _ffcfge ==nil {return nil ,_a .Error (_bdde ,"\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 (_ccc )==0{return nil ,_a .Error (_bdde ,"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 _fcgc =_eacf (_ccc ...);
|
|
_fcgc !=nil {return nil ,_a .Wrap (_fcgc ,_bdde ,"");};var _dgeg ,_ddfg ,_eeee int ;_acdb =_ffcfge .Copy ();for _ ,_eef :=range _ccc {switch _eef .Operation {case MopDilation :_dgeg ,_ddfg =_eef .getWidthHeight ();_acdb ,_fcgc =DilateBrick (nil ,_acdb ,_dgeg ,_ddfg );
|
|
if _fcgc !=nil {return nil ,_a .Wrap (_fcgc ,_bdde ,"");};case MopErosion :_dgeg ,_ddfg =_eef .getWidthHeight ();_acdb ,_fcgc =_gbdc (nil ,_acdb ,_dgeg ,_ddfg );if _fcgc !=nil {return nil ,_a .Wrap (_fcgc ,_bdde ,"");};case MopOpening :_dgeg ,_ddfg =_eef .getWidthHeight ();
|
|
_acdb ,_fcgc =_gdffa (nil ,_acdb ,_dgeg ,_ddfg );if _fcgc !=nil {return nil ,_a .Wrap (_fcgc ,_bdde ,"");};case MopClosing :_dgeg ,_ddfg =_eef .getWidthHeight ();_acdb ,_fcgc =_dbf (nil ,_acdb ,_dgeg ,_ddfg );if _fcgc !=nil {return nil ,_a .Wrap (_fcgc ,_bdde ,"");
|
|
};case MopRankBinaryReduction :_acdb ,_fcgc =_aff (_acdb ,_eef .Arguments ...);if _fcgc !=nil {return nil ,_a .Wrap (_fcgc ,_bdde ,"");};case MopReplicativeBinaryExpansion :_acdb ,_fcgc =_cebc (_acdb ,_eef .Arguments [0]);if _fcgc !=nil {return nil ,_a .Wrap (_fcgc ,_bdde ,"");
|
|
};case MopAddBorder :_eeee =_eef .Arguments [0];_acdb ,_fcgc =_acdb .AddBorder (_eeee ,0);if _fcgc !=nil {return nil ,_a .Wrap (_fcgc ,_bdde ,"");};default:return nil ,_a .Error (_bdde ,"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 _eeee > 0{_acdb ,_fcgc =_acdb .RemoveBorder (_eeee );if _fcgc !=nil {return nil ,_a .Wrap (_fcgc ,_bdde ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _acdb ,nil ;};type MorphProcess struct{Operation MorphOperation ;
|
|
Arguments []int ;};func TstWriteSymbols (t *_ac .T ,bms *Bitmaps ,src *Bitmap ){for _aadgd :=0;_aadgd < bms .Size ();_aadgd ++{_dfef :=bms .Values [_aadgd ];_fed :=bms .Boxes [_aadgd ];_fdde :=src .RasterOperation (_fed .Min .X ,_fed .Min .Y ,_dfef .Width ,_dfef .Height ,PixSrc ,_dfef ,0,0);
|
|
_gd .NoError (t ,_fdde );};};func (_agabee *Bitmaps )SortByHeight (){_bfga :=(*byHeight )(_agabee );_c .Sort (_bfga )};func (_ggbf *Bitmap )inverseData (){if _cebf :=_ggbf .RasterOperation (0,0,_ggbf .Width ,_ggbf .Height ,PixNotDst ,nil ,0,0);_cebf !=nil {_dc .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_cebf );
|
|
};if _ggbf .Color ==Chocolate {_ggbf .Color =Vanilla ;}else {_ggbf .Color =Chocolate ;};};func _ggabe (_eabge ,_dcdf ,_decb *Bitmap ,_fdfg int )(*Bitmap ,error ){const _cbced ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";
|
|
if _dcdf ==nil {return nil ,_a .Error (_cbced ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _decb ==nil {return nil ,_a .Error (_cbced ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
|
|
};if _fdfg !=4&&_fdfg !=8{return nil ,_a .Error (_cbced ,"\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 _dcdbdg error ;
|
|
_eabge ,_dcdbdg =_gbc (_eabge ,_dcdf );if _dcdbdg !=nil {return nil ,_a .Wrap (_dcdbdg ,_cbced ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_eced :=_dcdf .createTemplate ();_decb .setPadBits (0);for _bdfc :=0;
|
|
_bdfc < _ddad ;_bdfc ++{_eced ,_dcdbdg =_gbc (_eced ,_eabge );if _dcdbdg !=nil {return nil ,_a .Wrapf (_dcdbdg ,_cbced ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_bdfc );};if _dcdbdg =_eagf (_eabge ,_decb ,_fdfg );
|
|
_dcdbdg !=nil {return nil ,_a .Wrapf (_dcdbdg ,_cbced ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_bdfc );};if _eced .Equals (_eabge ){break ;};};return _eabge ,nil ;};func (_aagcd *Bitmaps )WidthSorter ()func (_bgfdg ,_dbcad int )bool {return func (_bbede ,_bgedf int )bool {return _aagcd .Values [_bbede ].Width < _aagcd .Values [_bgedf ].Width };
|
|
};func _dadf (_fgca *Bitmap ,_cafd ,_fgda ,_ebbec ,_ceegf int ,_bcgb RasterOperator ,_ddce *Bitmap ,_ceca ,_dgdf int )error {var (_dabfe bool ;_ecde bool ;_fafa int ;_cbee int ;_acfcg int ;_cfbc bool ;_dbfe byte ;_ebdfc int ;_eggd int ;_efab int ;_bffe ,_fabd int ;
|
|
);_bbbb :=8-(_cafd &7);_dfea :=_gcba [_bbbb ];_cafdc :=_fgca .RowStride *_fgda +(_cafd >>3);_dbbb :=_ddce .RowStride *_dgdf +(_ceca >>3);if _ebbec < _bbbb {_dabfe =true ;_dfea &=_dfba [8-_bbbb +_ebbec ];};if !_dabfe {_fafa =(_ebbec -_bbbb )>>3;if _fafa > 0{_ecde =true ;
|
|
_cbee =_cafdc +1;_acfcg =_dbbb +1;};};_ebdfc =(_cafd +_ebbec )&7;if !(_dabfe ||_ebdfc ==0){_cfbc =true ;_dbfe =_dfba [_ebdfc ];_eggd =_cafdc +1+_fafa ;_efab =_dbbb +1+_fafa ;};switch _bcgb {case PixSrc :for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_cafdc ]=_ecgg (_fgca .Data [_cafdc ],_ddce .Data [_dbbb ],_dfea );
|
|
_cafdc +=_fgca .RowStride ;_dbbb +=_ddce .RowStride ;};if _ecde {for _bffe =0;_bffe < _ceegf ;_bffe ++{for _fabd =0;_fabd < _fafa ;_fabd ++{_fgca .Data [_cbee +_fabd ]=_ddce .Data [_acfcg +_fabd ];};_cbee +=_fgca .RowStride ;_acfcg +=_ddce .RowStride ;
|
|
};};if _cfbc {for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_eggd ]=_ecgg (_fgca .Data [_eggd ],_ddce .Data [_efab ],_dbfe );_eggd +=_fgca .RowStride ;_efab +=_ddce .RowStride ;};};case PixNotSrc :for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_cafdc ]=_ecgg (_fgca .Data [_cafdc ],^_ddce .Data [_dbbb ],_dfea );
|
|
_cafdc +=_fgca .RowStride ;_dbbb +=_ddce .RowStride ;};if _ecde {for _bffe =0;_bffe < _ceegf ;_bffe ++{for _fabd =0;_fabd < _fafa ;_fabd ++{_fgca .Data [_cbee +_fabd ]=^_ddce .Data [_acfcg +_fabd ];};_cbee +=_fgca .RowStride ;_acfcg +=_ddce .RowStride ;
|
|
};};if _cfbc {for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_eggd ]=_ecgg (_fgca .Data [_eggd ],^_ddce .Data [_efab ],_dbfe );_eggd +=_fgca .RowStride ;_efab +=_ddce .RowStride ;};};case PixSrcOrDst :for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_cafdc ]=_ecgg (_fgca .Data [_cafdc ],_ddce .Data [_dbbb ]|_fgca .Data [_cafdc ],_dfea );
|
|
_cafdc +=_fgca .RowStride ;_dbbb +=_ddce .RowStride ;};if _ecde {for _bffe =0;_bffe < _ceegf ;_bffe ++{for _fabd =0;_fabd < _fafa ;_fabd ++{_fgca .Data [_cbee +_fabd ]|=_ddce .Data [_acfcg +_fabd ];};_cbee +=_fgca .RowStride ;_acfcg +=_ddce .RowStride ;
|
|
};};if _cfbc {for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_eggd ]=_ecgg (_fgca .Data [_eggd ],_ddce .Data [_efab ]|_fgca .Data [_eggd ],_dbfe );_eggd +=_fgca .RowStride ;_efab +=_ddce .RowStride ;};};case PixSrcAndDst :for _bffe =0;_bffe < _ceegf ;
|
|
_bffe ++{_fgca .Data [_cafdc ]=_ecgg (_fgca .Data [_cafdc ],_ddce .Data [_dbbb ]&_fgca .Data [_cafdc ],_dfea );_cafdc +=_fgca .RowStride ;_dbbb +=_ddce .RowStride ;};if _ecde {for _bffe =0;_bffe < _ceegf ;_bffe ++{for _fabd =0;_fabd < _fafa ;_fabd ++{_fgca .Data [_cbee +_fabd ]&=_ddce .Data [_acfcg +_fabd ];
|
|
};_cbee +=_fgca .RowStride ;_acfcg +=_ddce .RowStride ;};};if _cfbc {for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_eggd ]=_ecgg (_fgca .Data [_eggd ],_ddce .Data [_efab ]&_fgca .Data [_eggd ],_dbfe );_eggd +=_fgca .RowStride ;_efab +=_ddce .RowStride ;
|
|
};};case PixSrcXorDst :for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_cafdc ]=_ecgg (_fgca .Data [_cafdc ],_ddce .Data [_dbbb ]^_fgca .Data [_cafdc ],_dfea );_cafdc +=_fgca .RowStride ;_dbbb +=_ddce .RowStride ;};if _ecde {for _bffe =0;_bffe < _ceegf ;
|
|
_bffe ++{for _fabd =0;_fabd < _fafa ;_fabd ++{_fgca .Data [_cbee +_fabd ]^=_ddce .Data [_acfcg +_fabd ];};_cbee +=_fgca .RowStride ;_acfcg +=_ddce .RowStride ;};};if _cfbc {for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_eggd ]=_ecgg (_fgca .Data [_eggd ],_ddce .Data [_efab ]^_fgca .Data [_eggd ],_dbfe );
|
|
_eggd +=_fgca .RowStride ;_efab +=_ddce .RowStride ;};};case PixNotSrcOrDst :for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_cafdc ]=_ecgg (_fgca .Data [_cafdc ],^(_ddce .Data [_dbbb ])|_fgca .Data [_cafdc ],_dfea );_cafdc +=_fgca .RowStride ;_dbbb +=_ddce .RowStride ;
|
|
};if _ecde {for _bffe =0;_bffe < _ceegf ;_bffe ++{for _fabd =0;_fabd < _fafa ;_fabd ++{_fgca .Data [_cbee +_fabd ]|=^(_ddce .Data [_acfcg +_fabd ]);};_cbee +=_fgca .RowStride ;_acfcg +=_ddce .RowStride ;};};if _cfbc {for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_eggd ]=_ecgg (_fgca .Data [_eggd ],^(_ddce .Data [_efab ])|_fgca .Data [_eggd ],_dbfe );
|
|
_eggd +=_fgca .RowStride ;_efab +=_ddce .RowStride ;};};case PixNotSrcAndDst :for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_cafdc ]=_ecgg (_fgca .Data [_cafdc ],^(_ddce .Data [_dbbb ])&_fgca .Data [_cafdc ],_dfea );_cafdc +=_fgca .RowStride ;_dbbb +=_ddce .RowStride ;
|
|
};if _ecde {for _bffe =0;_bffe < _ceegf ;_bffe ++{for _fabd =0;_fabd < _fafa ;_fabd ++{_fgca .Data [_cbee +_fabd ]&=^_ddce .Data [_acfcg +_fabd ];};_cbee +=_fgca .RowStride ;_acfcg +=_ddce .RowStride ;};};if _cfbc {for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_eggd ]=_ecgg (_fgca .Data [_eggd ],^(_ddce .Data [_efab ])&_fgca .Data [_eggd ],_dbfe );
|
|
_eggd +=_fgca .RowStride ;_efab +=_ddce .RowStride ;};};case PixSrcOrNotDst :for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_cafdc ]=_ecgg (_fgca .Data [_cafdc ],_ddce .Data [_dbbb ]|^(_fgca .Data [_cafdc ]),_dfea );_cafdc +=_fgca .RowStride ;_dbbb +=_ddce .RowStride ;
|
|
};if _ecde {for _bffe =0;_bffe < _ceegf ;_bffe ++{for _fabd =0;_fabd < _fafa ;_fabd ++{_fgca .Data [_cbee +_fabd ]=_ddce .Data [_acfcg +_fabd ]|^(_fgca .Data [_cbee +_fabd ]);};_cbee +=_fgca .RowStride ;_acfcg +=_ddce .RowStride ;};};if _cfbc {for _bffe =0;
|
|
_bffe < _ceegf ;_bffe ++{_fgca .Data [_eggd ]=_ecgg (_fgca .Data [_eggd ],_ddce .Data [_efab ]|^(_fgca .Data [_eggd ]),_dbfe );_eggd +=_fgca .RowStride ;_efab +=_ddce .RowStride ;};};case PixSrcAndNotDst :for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_cafdc ]=_ecgg (_fgca .Data [_cafdc ],_ddce .Data [_dbbb ]&^(_fgca .Data [_cafdc ]),_dfea );
|
|
_cafdc +=_fgca .RowStride ;_dbbb +=_ddce .RowStride ;};if _ecde {for _bffe =0;_bffe < _ceegf ;_bffe ++{for _fabd =0;_fabd < _fafa ;_fabd ++{_fgca .Data [_cbee +_fabd ]=_ddce .Data [_acfcg +_fabd ]&^(_fgca .Data [_cbee +_fabd ]);};_cbee +=_fgca .RowStride ;
|
|
_acfcg +=_ddce .RowStride ;};};if _cfbc {for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_eggd ]=_ecgg (_fgca .Data [_eggd ],_ddce .Data [_efab ]&^(_fgca .Data [_eggd ]),_dbfe );_eggd +=_fgca .RowStride ;_efab +=_ddce .RowStride ;};};case PixNotPixSrcOrDst :for _bffe =0;
|
|
_bffe < _ceegf ;_bffe ++{_fgca .Data [_cafdc ]=_ecgg (_fgca .Data [_cafdc ],^(_ddce .Data [_dbbb ]|_fgca .Data [_cafdc ]),_dfea );_cafdc +=_fgca .RowStride ;_dbbb +=_ddce .RowStride ;};if _ecde {for _bffe =0;_bffe < _ceegf ;_bffe ++{for _fabd =0;_fabd < _fafa ;
|
|
_fabd ++{_fgca .Data [_cbee +_fabd ]=^(_ddce .Data [_acfcg +_fabd ]|_fgca .Data [_cbee +_fabd ]);};_cbee +=_fgca .RowStride ;_acfcg +=_ddce .RowStride ;};};if _cfbc {for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_eggd ]=_ecgg (_fgca .Data [_eggd ],^(_ddce .Data [_efab ]|_fgca .Data [_eggd ]),_dbfe );
|
|
_eggd +=_fgca .RowStride ;_efab +=_ddce .RowStride ;};};case PixNotPixSrcAndDst :for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_cafdc ]=_ecgg (_fgca .Data [_cafdc ],^(_ddce .Data [_dbbb ]&_fgca .Data [_cafdc ]),_dfea );_cafdc +=_fgca .RowStride ;_dbbb +=_ddce .RowStride ;
|
|
};if _ecde {for _bffe =0;_bffe < _ceegf ;_bffe ++{for _fabd =0;_fabd < _fafa ;_fabd ++{_fgca .Data [_cbee +_fabd ]=^(_ddce .Data [_acfcg +_fabd ]&_fgca .Data [_cbee +_fabd ]);};_cbee +=_fgca .RowStride ;_acfcg +=_ddce .RowStride ;};};if _cfbc {for _bffe =0;
|
|
_bffe < _ceegf ;_bffe ++{_fgca .Data [_eggd ]=_ecgg (_fgca .Data [_eggd ],^(_ddce .Data [_efab ]&_fgca .Data [_eggd ]),_dbfe );_eggd +=_fgca .RowStride ;_efab +=_ddce .RowStride ;};};case PixNotPixSrcXorDst :for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_cafdc ]=_ecgg (_fgca .Data [_cafdc ],^(_ddce .Data [_dbbb ]^_fgca .Data [_cafdc ]),_dfea );
|
|
_cafdc +=_fgca .RowStride ;_dbbb +=_ddce .RowStride ;};if _ecde {for _bffe =0;_bffe < _ceegf ;_bffe ++{for _fabd =0;_fabd < _fafa ;_fabd ++{_fgca .Data [_cbee +_fabd ]=^(_ddce .Data [_acfcg +_fabd ]^_fgca .Data [_cbee +_fabd ]);};_cbee +=_fgca .RowStride ;
|
|
_acfcg +=_ddce .RowStride ;};};if _cfbc {for _bffe =0;_bffe < _ceegf ;_bffe ++{_fgca .Data [_eggd ]=_ecgg (_fgca .Data [_eggd ],^(_ddce .Data [_efab ]^_fgca .Data [_eggd ]),_dbfe );_eggd +=_fgca .RowStride ;_efab +=_ddce .RowStride ;};};default:_dc .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",_bcgb );
|
|
return _a .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 ;};type MorphOperation int ;func _eacf (_gcbc ...MorphProcess )(_face error ){const _dcf ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _adaa ,_becgb int ;for _bace ,_caac :=range _gcbc {if _face =_caac .verify (_bace ,&_adaa ,&_becgb );
|
|
_face !=nil {return _a .Wrap (_face ,_dcf ,"");};};if _becgb !=0&&_adaa !=0{return _a .Error (_dcf ,"\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 ;};func (_cdccf *byWidth )Less (i ,j int )bool {return _cdccf .Values [i ].Width < _cdccf .Values [j ].Width };func TstImageBitmapInverseData ()[]byte {_agdd :=_fbdf .Copy ();_agdd .InverseData ();return _agdd .Data ;};func _bbgg (_dgfcb *Bitmap ,_fgcb *_b .Stack ,_cgfe ,_effa int )(_fbfdd *_bb .Rectangle ,_cfeg error ){const _ccdcf ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
|
|
if _dgfcb ==nil {return nil ,_a .Error (_ccdcf ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _fgcb ==nil {return nil ,_a .Error (_ccdcf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
|
|
};_aeb ,_deag :=_dgfcb .Width ,_dgfcb .Height ;_efaff :=_aeb -1;_fdfe :=_deag -1;if _cgfe < 0||_cgfe > _efaff ||_effa < 0||_effa > _fdfe ||!_dgfcb .GetPixel (_cgfe ,_effa ){return nil ,nil ;};var _fdee *_bb .Rectangle ;_fdee ,_cfeg =Rect (100000,100000,0,0);
|
|
if _cfeg !=nil {return nil ,_a .Wrap (_cfeg ,_ccdcf ,"");};if _cfeg =_dfbf (_fgcb ,_cgfe ,_cgfe ,_effa ,1,_fdfe ,_fdee );_cfeg !=nil {return nil ,_a .Wrap (_cfeg ,_ccdcf ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cfeg =_dfbf (_fgcb ,_cgfe ,_cgfe ,_effa +1,-1,_fdfe ,_fdee );
|
|
_cfeg !=nil {return nil ,_a .Wrap (_cfeg ,_ccdcf ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_fdee .Min .X ,_fdee .Max .X =_cgfe ,_cgfe ;_fdee .Min .Y ,_fdee .Max .Y =_effa ,_effa ;var (_bddc *fillSegment ;
|
|
_geac int ;);for _fgcb .Len ()> 0{if _bddc ,_cfeg =_eddcg (_fgcb );_cfeg !=nil {return nil ,_a .Wrap (_cfeg ,_ccdcf ,"");};_effa =_bddc ._eeaa ;for _cgfe =_bddc ._daaee ;_cgfe >=0&&_dgfcb .GetPixel (_cgfe ,_effa );_cgfe --{if _cfeg =_dgfcb .SetPixel (_cgfe ,_effa ,0);
|
|
_cfeg !=nil {return nil ,_a .Wrap (_cfeg ,_ccdcf ,"");};};if _cgfe >=_bddc ._daaee {for _cgfe ++;_cgfe <=_bddc ._dgdcf &&_cgfe <=_efaff &&!_dgfcb .GetPixel (_cgfe ,_effa );_cgfe ++{};_geac =_cgfe ;if !(_cgfe <=_bddc ._dgdcf &&_cgfe <=_efaff ){continue ;
|
|
};}else {_geac =_cgfe +1;if _geac < _bddc ._daaee -1{if _cfeg =_dfbf (_fgcb ,_geac ,_bddc ._daaee -1,_bddc ._eeaa ,-_bddc ._abfc ,_fdfe ,_fdee );_cfeg !=nil {return nil ,_a .Wrap (_cfeg ,_ccdcf ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
|
|
};};_cgfe =_bddc ._daaee +1;};for {for ;_cgfe <=_efaff &&_dgfcb .GetPixel (_cgfe ,_effa );_cgfe ++{if _cfeg =_dgfcb .SetPixel (_cgfe ,_effa ,0);_cfeg !=nil {return nil ,_a .Wrap (_cfeg ,_ccdcf ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _cfeg =_dfbf (_fgcb ,_geac ,_cgfe -1,_bddc ._eeaa ,_bddc ._abfc ,_fdfe ,_fdee );
|
|
_cfeg !=nil {return nil ,_a .Wrap (_cfeg ,_ccdcf ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cgfe > _bddc ._dgdcf +1{if _cfeg =_dfbf (_fgcb ,_bddc ._dgdcf +1,_cgfe -1,_bddc ._eeaa ,-_bddc ._abfc ,_fdfe ,_fdee );_cfeg !=nil {return nil ,_a .Wrap (_cfeg ,_ccdcf ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};for _cgfe ++;_cgfe <=_bddc ._dgdcf &&_cgfe <=_efaff &&!_dgfcb .GetPixel (_cgfe ,_effa );_cgfe ++{};_geac =_cgfe ;if !(_cgfe <=_bddc ._dgdcf &&_cgfe <=_efaff ){break ;};};};_fdee .Max .X ++;_fdee .Max .Y ++;return _fdee ,nil ;};func (_dafc Points )Size ()int {return len (_dafc )};
|
|
func (_ade *Bitmap )countPixels ()int {var (_bfed int ;_gddg uint8 ;_gbfg byte ;_agff int ;);_gcg :=_ade .RowStride ;_cfce :=uint (_ade .Width &0x07);if _cfce !=0{_gddg =uint8 ((0xff<<(8-_cfce ))&0xff);_gcg --;};for _dff :=0;_dff < _ade .Height ;_dff ++{for _agff =0;
|
|
_agff < _gcg ;_agff ++{_gbfg =_ade .Data [_dff *_ade .RowStride +_agff ];_bfed +=int (_ggc [_gbfg ]);};if _cfce !=0{_bfed +=int (_ggc [_ade .Data [_dff *_ade .RowStride +_agff ]&_gddg ]);};};return _bfed ;};func (_gabf *ClassedPoints )validateIntSlice ()error {const _bcae ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";
|
|
for _ ,_beeg :=range _gabf .IntSlice {if _beeg >=(_gabf .Points .Size ()){return _a .Errorf (_bcae ,"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",_beeg ,_gabf .Points .Size ());
|
|
};};return nil ;};func (_ccfa *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _ccfa .addBorderGeneral (left ,right ,top ,bot ,val );};func _gad (_egf ,_cba *Bitmap ,_gfc int ,_faca []byte ,_caae int )(_gaa error ){const _bcdb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";
|
|
var (_fdf ,_ddg ,_efb ,_bbe ,_gca ,_beb ,_affg ,_dea int ;_dca ,_ede uint32 ;_eab ,_edeg byte ;_aag uint16 ;);_bcbe :=make ([]byte ,4);_bdf :=make ([]byte ,4);for _efb =0;_efb < _egf .Height -1;_efb ,_bbe =_efb +2,_bbe +1{_fdf =_efb *_egf .RowStride ;_ddg =_bbe *_cba .RowStride ;
|
|
for _gca ,_beb =0,0;_gca < _caae ;_gca ,_beb =_gca +4,_beb +1{for _affg =0;_affg < 4;_affg ++{_dea =_fdf +_gca +_affg ;if _dea <=len (_egf .Data )-1&&_dea < _fdf +_egf .RowStride {_bcbe [_affg ]=_egf .Data [_dea ];}else {_bcbe [_affg ]=0x00;};_dea =_fdf +_egf .RowStride +_gca +_affg ;
|
|
if _dea <=len (_egf .Data )-1&&_dea < _fdf +(2*_egf .RowStride ){_bdf [_affg ]=_egf .Data [_dea ];}else {_bdf [_affg ]=0x00;};};_dca =_ca .BigEndian .Uint32 (_bcbe );_ede =_ca .BigEndian .Uint32 (_bdf );_ede &=_dca ;_ede &=_ede <<1;_ede &=0xaaaaaaaa;_dca =_ede |(_ede <<7);
|
|
_eab =byte (_dca >>24);_edeg =byte ((_dca >>8)&0xff);_dea =_ddg +_beb ;if _dea +1==len (_cba .Data )-1||_dea +1>=_ddg +_cba .RowStride {_cba .Data [_dea ]=_faca [_eab ];if _gaa =_cba .SetByte (_dea ,_faca [_eab ]);_gaa !=nil {return _a .Wrapf (_gaa ,_bcdb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_dea );
|
|
};}else {_aag =(uint16 (_faca [_eab ])<<8)|uint16 (_faca [_edeg ]);if _gaa =_cba .setTwoBytes (_dea ,_aag );_gaa !=nil {return _a .Wrapf (_gaa ,_bcdb ,"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",_dea );
|
|
};_beb ++;};};};return nil ;};func TstDSymbol (t *_ac .T ,scale ...int )*Bitmap {_eadf ,_agea :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_gd .NoError (t ,_agea );return TstGetScaledSymbol (t ,_eadf ,scale ...);};func _fcedd (_adf ,_gcdd *Bitmap ,_cdce ,_aad ,_afga ,_bbegd ,_fec ,_afca ,_acda ,_gbb int ,_dbdea CombinationOperator ,_fcd int )error {var _fdab int ;
|
|
_bcdg :=func (){_fdab ++;_afga +=_gcdd .RowStride ;_bbegd +=_adf .RowStride ;_fec +=_adf .RowStride };for _fdab =_cdce ;_fdab < _aad ;_bcdg (){var _bbfb uint16 ;_agcc :=_afga ;for _cbb :=_bbegd ;_cbb <=_fec ;_cbb ++{_bfff ,_fgcge :=_gcdd .GetByte (_agcc );
|
|
if _fgcge !=nil {return _fgcge ;};_eac ,_fgcge :=_adf .GetByte (_cbb );if _fgcge !=nil {return _fgcge ;};_bbfb =(_bbfb |(uint16 (_eac )&0xff))<<uint (_gbb );_eac =byte (_bbfb >>8);if _fgcge =_gcdd .SetByte (_agcc ,_caafb (_bfff ,_eac ,_dbdea ));_fgcge !=nil {return _fgcge ;
|
|
};_agcc ++;_bbfb <<=uint (_acda );if _cbb ==_fec {_eac =byte (_bbfb >>(8-uint8 (_gbb )));if _fcd !=0{_eac =_ddca (uint (8+_afca ),_eac );};_bfff ,_fgcge =_gcdd .GetByte (_agcc );if _fgcge !=nil {return _fgcge ;};if _fgcge =_gcdd .SetByte (_agcc ,_caafb (_bfff ,_eac ,_dbdea ));
|
|
_fgcge !=nil {return _fgcge ;};};};};return nil ;};func (_bcee *Bitmaps )AddBox (box *_bb .Rectangle ){_bcee .Boxes =append (_bcee .Boxes ,box )};func TstImageBitmap ()*Bitmap {return _fbdf .Copy ()};func Extract (roi _bb .Rectangle ,src *Bitmap )(*Bitmap ,error ){_bedg :=New (roi .Dx (),roi .Dy ());
|
|
_gfeg :=roi .Min .X &0x07;_adfc :=8-_gfeg ;_cbc :=uint (8-_bedg .Width &0x07);_aeea :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_dcg :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_bfgd :=_bedg .RowStride ==_dcg +1-_aeea ;var _debc int ;for _dcde :=roi .Min .Y ;
|
|
_dcde < roi .Max .Y ;_dcde ++{_bacf :=_aeea ;_cace :=_debc ;switch {case _aeea ==_dcg :_ggab ,_becfd :=src .GetByte (_bacf );if _becfd !=nil {return nil ,_becfd ;};_ggab <<=uint (_gfeg );_becfd =_bedg .SetByte (_cace ,_ddca (_cbc ,_ggab ));if _becfd !=nil {return nil ,_becfd ;
|
|
};case _gfeg ==0:for _eegg :=_aeea ;_eegg <=_dcg ;_eegg ++{_gcfc ,_ddfca :=src .GetByte (_bacf );if _ddfca !=nil {return nil ,_ddfca ;};_bacf ++;if _eegg ==_dcg &&_bfgd {_gcfc =_ddca (_cbc ,_gcfc );};_ddfca =_bedg .SetByte (_cace ,_gcfc );if _ddfca !=nil {return nil ,_ddfca ;
|
|
};_cace ++;};default:_bdff :=_cebfg (src ,_bedg ,uint (_gfeg ),uint (_adfc ),_cbc ,_aeea ,_dcg ,_bfgd ,_bacf ,_cace );if _bdff !=nil {return nil ,_bdff ;};};_aeea +=src .RowStride ;_dcg +=src .RowStride ;_debc +=_bedg .RowStride ;};return _bedg ,nil ;};
|
|
type LocationFilter int ;func _ffb ()(_afd [256]uint16 ){for _abf :=0;_abf < 256;_abf ++{if _abf &0x01!=0{_afd [_abf ]|=0x3;};if _abf &0x02!=0{_afd [_abf ]|=0xc;};if _abf &0x04!=0{_afd [_abf ]|=0x30;};if _abf &0x08!=0{_afd [_abf ]|=0xc0;};if _abf &0x10!=0{_afd [_abf ]|=0x300;
|
|
};if _abf &0x20!=0{_afd [_abf ]|=0xc00;};if _abf &0x40!=0{_afd [_abf ]|=0x3000;};if _abf &0x80!=0{_afd [_abf ]|=0xc000;};};return _afd ;};func (_fffb *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _gfdaa (_fffb ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
|
|
};type CombinationOperator int ;func _dcac (_fecae ,_aaaba *Bitmap ,_ggaf ,_bbag int )(*Bitmap ,error ){const _bfbc ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _aaaba ==nil {_dc .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 ,_a .Error (_bfbc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _ggaf < 1||_bbag < 1{return nil ,_a .Error (_bfbc ,"\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 _ggaf ==1&&_bbag ==1{_dggg ,_cdee :=_gbc (_fecae ,_aaaba );if _cdee !=nil {return nil ,_a .Wrap (_cdee ,_bfbc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _dggg ,nil ;};if _ggaf ==1||_bbag ==1{_egdad :=SelCreateBrick (_bbag ,_ggaf ,_bbag /2,_ggaf /2,SelHit );_efbe ,_edee :=_fdc (_fecae ,_aaaba ,_egdad );if _edee !=nil {return nil ,_a .Wrap (_edee ,_bfbc ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _efbe ,nil ;};_eae :=SelCreateBrick (1,_ggaf ,0,_ggaf /2,SelHit );_agfc :=SelCreateBrick (_bbag ,1,_bbag /2,0,SelHit );_ecdb ,_gbeb :=_fdc (nil ,_aaaba ,_eae );if _gbeb !=nil {return nil ,_a .Wrap (_gbeb ,_bfbc ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};_fecae ,_gbeb =_fdc (_fecae ,_ecdb ,_agfc );if _gbeb !=nil {return nil ,_a .Wrap (_gbeb ,_bfbc ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _fecae ,nil ;};func TstWordBitmapWithSpaces (t *_ac .T ,scale ...int )*Bitmap {_gfcfb :=1;
|
|
if len (scale )> 0{_gfcfb =scale [0];};_fbbdg :=3;_bbdbb :=9+7+15+2*_fbbdg +2*_fbbdg ;_dfbec :=5+_fbbdg +5+2*_fbbdg ;_facee :=New (_bbdbb *_gfcfb ,_dfbec *_gfcfb );_ddgb :=&Bitmaps {};var _addea *int ;_fbbdg *=_gfcfb ;_fcdab :=_fbbdg ;_addea =&_fcdab ;
|
|
_egcad :=_fbbdg ;_bfdc :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,1*_gfcfb );_bfdc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,_fbbdg );_bfdc =TstISymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,1*_gfcfb );
|
|
_bfdc =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,_fbbdg );_bfdc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,1*_gfcfb );_bfdc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,1*_gfcfb );
|
|
_bfdc =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,0);*_addea =_fbbdg ;_egcad =5*_gfcfb +_fbbdg ;_bfdc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,1*_gfcfb );_bfdc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,_fbbdg );
|
|
_bfdc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,1*_gfcfb );_bfdc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,1*_gfcfb );_bfdc =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,1*_gfcfb );
|
|
_bfdc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,1*_gfcfb );_bfdc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ddgb ,_bfdc ,_addea ,_egcad ,0);TstWriteSymbols (t ,_ddgb ,_facee );return _facee ;};func TstOSymbol (t *_ac .T ,scale ...int )*Bitmap {_bade ,_cgfd :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});
|
|
_gd .NoError (t ,_cgfd );return TstGetScaledSymbol (t ,_bade ,scale ...);};func _de (_ge ,_fa *Bitmap )(_ae error ){const _ab ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_da :=_fa .RowStride ;
|
|
_af :=_ge .RowStride ;var (_ff byte ;_ag uint16 ;_ee ,_aa ,_cf ,_bbc ,_abb int ;);for _cf =0;_cf < _fa .Height ;_cf ++{_ee =_cf *_da ;_aa =2*_cf *_af ;for _bbc =0;_bbc < _da ;_bbc ++{_ff =_fa .Data [_ee +_bbc ];_ag =_gbfe [_ff ];_abb =_aa +_bbc *2;if _ge .RowStride !=_fa .RowStride *2&&(_bbc +1)*2> _ge .RowStride {_ae =_ge .SetByte (_abb ,byte (_ag >>8));
|
|
}else {_ae =_ge .setTwoBytes (_abb ,_ag );};if _ae !=nil {return _a .Wrap (_ae ,_ab ,"");};};for _bbc =0;_bbc < _af ;_bbc ++{_abb =_aa +_af +_bbc ;_ff =_ge .Data [_aa +_bbc ];if _ae =_ge .SetByte (_abb ,_ff );_ae !=nil {return _a .Wrapf (_ae ,_ab ,"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",_aa +_bbc ,_aa +_af +_bbc );
|
|
};};};return nil ;};func (_aagdc *byHeight )Swap (i ,j int ){_aagdc .Values [i ],_aagdc .Values [j ]=_aagdc .Values [j ],_aagdc .Values [i ];if _aagdc .Boxes !=nil {_aagdc .Boxes [i ],_aagdc .Boxes [j ]=_aagdc .Boxes [j ],_aagdc .Boxes [i ];};};func _aff (_ceb *Bitmap ,_ada ...int )(_dd *Bitmap ,_fad error ){const _daba ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
|
|
if _ceb ==nil {return nil ,_a .Error (_daba ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_ada )==0||len (_ada )> 4{return nil ,_a .Error (_daba ,"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 _ada [0]<=0{_dc .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");_dd ,_fad =_gbc (nil ,_ceb );if _fad !=nil {return nil ,_a .Wrap (_fad ,_daba ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
|
|
};return _dd ,nil ;};_eg :=_fddc ();_dd =_ceb ;for _ebaa ,_efd :=range _ada {if _efd <=0{break ;};_dd ,_fad =_fdb (_dd ,_efd ,_eg );if _fad !=nil {return nil ,_a .Wrapf (_fad ,_daba ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_ebaa );
|
|
};};return _dd ,nil ;};func _dbf (_fgbag ,_dbac *Bitmap ,_aadd ,_affd int )(*Bitmap ,error ){const _fdga ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _dbac ==nil {return nil ,_a .Error (_fdga ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
|
|
};if _aadd < 1||_affd < 1{return nil ,_a .Error (_fdga ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _aadd ==1&&_affd ==1{return _gbc (_fgbag ,_dbac );};if MorphBC ==SymmetricMorphBC {_gcca ,_gcfb :=_fgba (_fgbag ,_dbac ,_aadd ,_affd );
|
|
if _gcfb !=nil {return nil ,_a .Wrap (_gcfb ,_fdga ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _gcca ,nil ;};_cef :=_dfaf (_aadd /2,_affd /2);_cefa :=8*((_cef +7)/8);_fdeg ,_adec :=_dbac .AddBorder (_cefa ,0);
|
|
if _adec !=nil {return nil ,_a .Wrapf (_adec ,_fdga ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_cefa );};var _cdbe ,_bdda *Bitmap ;if _aadd ==1||_affd ==1{_gfdd :=SelCreateBrick (_affd ,_aadd ,_affd /2,_aadd /2,SelHit );
|
|
_cdbe ,_adec =_adfb (nil ,_fdeg ,_gfdd );if _adec !=nil {return nil ,_a .Wrap (_adec ,_fdga ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_babf :=SelCreateBrick (1,_aadd ,0,_aadd /2,SelHit );
|
|
_cead ,_ceeb :=_fdc (nil ,_fdeg ,_babf );if _ceeb !=nil {return nil ,_a .Wrap (_ceeb ,_fdga ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_bbca :=SelCreateBrick (_affd ,1,_affd /2,0,SelHit );
|
|
_cdbe ,_ceeb =_fdc (nil ,_cead ,_bbca );if _ceeb !=nil {return nil ,_a .Wrap (_ceeb ,_fdga ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_ceeb =_bcgc (_cead ,_cdbe ,_babf );
|
|
_ceeb !=nil {return nil ,_a .Wrap (_ceeb ,_fdga ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_ceeb =_bcgc (_cdbe ,_cead ,_bbca );_ceeb !=nil {return nil ,_a .Wrap (_ceeb ,_fdga ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
|
|
};};if _bdda ,_adec =_cdbe .RemoveBorder (_cefa );_adec !=nil {return nil ,_a .Wrap (_adec ,_fdga ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _fgbag ==nil {return _bdda ,nil ;};if _ ,_adec =_gbc (_fgbag ,_bdda );_adec !=nil {return nil ,_adec ;};return _fgbag ,nil ;
|
|
};func _afed (_dcec ,_bfbcd *Bitmap ,_fdgd *Selection )(*Bitmap ,error ){const _bcbb ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _aadac ,_ccgc int ;if _bfbcd ==nil {return nil ,_a .Error (_bcbb ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
|
|
};if _fdgd ==nil {return nil ,_a .Error (_bcbb ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_aadac =_fdgd .Width ;_ccgc =_fdgd .Height ;if _aadac ==0||_ccgc ==0{return nil ,_a .Error (_bcbb ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
|
|
};if _dcec ==nil {return _bfbcd .createTemplate (),nil ;};if _aedf :=_dcec .resizeImageData (_bfbcd );_aedf !=nil {return nil ,_aedf ;};return _dcec ,nil ;};func _edcdg (_fcgf *Bitmap ,_eceb *Bitmap ,_aced *Selection ,_faafb **Bitmap )(*Bitmap ,error ){const _cfd ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";
|
|
if _eceb ==nil {return nil ,_a .Error (_cfd ,"\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 _aced ==nil {return nil ,_a .Error (_cfd ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");
|
|
};_eaffb ,_dgaf :=_aced .Height ,_aced .Width ;if _eaffb ==0||_dgaf ==0{return nil ,_a .Error (_cfd ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _fcgf ==nil {_fcgf =_eceb .createTemplate ();
|
|
*_faafb =_eceb ;return _fcgf ,nil ;};_fcgf .Width =_eceb .Width ;_fcgf .Height =_eceb .Height ;_fcgf .RowStride =_eceb .RowStride ;_fcgf .Color =_eceb .Color ;_fcgf .Data =make ([]byte ,_eceb .RowStride *_eceb .Height );if _fcgf ==_eceb {*_faafb =_eceb .Copy ();
|
|
}else {*_faafb =_eceb ;};return _fcgf ,nil ;};func _aabe (_aaab ,_dfag ,_bfaa *Bitmap )(*Bitmap ,error ){const _aeef ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _dfag ==nil {return nil ,_a .Error (_aeef ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
|
|
};if _bfaa ==nil {return nil ,_a .Error (_aeef ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _aaab ==_bfaa {return nil ,_a .Error (_aeef ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_dfag .SizesEqual (_bfaa ){_dc .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",_aeef );
|
|
};var _acbf error ;if _aaab ,_acbf =_gbc (_aaab ,_dfag );_acbf !=nil {return nil ,_a .Wrap (_acbf ,_aeef ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _acbf =_aaab .RasterOperation (0,0,_aaab .Width ,_aaab .Height ,PixSrcXorDst ,_bfaa ,0,0);
|
|
_acbf !=nil {return nil ,_a .Wrap (_acbf ,_aeef ,"");};return _aaab ,nil ;};func _gag (_agd ,_ccd *Bitmap ,_ecf int ,_fdbg []byte ,_db int )(_bcbf error ){const _acdf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";
|
|
var (_fbf ,_gdf ,_fde ,_ceg ,_cff ,_gec ,_cab ,_gfg int ;_agc ,_abe uint32 ;_deb ,_bee byte ;_dgf uint16 ;);_agf :=make ([]byte ,4);_caaf :=make ([]byte ,4);for _fde =0;_fde < _agd .Height -1;_fde ,_ceg =_fde +2,_ceg +1{_fbf =_fde *_agd .RowStride ;_gdf =_ceg *_ccd .RowStride ;
|
|
for _cff ,_gec =0,0;_cff < _db ;_cff ,_gec =_cff +4,_gec +1{for _cab =0;_cab < 4;_cab ++{_gfg =_fbf +_cff +_cab ;if _gfg <=len (_agd .Data )-1&&_gfg < _fbf +_agd .RowStride {_agf [_cab ]=_agd .Data [_gfg ];}else {_agf [_cab ]=0x00;};_gfg =_fbf +_agd .RowStride +_cff +_cab ;
|
|
if _gfg <=len (_agd .Data )-1&&_gfg < _fbf +(2*_agd .RowStride ){_caaf [_cab ]=_agd .Data [_gfg ];}else {_caaf [_cab ]=0x00;};};_agc =_ca .BigEndian .Uint32 (_agf );_abe =_ca .BigEndian .Uint32 (_caaf );_abe |=_agc ;_abe |=_abe <<1;_abe &=0xaaaaaaaa;_agc =_abe |(_abe <<7);
|
|
_deb =byte (_agc >>24);_bee =byte ((_agc >>8)&0xff);_gfg =_gdf +_gec ;if _gfg +1==len (_ccd .Data )-1||_gfg +1>=_gdf +_ccd .RowStride {_ccd .Data [_gfg ]=_fdbg [_deb ];}else {_dgf =(uint16 (_fdbg [_deb ])<<8)|uint16 (_fdbg [_bee ]);if _bcbf =_ccd .setTwoBytes (_gfg ,_dgf );
|
|
_bcbf !=nil {return _a .Wrapf (_bcbf ,_acdf ,"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",_gfg );};_gec ++;};
|
|
};};return nil ;};func (_fef *Bitmap )setFourBytes (_abgf int ,_dbee uint32 )error {if _abgf +3> len (_fef .Data )-1{return _a .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",_abgf );
|
|
};_fef .Data [_abgf ]=byte ((_dbee &0xff000000)>>24);_fef .Data [_abgf +1]=byte ((_dbee &0xff0000)>>16);_fef .Data [_abgf +2]=byte ((_dbee &0xff00)>>8);_fef .Data [_abgf +3]=byte (_dbee &0xff);return nil ;};func (_aca *Points )Add (pt *Points )error {const _beaa ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";
|
|
if _aca ==nil {return _a .Error (_beaa ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _a .Error (_beaa ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
|
|
};*_aca =append (*_aca ,*pt ...);return nil ;};func (_cbbf *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _acgcg ="\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 >=_cbbf .IntSlice .Size (){return 0,_a .Errorf (_acgcg ,"\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 (_cbbf .XAtIndex (i )),nil ;};type byWidth Bitmaps ;func _fgba (_eaff ,_aeedg *Bitmap ,_fbef ,_egae int )(*Bitmap ,error ){const _cbg ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _aeedg ==nil {return nil ,_a .Error (_cbg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _fbef < 1||_egae < 1{return nil ,_a .Error (_cbg ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _fbef ==1&&_egae ==1{return _aeedg .Copy (),nil ;};if _fbef ==1||_egae ==1{_egdca :=SelCreateBrick (_egae ,_fbef ,_egae /2,_fbef /2,SelHit );
|
|
var _cgfg error ;_eaff ,_cgfg =_adfb (_eaff ,_aeedg ,_egdca );if _cgfg !=nil {return nil ,_a .Wrap (_cgfg ,_cbg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};
|
|
return _eaff ,nil ;};_bef :=SelCreateBrick (1,_fbef ,0,_fbef /2,SelHit );_ffcfg :=SelCreateBrick (_egae ,1,_egae /2,0,SelHit );_gaeg ,_dfab :=_fdc (nil ,_aeedg ,_bef );if _dfab !=nil {return nil ,_a .Wrap (_dfab ,_cbg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};if _eaff ,_dfab =_fdc (_eaff ,_gaeg ,_ffcfg );_dfab !=nil {return nil ,_a .Wrap (_dfab ,_cbg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_dfab =_bcgc (_gaeg ,_eaff ,_bef );_dfab !=nil {return nil ,_a .Wrap (_dfab ,_cbg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};if _ ,_dfab =_bcgc (_eaff ,_gaeg ,_ffcfg );_dfab !=nil {return nil ,_a .Wrap (_dfab ,_cbg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _eaff ,nil ;};func _eddcg (_aecde *_b .Stack )(_aebe *fillSegment ,_cgedf error ){const _dadfe ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";
|
|
if _aecde ==nil {return nil ,_a .Error (_dadfe ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _aecde .Aux ==nil {return nil ,_a .Error (_dadfe ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");
|
|
};_fadfd ,_bccf :=_aecde .Pop ();if !_bccf {return nil ,nil ;};_aedg ,_bccf :=_fadfd .(*fillSegment );if !_bccf {return nil ,_a .Error (_dadfe ,"\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");
|
|
};_aebe =&fillSegment {_aedg ._daaee ,_aedg ._dgdcf ,_aedg ._eeaa +_aedg ._abfc ,_aedg ._abfc };_aecde .Aux .Push (_aedg );return _aebe ,nil ;};type fillSegment struct{_daaee int ;_dgdcf int ;_eeaa int ;_abfc int ;};func ClipBoxToRectangle (box *_bb .Rectangle ,wi ,hi int )(_bcab *_bb .Rectangle ,_fffg error ){const _gfee ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";
|
|
if box ==nil {return nil ,_a .Error (_gfee ,"\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 ,_a .Error (_gfee ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");
|
|
};_faed :=*box ;_bcab =&_faed ;if _bcab .Min .X < 0{_bcab .Max .X +=_bcab .Min .X ;_bcab .Min .X =0;};if _bcab .Min .Y < 0{_bcab .Max .Y +=_bcab .Min .Y ;_bcab .Min .Y =0;};if _bcab .Max .X > wi {_bcab .Max .X =wi ;};if _bcab .Max .Y > hi {_bcab .Max .Y =hi ;
|
|
};return _bcab ,nil ;};func (_dfge *Bitmaps )String ()string {_fcee :=_e .Builder {};for _ ,_gfcef :=range _dfge .Values {_fcee .WriteString (_gfcef .String ());_fcee .WriteRune ('\n');};return _fcee .String ();};func _eegc (_ccag ,_gbgg int ,_fdfag string )*Selection {_aaaa :=&Selection {Height :_ccag ,Width :_gbgg ,Name :_fdfag };
|
|
_aaaa .Data =make ([][]SelectionValue ,_ccag );for _fafb :=0;_fafb < _ccag ;_fafb ++{_aaaa .Data [_fafb ]=make ([]SelectionValue ,_gbgg );};return _aaaa ;};func (_eeeed *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _cgbgb ="\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 >=_eeeed .IntSlice .Size (){return 0,_a .Errorf (_cgbgb ,"\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 (_eeeed .YAtIndex (i )),nil ;};func _baeb (_ege int )int {if _ege < 0{return -_ege ;};return _ege ;};func _dg (_cfc *Bitmap ,_aef ,_fe int )(*Bitmap ,error ){const _dgb ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";
|
|
if _cfc ==nil {return nil ,_a .Error (_dgb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _aef <=0||_fe <=0{return nil ,_a .Error (_dgb ,"\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 _aef ==_fe {if _aef ==1{_fda ,_dac :=_gbc (nil ,_cfc );if _dac !=nil {return nil ,_a .Wrap (_dac ,_dgb ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _fda ,nil ;};if _aef ==2||_aef ==4||_aef ==8{_fbb ,_dcd :=_dfc (_cfc ,_aef );
|
|
if _dcd !=nil {return nil ,_a .Wrap (_dcd ,_dgb ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _fbb ,nil ;};};_bfg :=_aef *_cfc .Width ;_bbd :=_fe *_cfc .Height ;_cb :=New (_bfg ,_bbd );_cca :=_cb .RowStride ;
|
|
var (_bcb ,_bec ,_ce ,_gdb ,_cgd int ;_ea byte ;_bad error ;);for _bec =0;_bec < _cfc .Height ;_bec ++{_bcb =_fe *_bec *_cca ;for _ce =0;_ce < _cfc .Width ;_ce ++{if _eaa :=_cfc .GetPixel (_ce ,_bec );_eaa {_cgd =_aef *_ce ;for _gdb =0;_gdb < _aef ;_gdb ++{_cb .setBit (_bcb *8+_cgd +_gdb );
|
|
};};};for _gdb =1;_gdb < _fe ;_gdb ++{_dfed :=_bcb +_gdb *_cca ;for _ebad :=0;_ebad < _cca ;_ebad ++{if _ea ,_bad =_cb .GetByte (_bcb +_ebad );_bad !=nil {return nil ,_a .Wrapf (_bad ,_dgb ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_gdb );
|
|
};if _bad =_cb .SetByte (_dfed +_ebad ,_ea );_bad !=nil {return nil ,_a .Wrap (_bad ,_dgb ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _cb ,nil ;};func (_gea *Bitmap )setEightBytes (_fddf int ,_gdde uint64 )error {_agb :=_gea .RowStride -(_fddf %_gea .RowStride );
|
|
if _gea .RowStride !=_gea .Width >>3{_agb --;};if _agb >=8{return _gea .setEightFullBytes (_fddf ,_gdde );};return _gea .setEightPartlyBytes (_fddf ,_agb ,_gdde );};func _gbc (_dfdf ,_faec *Bitmap )(*Bitmap ,error ){if _faec ==nil {return nil ,_a .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 _faec ==_dfdf {return _dfdf ,nil ;};if _dfdf ==nil {_dfdf =_faec .createTemplate ();copy (_dfdf .Data ,_faec .Data );return _dfdf ,nil ;};_efdd :=_dfdf .resizeImageData (_faec );if _efdd !=nil {return nil ,_a .Wrap (_efdd ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
|
|
};_dfdf .Text =_faec .Text ;copy (_dfdf .Data ,_faec .Data );return _dfdf ,nil ;};func _fdb (_eag *Bitmap ,_eed int ,_bcd []byte )(_aed *Bitmap ,_cee error ){const _ccb ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";
|
|
if _eag ==nil {return nil ,_a .Error (_ccb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _eed < 1||_eed > 4{return nil ,_a .Error (_ccb ,"\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 _eag .Height <=1{return nil ,_a .Errorf (_ccb ,"\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",_eag .Height );
|
|
};_aed =New (_eag .Width /2,_eag .Height /2);if _bcd ==nil {_bcd =_fddc ();};_gdd :=_bdaf (_eag .RowStride ,2*_aed .RowStride );switch _eed {case 1:_cee =_gag (_eag ,_aed ,_eed ,_bcd ,_gdd );case 2:_cee =_agfe (_eag ,_aed ,_eed ,_bcd ,_gdd );case 3:_cee =_bbga (_eag ,_aed ,_eed ,_bcd ,_gdd );
|
|
case 4:_cee =_gad (_eag ,_aed ,_eed ,_bcd ,_gdd );};if _cee !=nil {return nil ,_cee ;};return _aed ,nil ;};func (_abd Points )Get (i int )(Point ,error ){if i > len (_abd )-1{return Point {},_a .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 _abd [i ],nil ;};func (_ebgec *Points )AddPoint (x ,y float32 ){*_ebgec =append (*_ebgec ,Point {x ,y })};func New (width ,height int )*Bitmap {_dgdc :=_dgbc (width ,height );_dgdc .Data =make ([]byte ,height *_dgdc .RowStride );return _dgdc ;
|
|
};func (_dfa *Bitmap )SetPadBits (value int ){_dfa .setPadBits (value )};func (_dabaa *Bitmap )thresholdPixelSum (_beg int )bool {var (_cbd int ;_faef uint8 ;_agca byte ;_faag int ;);_eaba :=_dabaa .RowStride ;_fagf :=uint (_dabaa .Width &0x07);if _fagf !=0{_faef =uint8 ((0xff<<(8-_fagf ))&0xff);
|
|
_eaba --;};for _efda :=0;_efda < _dabaa .Height ;_efda ++{for _faag =0;_faag < _eaba ;_faag ++{_agca =_dabaa .Data [_efda *_dabaa .RowStride +_faag ];_cbd +=int (_ggc [_agca ]);};if _fagf !=0{_agca =_dabaa .Data [_efda *_dabaa .RowStride +_faag ]&_faef ;
|
|
_cbd +=int (_ggc [_agca ]);};if _cbd > _beg {return true ;};};return false ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_gfbb *ClassedPoints )Len ()int {return _gfbb .IntSlice .Size ()};
|
|
type SizeComparison int ;func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _dcac (d ,s ,hSize ,vSize )};func (_bed *Bitmap )ClipRectangle (box *_bb .Rectangle )(_dde *Bitmap ,_bde *_bb .Rectangle ,_bdg error ){const _dae ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
|
|
if box ==nil {return nil ,nil ,_a .Error (_dae ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_cac ,_agcd :=_bed .Width ,_bed .Height ;_ddc :=_bb .Rect (0,0,_cac ,_agcd );if !box .Overlaps (_ddc ){return nil ,nil ,_a .Error (_dae ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");
|
|
};_ebdf :=box .Intersect (_ddc );_dbg ,_ffa :=_ebdf .Min .X ,_ebdf .Min .Y ;_baf ,_bgd :=_ebdf .Dx (),_ebdf .Dy ();_dde =New (_baf ,_bgd );_dde .Text =_bed .Text ;if _bdg =_dde .RasterOperation (0,0,_baf ,_bgd ,PixSrc ,_bed ,_dbg ,_ffa );_bdg !=nil {return nil ,nil ,_a .Wrap (_bdg ,_dae ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
|
|
};_bde =&_ebdf ;return _dde ,_bde ,nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_becfb float64 ,_efed error ){const _abee ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
|
|
if bm1 ==nil ||bm2 ==nil {return 0,_a .Error (_abee ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_a .Error (_abee ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
|
|
};if area1 <=0||area2 <=0{return 0,_a .Error (_abee ,"\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 ,_aadc :=bm1 .Width ,bm1 .Height ;_fgbg ,_afdd :=bm2 .Width ,bm2 .Height ;
|
|
_fbbd :=_baeb (_ccgf -_fgbg );if _fbbd > maxDiffW {return 0,nil ;};_gbge :=_baeb (_aadc -_afdd );if _gbge > maxDiffH {return 0,nil ;};var _begg ,_dffd int ;if delX >=0{_begg =int (delX +0.5);}else {_begg =int (delX -0.5);};if delY >=0{_dffd =int (delY +0.5);
|
|
}else {_dffd =int (delY -0.5);};_gfb :=_dfaf (_dffd ,0);_afa :=_bdaf (_afdd +_dffd ,_aadc );_fcedff :=bm1 .RowStride *_gfb ;_ggcb :=bm2 .RowStride *(_gfb -_dffd );_cgge :=_dfaf (_begg ,0);_edg :=_bdaf (_fgbg +_begg ,_ccgf );_eabe :=bm2 .RowStride ;var _eabg ,_ebadg int ;
|
|
if _begg >=8{_eabg =_begg >>3;_fcedff +=_eabg ;_cgge -=_eabg <<3;_edg -=_eabg <<3;_begg &=7;}else if _begg <=-8{_ebadg =-((_begg +7)>>3);_ggcb +=_ebadg ;_eabe -=_ebadg ;_begg +=_ebadg <<3;};if _cgge >=_edg ||_gfb >=_afa {return 0,nil ;};_ced :=(_edg +7)>>3;
|
|
var (_ceae ,_bddd ,_dcbed byte ;_ffde ,_aaef ,_cgf int ;);switch {case _begg ==0:for _cgf =_gfb ;_cgf < _afa ;_cgf ,_fcedff ,_ggcb =_cgf +1,_fcedff +bm1 .RowStride ,_ggcb +bm2 .RowStride {for _aaef =0;_aaef < _ced ;_aaef ++{_dcbed =bm1 .Data [_fcedff +_aaef ]&bm2 .Data [_ggcb +_aaef ];
|
|
_ffde +=tab [_dcbed ];};};case _begg > 0:if _eabe < _ced {for _cgf =_gfb ;_cgf < _afa ;_cgf ,_fcedff ,_ggcb =_cgf +1,_fcedff +bm1 .RowStride ,_ggcb +bm2 .RowStride {_ceae ,_bddd =bm1 .Data [_fcedff ],bm2 .Data [_ggcb ]>>uint (_begg );_dcbed =_ceae &_bddd ;
|
|
_ffde +=tab [_dcbed ];for _aaef =1;_aaef < _eabe ;_aaef ++{_ceae ,_bddd =bm1 .Data [_fcedff +_aaef ],(bm2 .Data [_ggcb +_aaef ]>>uint (_begg ))|(bm2 .Data [_ggcb +_aaef -1]<<uint (8-_begg ));_dcbed =_ceae &_bddd ;_ffde +=tab [_dcbed ];};_ceae =bm1 .Data [_fcedff +_aaef ];
|
|
_bddd =bm2 .Data [_ggcb +_aaef -1]<<uint (8-_begg );_dcbed =_ceae &_bddd ;_ffde +=tab [_dcbed ];};}else {for _cgf =_gfb ;_cgf < _afa ;_cgf ,_fcedff ,_ggcb =_cgf +1,_fcedff +bm1 .RowStride ,_ggcb +bm2 .RowStride {_ceae ,_bddd =bm1 .Data [_fcedff ],bm2 .Data [_ggcb ]>>uint (_begg );
|
|
_dcbed =_ceae &_bddd ;_ffde +=tab [_dcbed ];for _aaef =1;_aaef < _ced ;_aaef ++{_ceae =bm1 .Data [_fcedff +_aaef ];_bddd =(bm2 .Data [_ggcb +_aaef ]>>uint (_begg ))|(bm2 .Data [_ggcb +_aaef -1]<<uint (8-_begg ));_dcbed =_ceae &_bddd ;_ffde +=tab [_dcbed ];
|
|
};};};default:if _ced < _eabe {for _cgf =_gfb ;_cgf < _afa ;_cgf ,_fcedff ,_ggcb =_cgf +1,_fcedff +bm1 .RowStride ,_ggcb +bm2 .RowStride {for _aaef =0;_aaef < _ced ;_aaef ++{_ceae =bm1 .Data [_fcedff +_aaef ];_bddd =bm2 .Data [_ggcb +_aaef ]<<uint (-_begg );
|
|
_bddd |=bm2 .Data [_ggcb +_aaef +1]>>uint (8+_begg );_dcbed =_ceae &_bddd ;_ffde +=tab [_dcbed ];};};}else {for _cgf =_gfb ;_cgf < _afa ;_cgf ,_fcedff ,_ggcb =_cgf +1,_fcedff +bm1 .RowStride ,_ggcb +bm2 .RowStride {for _aaef =0;_aaef < _ced -1;_aaef ++{_ceae =bm1 .Data [_fcedff +_aaef ];
|
|
_bddd =bm2 .Data [_ggcb +_aaef ]<<uint (-_begg );_bddd |=bm2 .Data [_ggcb +_aaef +1]>>uint (8+_begg );_dcbed =_ceae &_bddd ;_ffde +=tab [_dcbed ];};_ceae =bm1 .Data [_fcedff +_aaef ];_bddd =bm2 .Data [_ggcb +_aaef ]<<uint (-_begg );_dcbed =_ceae &_bddd ;
|
|
_ffde +=tab [_dcbed ];};};};_becfb =float64 (_ffde )*float64 (_ffde )/(float64 (area1 )*float64 (area2 ));return _becfb ,nil ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_edaa float64 ,_cgfc error ){const _ageb ="\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 _edaa ,_a .Error (_ageb ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _edaa ,_a .Error (_ageb ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if area1 ==0||area2 ==0{return _edaa ,_a .Error (_ageb ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_ggee ,_egdc :=bm1 .Width ,bm1 .Height ;_afff ,_affa :=bm2 .Width ,bm2 .Height ;
|
|
if _baeb (_ggee -_afff )> maxDiffW {return 0,nil ;};if _baeb (_egdc -_affa )> maxDiffH {return 0,nil ;};var _dadg ,_dgbg int ;if delX >=0{_dadg =int (delX +0.5);}else {_dadg =int (delX -0.5);};if delY >=0{_dgbg =int (delY +0.5);}else {_dgbg =int (delY -0.5);
|
|
};_dbdag :=bm1 .createTemplate ();if _cgfc =_dbdag .RasterOperation (_dadg ,_dgbg ,_afff ,_affa ,PixSrc ,bm2 ,0,0);_cgfc !=nil {return _edaa ,_a .Wrap (_cgfc ,_ageb ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};
|
|
if _cgfc =_dbdag .RasterOperation (0,0,_ggee ,_egdc ,PixSrcAndDst ,bm1 ,0,0);_cgfc !=nil {return _edaa ,_a .Wrap (_cgfc ,_ageb ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_ceeg :=_dbdag .countPixels ();_edaa =float64 (_ceeg )*float64 (_ceeg )/(float64 (area1 )*float64 (area2 ));
|
|
return _edaa ,nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _ffdd ="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 ,_a .Error (_ffdd ,"\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 ,_a .Error (_ffdd ,"\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 ,_a .Error (_ffdd ,"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 ,_a .Error (_ffdd ,"\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 ,_a .Error (_ffdd ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
|
|
};_fcbf ,_efgbe :=bm1 .Width ,bm1 .Height ;_dbeea ,_bfcg :=bm2 .Width ,bm2 .Height ;if _b .Abs (_fcbf -_dbeea )> maxDiffW {return false ,nil ;};if _b .Abs (_efgbe -_bfcg )> maxDiffH {return false ,nil ;};_ccbdd :=int (delX +_b .Sign (delX )*0.5);_faaf :=int (delY +_b .Sign (delY )*0.5);
|
|
_eead :=int (_f .Ceil (_f .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_babgd :=bm2 .RowStride ;_gdgf :=_dfaf (_faaf ,0);_eega :=_bdaf (_bfcg +_faaf ,_efgbe );_ecfd :=bm1 .RowStride *_gdgf ;_abgb :=bm2 .RowStride *(_gdgf -_faaf );
|
|
var _edaaf int ;if _eega <=_efgbe {_edaaf =downcount [_eega -1];};_bea :=_dfaf (_ccbdd ,0);_abeb :=_bdaf (_dbeea +_ccbdd ,_fcbf );var _efaf ,_bfad int ;if _ccbdd >=8{_efaf =_ccbdd >>3;_ecfd +=_efaf ;_bea -=_efaf <<3;_abeb -=_efaf <<3;_ccbdd &=7;}else if _ccbdd <=-8{_bfad =-((_ccbdd +7)>>3);
|
|
_abgb +=_bfad ;_babgd -=_bfad ;_ccbdd +=_bfad <<3;};var (_bgaa ,_caaec ,_aeed int ;_adfa ,_gdef ,_cgdg byte ;);if _bea >=_abeb ||_gdgf >=_eega {return false ,nil ;};_fega :=(_abeb +7)>>3;switch {case _ccbdd ==0:for _caaec =_gdgf ;_caaec < _eega ;_caaec ,_ecfd ,_abgb =_caaec +1,_ecfd +bm1 .RowStride ,_abgb +bm2 .RowStride {for _aeed =0;
|
|
_aeed < _fega ;_aeed ++{_adfa =bm1 .Data [_ecfd +_aeed ]&bm2 .Data [_abgb +_aeed ];_bgaa +=tab [_adfa ];};if _bgaa >=_eead {return true ,nil ;};if _bcge :=_bgaa +downcount [_caaec ]-_edaaf ;_bcge < _eead {return false ,nil ;};};case _ccbdd > 0&&_babgd < _fega :for _caaec =_gdgf ;
|
|
_caaec < _eega ;_caaec ,_ecfd ,_abgb =_caaec +1,_ecfd +bm1 .RowStride ,_abgb +bm2 .RowStride {_gdef =bm1 .Data [_ecfd ];_cgdg =bm2 .Data [_abgb ]>>uint (_ccbdd );_adfa =_gdef &_cgdg ;_bgaa +=tab [_adfa ];for _aeed =1;_aeed < _babgd ;_aeed ++{_gdef =bm1 .Data [_ecfd +_aeed ];
|
|
_cgdg =bm2 .Data [_abgb +_aeed ]>>uint (_ccbdd )|bm2 .Data [_abgb +_aeed -1]<<uint (8-_ccbdd );_adfa =_gdef &_cgdg ;_bgaa +=tab [_adfa ];};_gdef =bm1 .Data [_ecfd +_aeed ];_cgdg =bm2 .Data [_abgb +_aeed -1]<<uint (8-_ccbdd );_adfa =_gdef &_cgdg ;_bgaa +=tab [_adfa ];
|
|
if _bgaa >=_eead {return true ,nil ;}else if _bgaa +downcount [_caaec ]-_edaaf < _eead {return false ,nil ;};};case _ccbdd > 0&&_babgd >=_fega :for _caaec =_gdgf ;_caaec < _eega ;_caaec ,_ecfd ,_abgb =_caaec +1,_ecfd +bm1 .RowStride ,_abgb +bm2 .RowStride {_gdef =bm1 .Data [_ecfd ];
|
|
_cgdg =bm2 .Data [_abgb ]>>uint (_ccbdd );_adfa =_gdef &_cgdg ;_bgaa +=tab [_adfa ];for _aeed =1;_aeed < _fega ;_aeed ++{_gdef =bm1 .Data [_ecfd +_aeed ];_cgdg =bm2 .Data [_abgb +_aeed ]>>uint (_ccbdd );_cgdg |=bm2 .Data [_abgb +_aeed -1]<<uint (8-_ccbdd );
|
|
_adfa =_gdef &_cgdg ;_bgaa +=tab [_adfa ];};if _bgaa >=_eead {return true ,nil ;}else if _bgaa +downcount [_caaec ]-_edaaf < _eead {return false ,nil ;};};case _fega < _babgd :for _caaec =_gdgf ;_caaec < _eega ;_caaec ,_ecfd ,_abgb =_caaec +1,_ecfd +bm1 .RowStride ,_abgb +bm2 .RowStride {for _aeed =0;
|
|
_aeed < _fega ;_aeed ++{_gdef =bm1 .Data [_ecfd +_aeed ];_cgdg =bm2 .Data [_abgb +_aeed ]<<uint (-_ccbdd );_cgdg |=bm2 .Data [_abgb +_aeed +1]>>uint (8+_ccbdd );_adfa =_gdef &_cgdg ;_bgaa +=tab [_adfa ];};if _bgaa >=_eead {return true ,nil ;}else if _eaga :=_bgaa +downcount [_caaec ]-_edaaf ;
|
|
_eaga < _eead {return false ,nil ;};};case _babgd >=_fega :for _caaec =_gdgf ;_caaec < _eega ;_caaec ,_ecfd ,_abgb =_caaec +1,_ecfd +bm1 .RowStride ,_abgb +bm2 .RowStride {for _aeed =0;_aeed < _fega ;_aeed ++{_gdef =bm1 .Data [_ecfd +_aeed ];_cgdg =bm2 .Data [_abgb +_aeed ]<<uint (-_ccbdd );
|
|
_cgdg |=bm2 .Data [_abgb +_aeed +1]>>uint (8+_ccbdd );_adfa =_gdef &_cgdg ;_bgaa +=tab [_adfa ];};_gdef =bm1 .Data [_ecfd +_aeed ];_cgdg =bm2 .Data [_abgb +_aeed ]<<uint (-_ccbdd );_adfa =_gdef &_cgdg ;_bgaa +=tab [_adfa ];if _bgaa >=_eead {return true ,nil ;
|
|
}else if _bgaa +downcount [_caaec ]-_edaaf < _eead {return false ,nil ;};};};_aecf :=float32 (_bgaa )*float32 (_bgaa )/(float32 (area1 )*float32 (area2 ));if _aecf >=scoreThreshold {_dc .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",_bgaa ,_eead ,_aecf ,scoreThreshold );
|
|
};return false ,nil ;};func _abba (_afea ,_bgdb *Bitmap ,_eacb ,_babg ,_edeag ,_bbab ,_gfgb ,_cga ,_ddfc ,_fdg int ,_efgb CombinationOperator )error {var _add int ;_baee :=func (){_add ++;_edeag +=_bgdb .RowStride ;_bbab +=_afea .RowStride ;_gfgb +=_afea .RowStride };
|
|
for _add =_eacb ;_add < _babg ;_baee (){var _fgbf uint16 ;_aabbg :=_edeag ;for _egeg :=_bbab ;_egeg <=_gfgb ;_egeg ++{_gcfg ,_bece :=_bgdb .GetByte (_aabbg );if _bece !=nil {return _bece ;};_gbbc ,_bece :=_afea .GetByte (_egeg );if _bece !=nil {return _bece ;
|
|
};_fgbf =(_fgbf |uint16 (_gbbc ))<<uint (_fdg );_gbbc =byte (_fgbf >>8);if _egeg ==_gfgb {_gbbc =_ddca (uint (_cga ),_gbbc );};if _bece =_bgdb .SetByte (_aabbg ,_caafb (_gcfg ,_gbbc ,_efgb ));_bece !=nil {return _bece ;};_aabbg ++;_fgbf <<=uint (_ddfc );
|
|
};};return nil ;};func (_ece *Bitmap )Copy ()*Bitmap {_acf :=make ([]byte ,len (_ece .Data ));copy (_acf ,_ece .Data );return &Bitmap {Width :_ece .Width ,Height :_ece .Height ,RowStride :_ece .RowStride ,Data :_acf ,Color :_ece .Color ,Text :_ece .Text ,BitmapNumber :_ece .BitmapNumber ,Special :_ece .Special };
|
|
};func (_adcg MorphProcess )verify (_ggdc int ,_cgeb ,_fecb *int )error {const _degg ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _adcg .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_adcg .Arguments )!=2{return _a .Error (_degg ,"\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");
|
|
};_afcb ,_dacg :=_adcg .getWidthHeight ();if _afcb <=0||_dacg <=0{return _a .Error (_degg ,"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 :_gagg :=len (_adcg .Arguments );*_cgeb +=_gagg ;if _gagg < 1||_gagg > 4{return _a .Error (_degg ,"\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 _bgbd :=0;_bgbd < _gagg ;_bgbd ++{if _adcg .Arguments [_bgbd ]< 1||_adcg .Arguments [_bgbd ]> 4{return _a .Error (_degg ,"\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 (_adcg .Arguments )==0{return _a .Error (_degg ,"\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");
|
|
};_ffbg :=_adcg .Arguments [0];if _ffbg !=2&&_ffbg !=4&&_ffbg !=8{return _a .Error (_degg ,"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");
|
|
};*_cgeb -=_dege [_ffbg /4];case MopAddBorder :if len (_adcg .Arguments )==0{return _a .Error (_degg ,"\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");
|
|
};_fabf :=_adcg .Arguments [0];if _ggdc > 0{return _a .Error (_degg ,"\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 _fabf < 1{return _a .Error (_degg ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_fecb =_fabf ;};return nil ;};func (_ebca *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _bacb ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";
|
|
if _ebca ==nil {return nil ,_a .Error (_bacb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_ebca .Values )-1{return nil ,_a .Errorf (_bacb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return _ebca .Values [i ],nil ;};func _bgaba (_bgfa ,_gfed *Bitmap ,_cdcae *Selection )(*Bitmap ,error ){const _beggd ="\u006f\u0070\u0065\u006e";var _dbab error ;_bgfa ,_dbab =_afed (_bgfa ,_gfed ,_cdcae );if _dbab !=nil {return nil ,_a .Wrap (_dbab ,_beggd ,"");
|
|
};_cbce ,_dbab :=_bcgc (nil ,_gfed ,_cdcae );if _dbab !=nil {return nil ,_a .Wrap (_dbab ,_beggd ,"");};_ ,_dbab =_fdc (_bgfa ,_cbce ,_cdcae );if _dbab !=nil {return nil ,_a .Wrap (_dbab ,_beggd ,"");};return _bgfa ,nil ;};func (_dag *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_dag .Width ,Height :_dag .Height ,RowStride :_dag .RowStride ,Color :_dag .Color ,Text :_dag .Text ,BitmapNumber :_dag .BitmapNumber ,Special :_dag .Special ,Data :make ([]byte ,len (_dag .Data ))};
|
|
};func _adbab (_caff *Bitmap ,_cfbd ,_bedb int ,_dbdce ,_gceb int ,_cadg RasterOperator ){var (_gfabd int ;_bgff byte ;_bged ,_cged int ;_egb int ;);_dcdbd :=_dbdce >>3;_ebee :=_dbdce &7;if _ebee > 0{_bgff =_dfba [_ebee ];};_gfabd =_caff .RowStride *_bedb +(_cfbd >>3);
|
|
switch _cadg {case PixClr :for _bged =0;_bged < _gceb ;_bged ++{_egb =_gfabd +_bged *_caff .RowStride ;for _cged =0;_cged < _dcdbd ;_cged ++{_caff .Data [_egb ]=0x0;_egb ++;};if _ebee > 0{_caff .Data [_egb ]=_ecgg (_caff .Data [_egb ],0x0,_bgff );};};case PixSet :for _bged =0;
|
|
_bged < _gceb ;_bged ++{_egb =_gfabd +_bged *_caff .RowStride ;for _cged =0;_cged < _dcdbd ;_cged ++{_caff .Data [_egb ]=0xff;_egb ++;};if _ebee > 0{_caff .Data [_egb ]=_ecgg (_caff .Data [_egb ],0xff,_bgff );};};case PixNotDst :for _bged =0;_bged < _gceb ;
|
|
_bged ++{_egb =_gfabd +_bged *_caff .RowStride ;for _cged =0;_cged < _dcdbd ;_cged ++{_caff .Data [_egb ]=^_caff .Data [_egb ];_egb ++;};if _ebee > 0{_caff .Data [_egb ]=_ecgg (_caff .Data [_egb ],^_caff .Data [_egb ],_bgff );};};};};type Selection struct{Height ,Width int ;
|
|
Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _bac ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
|
|
_dbd :=_dgbc (width ,height );_dbd .Data =data ;if _ccf :=((width *height )+7)>>3;len (data )< _ccf {return nil ,_a .Errorf (_bac ,"\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 ),_ccf );
|
|
};if _acg :=_dbd .addPadBits ();_acg !=nil {return nil ,_a .Wrap (_acg ,_bac ,"");};return _dbd ,nil ;};func (_eca *Bitmap )connComponentsBB (_gcab int )(_daad *Boxes ,_aecdg error ){const _eafd ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";
|
|
if _gcab !=4&&_gcab !=8{return nil ,_a .Error (_eafd ,"\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 _eca .Zero (){return &Boxes {},nil ;
|
|
};_eca .setPadBits (0);_ggd ,_aecdg :=_gbc (nil ,_eca );if _aecdg !=nil {return nil ,_a .Wrap (_aecdg ,_eafd ,"\u0062\u006d\u0031");};_efde :=&_b .Stack {};_efde .Aux =&_b .Stack {};_daad =&Boxes {};var (_dacb ,_cdgd int ;_fagfc _bb .Point ;_cbef bool ;
|
|
_eaae *_bb .Rectangle ;);for {if _fagfc ,_cbef ,_aecdg =_ggd .nextOnPixel (_cdgd ,_dacb );_aecdg !=nil {return nil ,_a .Wrap (_aecdg ,_eafd ,"");};if !_cbef {break ;};if _eaae ,_aecdg =_dbbe (_ggd ,_efde ,_fagfc .X ,_fagfc .Y ,_gcab );_aecdg !=nil {return nil ,_a .Wrap (_aecdg ,_eafd ,"");
|
|
};if _aecdg =_daad .Add (_eaae );_aecdg !=nil {return nil ,_a .Wrap (_aecdg ,_eafd ,"");};_cdgd =_fagfc .X ;_dacb =_fagfc .Y ;};return _daad ,nil ;};func (_ebbb *ClassedPoints )xSortFunction ()func (_feac int ,_fcef int )bool {return func (_dffeab ,_aace int )bool {return _ebbb .XAtIndex (_dffeab )< _ebbb .XAtIndex (_aace )};
|
|
};func TstFrameBitmapData ()[]byte {return _gdcc .Data };func (_bfde *byHeight )Len ()int {return len (_bfde .Values )};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);
|
|
var (_gbfe =_ffb ();_beceb =_cd ();_begc =_efa (););func (_agcg *Bitmap )GetByteIndex (x ,y int )int {return y *_agcg .RowStride +(x >>3)};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 (_cdba *Bitmap )clearAll ()error {return _cdba .RasterOperation (0,0,_cdba .Width ,_cdba .Height ,PixClr ,nil ,0,0);
|
|
};var MorphBC BoundaryCondition ;func _fddc ()(_gcag []byte ){_gcag =make ([]byte ,256);for _ffd :=0;_ffd < 256;_ffd ++{_fdff :=byte (_ffd );_gcag [_fdff ]=(_fdff &0x01)|((_fdff &0x04)>>1)|((_fdff &0x10)>>2)|((_fdff &0x40)>>3)|((_fdff &0x02)<<3)|((_fdff &0x08)<<2)|((_fdff &0x20)<<1)|(_fdff &0x80);
|
|
};return _gcag ;};type SelectionValue int ;func (_dacd *ClassedPoints )YAtIndex (i int )float32 {return (*_dacd .Points )[_dacd .IntSlice [i ]].Y };func _bdaf (_fcede ,_cge int )int {if _fcede < _cge {return _fcede ;};return _cge ;};func (_gcaa *Bitmap )SetByte (index int ,v byte )error {if index > len (_gcaa .Data )-1||index < 0{return _a .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 );
|
|
};_gcaa .Data [index ]=v ;return nil ;};func (_aeaf *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _aedba ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";
|
|
_geab ,_faee :=_aeaf .selectByIndexes (idx );if _faee !=nil {return nil ,_a .Wrap (_faee ,_aedba ,"");};return _geab ,nil ;};var _dege =[5]int {1,2,3,0,4};func (_gage *Bitmap )SizesEqual (s *Bitmap )bool {if _gage ==s {return true ;};if _gage .Width !=s .Width ||_gage .Height !=s .Height {return false ;
|
|
};return true ;};func (_beca *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _fbcdf ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _beca ==nil {return nil ,_a .Error (_fbcdf ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if s ==nil {return nil ,_a .Error (_fbcdf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_cgad :=len (_beca .Values );_gdag :=&Bitmaps {Values :make ([]*Bitmap ,_cgad ),Boxes :make ([]*_bb .Rectangle ,_cgad )};
|
|
var (_edecb ,_cddb *Bitmap ;_bbbe *_bb .Rectangle ;_fgff error ;);for _aagd :=0;_aagd < _cgad ;_aagd ++{if _edecb ,_fgff =_beca .GetBitmap (_aagd );_fgff !=nil {return nil ,_a .Wrap (_fgff ,_fbcdf ,"");};if _bbbe ,_fgff =_beca .GetBox (_aagd );_fgff !=nil {return nil ,_a .Wrap (_fgff ,_fbcdf ,"");
|
|
};if _cddb ,_fgff =s .clipRectangle (_bbbe ,nil );_fgff !=nil {return nil ,_a .Wrap (_fgff ,_fbcdf ,"");};if _cddb ,_fgff =_cddb .And (_edecb );_fgff !=nil {return nil ,_a .Wrap (_fgff ,_fbcdf ,"");};_gdag .Values [_aagd ]=_cddb ;_gdag .Boxes [_aagd ]=_bbbe ;
|
|
};return _gdag ,nil ;};func (_ccdbc *Bitmap )ToImage ()_bb .Image {_gecb ,_dbgf :=_ace .NewImage (_ccdbc .Width ,_ccdbc .Height ,1,1,_ccdbc .Data ,nil ,nil );if _dbgf !=nil {_dc .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",_dbgf );
|
|
};return _gecb ;};func (_dgc *Bitmap )CreateTemplate ()*Bitmap {return _dgc .createTemplate ()};func (_egca Points )GetGeometry (i int )(_edcda ,_dabff float32 ,_egfdd error ){if i > len (_egca )-1{return 0,0,_a .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 );
|
|
};_cbfa :=_egca [i ];return _cbfa .X ,_cbfa .Y ,nil ;};func _dfaf (_fgb ,_aeec int )int {if _fgb > _aeec {return _fgb ;};return _aeec ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;
|
|
MopAddBorder ;);type ClassedPoints struct{*Points ;_b .IntSlice ;_aceafa func (_begd ,_ecce int )bool ;};func _cebfg (_dda ,_ebcfa *Bitmap ,_ccdfa ,_bffg ,_bdc uint ,_bcda ,_dedg int ,_dec bool ,_acfc ,_cfa int )error {for _bgf :=_bcda ;_bgf < _dedg ;_bgf ++{if _acfc +1< len (_dda .Data ){_fbaad :=_bgf +1==_dedg ;
|
|
_fgde ,_ead :=_dda .GetByte (_acfc );if _ead !=nil {return _ead ;};_acfc ++;_fgde <<=_ccdfa ;_ffbc ,_ead :=_dda .GetByte (_acfc );if _ead !=nil {return _ead ;};_ffbc >>=_bffg ;_gcac :=_fgde |_ffbc ;if _fbaad &&!_dec {_gcac =_ddca (_bdc ,_gcac );};_ead =_ebcfa .SetByte (_cfa ,_gcac );
|
|
if _ead !=nil {return _ead ;};_cfa ++;if _fbaad &&_dec {_eea ,_bgab :=_dda .GetByte (_acfc );if _bgab !=nil {return _bgab ;};_eea <<=_ccdfa ;_gcac =_ddca (_bdc ,_eea );if _bgab =_ebcfa .SetByte (_cfa ,_gcac );_bgab !=nil {return _bgab ;};};continue ;};
|
|
_gdff ,_facb :=_dda .GetByte (_acfc );if _facb !=nil {_dc .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",_acfc ,_facb );
|
|
return _facb ;};_gdff <<=_ccdfa ;_acfc ++;_facb =_ebcfa .SetByte (_cfa ,_gdff );if _facb !=nil {return _facb ;};_cfa ++;};return nil ;};func _gbdc (_eafc ,_cfga *Bitmap ,_facaf ,_gaaag int )(*Bitmap ,error ){const _ggbg ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";
|
|
if _cfga ==nil {return nil ,_a .Error (_ggbg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _facaf < 1||_gaaag < 1{return nil ,_a .Error (_ggbg ,"\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 _facaf ==1&&_gaaag ==1{_afeag ,_dbdb :=_gbc (_eafc ,_cfga );if _dbdb !=nil {return nil ,_a .Wrap (_dbdb ,_ggbg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _afeag ,nil ;};if _facaf ==1||_gaaag ==1{_dcefc :=SelCreateBrick (_gaaag ,_facaf ,_gaaag /2,_facaf /2,SelHit );_gagd ,_accf :=_bcgc (_eafc ,_cfga ,_dcefc );if _accf !=nil {return nil ,_a .Wrap (_accf ,_ggbg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _gagd ,nil ;};_eedd :=SelCreateBrick (1,_facaf ,0,_facaf /2,SelHit );_bgfd :=SelCreateBrick (_gaaag ,1,_gaaag /2,0,SelHit );_bbgde ,_gbbcc :=_bcgc (nil ,_cfga ,_eedd );if _gbbcc !=nil {return nil ,_a .Wrap (_gbbcc ,_ggbg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};_eafc ,_gbbcc =_bcgc (_eafc ,_bbgde ,_bgfd );if _gbbcc !=nil {return nil ,_a .Wrap (_gbbcc ,_ggbg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _eafc ,nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;
|
|
SizeSelectIfGTE ;SizeSelectIfEQ ;);func (_efeb *Bitmaps )HeightSorter ()func (_bffb ,_bgcc int )bool {return func (_faced ,_fbfc int )bool {_fadee :=_efeb .Values [_faced ].Height < _efeb .Values [_fbfc ].Height ;_dc .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_efeb .Values [_faced ].Height ,_efeb .Values [_fbfc ].Height ,_fadee );
|
|
return _fadee ;};};func _dbbe (_ceab *Bitmap ,_ddcc *_b .Stack ,_dcaf ,_cfdb ,_bgda int )(_edcgb *_bb .Rectangle ,_bce error ){const _abce ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _ceab ==nil {return nil ,_a .Error (_abce ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
|
|
};if _ddcc ==nil {return nil ,_a .Error (_abce ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _bgda {case 4:if _edcgb ,_bce =_bbgg (_ceab ,_ddcc ,_dcaf ,_cfdb );_bce !=nil {return nil ,_a .Wrap (_bce ,_abce ,"");
|
|
};return _edcgb ,nil ;case 8:if _edcgb ,_bce =_effg (_ceab ,_ddcc ,_dcaf ,_cfdb );_bce !=nil {return nil ,_a .Wrap (_bce ,_abce ,"");};return _edcgb ,nil ;default:return nil ,_a .Errorf (_abce ,"\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",_bgda );
|
|
};};func (_bfb *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _bfb .Copy (),nil ;};_ded ,_bbfe :=_bfb .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _bbfe !=nil {return nil ,_a .Wrap (_bbfe ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");
|
|
};return _ded ,nil ;};func (_gdgc *Bitmap )setBit (_febf int ){_gdgc .Data [(_febf >>3)]|=0x80>>uint (_febf &7)};func (_ffcc *Bitmap )GetChocolateData ()[]byte {if _ffcc .Color ==Vanilla {_ffcc .inverseData ();};return _ffcc .Data ;};func TstFrameBitmap ()*Bitmap {return _gdcc .Copy ()};
|
|
func TstRSymbol (t *_ac .T ,scale ...int )*Bitmap {_fcdcc ,_egga :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_gd .NoError (t ,_egga );return TstGetScaledSymbol (t ,_fcdcc ,scale ...);};func (_cfcc *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _gdggg ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";
|
|
if len (_cfcc .Values )==0{return nil ,_a .Error (_gdggg ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_bfgea :=&BitmapsArray {};_cfcc .SortByHeight ();_ffbcd :=-1;_cgdcc :=-1;for _cbbff :=0;_cbbff < len (_cfcc .Values );
|
|
_cbbff ++{_edbg :=_cfcc .Values [_cbbff ].Height ;if _edbg > _ffbcd {_ffbcd =_edbg ;_cgdcc ++;_bfgea .Values =append (_bfgea .Values ,&Bitmaps {});};_bfgea .Values [_cgdcc ].AddBitmap (_cfcc .Values [_cbbff ]);};return _bfgea ,nil ;};func TstAddSymbol (t *_ac .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );
|
|
_cdef :=_bb .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_cdef );*x +=sym .Width +space ;};func (_acfb *ClassedPoints )ySortFunction ()func (_gbgb int ,_ccge int )bool {return func (_bcabe ,_fecc int )bool {return _acfb .YAtIndex (_bcabe )< _acfb .YAtIndex (_fecc )};
|
|
};func _abcfe (_ggea ,_caba *Bitmap ,_ebaad ,_geef int )(_fgaf error ){const _fgcd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_eeff ,_ceegd ,_gdgfa ,_egbg int ;_acfa ,_fcbc ,_egbc ,_ceaef ,_ebde ,_bdgd ,_cagd ,_ccgcg byte ;
|
|
);for _eeff =0;_eeff < _ebaad ;_eeff ++{_gdgfa =_eeff *_ggea .RowStride ;_egbg =_eeff *_caba .RowStride ;for _ceegd =0;_ceegd < _geef ;_ceegd ++{if _acfa ,_fgaf =_ggea .GetByte (_gdgfa +_ceegd );_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
|
|
};if _fcbc ,_fgaf =_caba .GetByte (_egbg +_ceegd );_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _eeff > 0{if _egbc ,_fgaf =_ggea .GetByte (_gdgfa -_ggea .RowStride +_ceegd );
|
|
_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_acfa |=_egbc |(_egbc <<1)|(_egbc >>1);if _ceegd > 0{if _ccgcg ,_fgaf =_ggea .GetByte (_gdgfa -_ggea .RowStride +_ceegd -1);_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");
|
|
};_acfa |=_ccgcg <<7;};if _ceegd < _geef -1{if _ccgcg ,_fgaf =_ggea .GetByte (_gdgfa -_ggea .RowStride +_ceegd +1);_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_acfa |=_ccgcg >>7;
|
|
};};if _ceegd > 0{if _ceaef ,_fgaf =_ggea .GetByte (_gdgfa +_ceegd -1);_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\u006a\u0020\u003e \u0030");};_acfa |=_ceaef <<7;};_acfa &=_fcbc ;if _acfa ==0||^_acfa ==0{if _fgaf =_ggea .SetByte (_gdgfa +_ceegd ,_acfa );
|
|
_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_cagd =_acfa ;_acfa =(_acfa |(_acfa >>1)|(_acfa <<1))&_fcbc ;if (_acfa ^_cagd )==0{if _fgaf =_ggea .SetByte (_gdgfa +_ceegd ,_acfa );
|
|
_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _eeff =_ebaad -1;_eeff >=0;_eeff --{_gdgfa =_eeff *_ggea .RowStride ;_egbg =_eeff *_caba .RowStride ;
|
|
for _ceegd =_geef -1;_ceegd >=0;_ceegd --{if _acfa ,_fgaf =_ggea .GetByte (_gdgfa +_ceegd );_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
|
|
};if _fcbc ,_fgaf =_caba .GetByte (_egbg +_ceegd );_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _eeff < _ebaad -1{if _ebde ,_fgaf =_ggea .GetByte (_gdgfa +_ggea .RowStride +_ceegd );
|
|
_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_acfa |=_ebde |(_ebde <<1)|_ebde >>1;if _ceegd > 0{if _ccgcg ,_fgaf =_ggea .GetByte (_gdgfa +_ggea .RowStride +_ceegd -1);
|
|
_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\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");};_acfa |=_ccgcg <<7;};if _ceegd < _geef -1{if _ccgcg ,_fgaf =_ggea .GetByte (_gdgfa +_ggea .RowStride +_ceegd +1);
|
|
_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\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");
|
|
};_acfa |=_ccgcg >>7;};};if _ceegd < _geef -1{if _bdgd ,_fgaf =_ggea .GetByte (_gdgfa +_ceegd +1);_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\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");
|
|
};_acfa |=_bdgd >>7;};_acfa &=_fcbc ;if _acfa ==0||(^_acfa )==0{if _fgaf =_ggea .SetByte (_gdgfa +_ceegd ,_acfa );_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_cagd =_acfa ;
|
|
_acfa =(_acfa |(_acfa >>1)|(_acfa <<1))&_fcbc ;if (_acfa ^_cagd )==0{if _fgaf =_ggea .SetByte (_gdgfa +_ceegd ,_acfa );_fgaf !=nil {return _a .Wrap (_fgaf ,_fgcd ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
|
|
};break ;};};};};return nil ;};func (_ffg *Bitmap )clipRectangle (_eaf ,_fee *_bb .Rectangle )(_eee *Bitmap ,_acead error ){const _bcgg ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _eaf ==nil {return nil ,_a .Error (_bcgg ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");
|
|
};_cbe ,_agg :=_ffg .Width ,_ffg .Height ;_edf ,_acead :=ClipBoxToRectangle (_eaf ,_cbe ,_agg );if _acead !=nil {_dc .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",_acead );
|
|
return nil ,nil ;};_dfca ,_bcfg :=_edf .Min .X ,_edf .Min .Y ;_ddd ,_fcfg :=_edf .Max .X -_edf .Min .X ,_edf .Max .Y -_edf .Min .Y ;_eee =New (_ddd ,_fcfg );_eee .Text =_ffg .Text ;if _acead =_eee .RasterOperation (0,0,_ddd ,_fcfg ,PixSrc ,_ffg ,_dfca ,_bcfg );
|
|
_acead !=nil {return nil ,_a .Wrap (_acead ,_bcgg ,"");};if _fee !=nil {*_fee =*_edf ;};return _eee ,nil ;};type Color int ;func (_fdfc *Bitmap )connComponentsBitmapsBB (_dfdg *Bitmaps ,_dabfa int )(_baef *Boxes ,_gbde error ){const _cfed ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";
|
|
if _dabfa !=4&&_dabfa !=8{return nil ,_a .Error (_cfed ,"\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 _dfdg ==nil {return nil ,_a .Error (_cfed ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
|
|
};if len (_dfdg .Values )> 0{return nil ,_a .Error (_cfed ,"\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 _fdfc .Zero (){return &Boxes {},nil ;};
|
|
var (_bdgcg ,_afgf ,_feag ,_cbdd *Bitmap ;);_fdfc .setPadBits (0);if _bdgcg ,_gbde =_gbc (nil ,_fdfc );_gbde !=nil {return nil ,_a .Wrap (_gbde ,_cfed ,"\u0062\u006d\u0031");};if _afgf ,_gbde =_gbc (nil ,_fdfc );_gbde !=nil {return nil ,_a .Wrap (_gbde ,_cfed ,"\u0062\u006d\u0032");
|
|
};_daca :=&_b .Stack {};_daca .Aux =&_b .Stack {};_baef =&Boxes {};var (_gbcg ,_bbcb int ;_dbaa _bb .Point ;_cabdg bool ;_dcgf *_bb .Rectangle ;);for {if _dbaa ,_cabdg ,_gbde =_bdgcg .nextOnPixel (_gbcg ,_bbcb );_gbde !=nil {return nil ,_a .Wrap (_gbde ,_cfed ,"");
|
|
};if !_cabdg {break ;};if _dcgf ,_gbde =_dbbe (_bdgcg ,_daca ,_dbaa .X ,_dbaa .Y ,_dabfa );_gbde !=nil {return nil ,_a .Wrap (_gbde ,_cfed ,"");};if _gbde =_baef .Add (_dcgf );_gbde !=nil {return nil ,_a .Wrap (_gbde ,_cfed ,"");};if _feag ,_gbde =_bdgcg .clipRectangle (_dcgf ,nil );
|
|
_gbde !=nil {return nil ,_a .Wrap (_gbde ,_cfed ,"\u0062\u006d\u0033");};if _cbdd ,_gbde =_afgf .clipRectangle (_dcgf ,nil );_gbde !=nil {return nil ,_a .Wrap (_gbde ,_cfed ,"\u0062\u006d\u0034");};if _ ,_gbde =_aabe (_feag ,_feag ,_cbdd );_gbde !=nil {return nil ,_a .Wrap (_gbde ,_cfed ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");
|
|
};if _gbde =_afgf .RasterOperation (_dcgf .Min .X ,_dcgf .Min .Y ,_dcgf .Dx (),_dcgf .Dy (),PixSrcXorDst ,_feag ,0,0);_gbde !=nil {return nil ,_a .Wrap (_gbde ,_cfed ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};
|
|
_dfdg .AddBitmap (_feag );_gbcg =_dbaa .X ;_bbcb =_dbaa .Y ;};_dfdg .Boxes =*_baef ;return _baef ,nil ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func (_aaced *Bitmaps )SortByWidth (){_febdc :=(*byWidth )(_aaced );_c .Sort (_febdc )};
|
|
func (_abbd *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _fdfdc ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _ebf :=_abbd .validateIntSlice ();_ebf !=nil {return nil ,_a .Wrap (_ebf ,_fdfdc ,"");
|
|
};if _abbd .IntSlice .Size ()==0{return nil ,_a .Error (_fdfdc ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_abbd .SortByY ();var (_gggc []*ClassedPoints ;_fcafc int ;);_fgea :=-1;var _abcf *ClassedPoints ;
|
|
for _gdce :=0;_gdce < len (_abbd .IntSlice );_gdce ++{_fcafc =int (_abbd .YAtIndex (_gdce ));if _fcafc !=_fgea {_abcf =&ClassedPoints {Points :_abbd .Points };_fgea =_fcafc ;_gggc =append (_gggc ,_abcf );};_abcf .IntSlice =append (_abcf .IntSlice ,_abbd .IntSlice [_gdce ]);
|
|
};for _ ,_effb :=range _gggc {_effb .SortByX ();};return _gggc ,nil ;};type Component int ;func _bc (_bcg ,_ffc *Bitmap )(_fd error ){const _def ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";
|
|
_caa :=_ffc .RowStride ;_acd :=_bcg .RowStride ;_gc :=_ffc .RowStride *4-_bcg .RowStride ;var (_gg ,_fdd byte ;_df uint32 ;_fb ,_eb ,_ad ,_acea ,_ga ,_cg ,_fba int ;);for _ad =0;_ad < _ffc .Height ;_ad ++{_fb =_ad *_caa ;_eb =4*_ad *_acd ;for _acea =0;
|
|
_acea < _caa ;_acea ++{_gg =_ffc .Data [_fb +_acea ];_df =_beceb [_gg ];_cg =_eb +_acea *4;if _gc !=0&&(_acea +1)*4> _bcg .RowStride {for _ga =_gc ;_ga > 0;_ga --{_fdd =byte ((_df >>uint (_ga *8))&0xff);_fba =_cg +(_gc -_ga );if _fd =_bcg .SetByte (_fba ,_fdd );
|
|
_fd !=nil {return _a .Wrapf (_fd ,_def ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_ga );};};}else if _fd =_bcg .setFourBytes (_cg ,_df );_fd !=nil {return _a .Wrap (_fd ,_def ,"");
|
|
};if _fd =_bcg .setFourBytes (_eb +_acea *4,_beceb [_ffc .Data [_fb +_acea ]]);_fd !=nil {return _a .Wrap (_fd ,_def ,"");};};for _ga =1;_ga < 4;_ga ++{for _acea =0;_acea < _acd ;_acea ++{if _fd =_bcg .SetByte (_eb +_ga *_acd +_acea ,_bcg .Data [_eb +_acea ]);
|
|
_fd !=nil {return _a .Wrapf (_fd ,_def ,"\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",_ga ,_acea );
|
|
};};};};return nil ;};func (_fegb Points )YSorter ()func (_dgda ,_gfeb int )bool {return func (_bega ,_bbaf int )bool {return _fegb [_bega ].Y < _fegb [_bbaf ].Y };};func (_ccbc *Bitmap )InverseData (){_ccbc .inverseData ()};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _gcdgg ,_caf int ;
|
|
_egc :=src .RowStride -1;if x < 0{_caf =-x ;x =0;}else if x +src .Width > dst .Width {_egc -=src .Width +x -dst .Width ;};if y < 0{_gcdgg =-y ;y =0;_caf +=src .RowStride ;_egc +=src .RowStride ;}else if y +src .Height > dst .Height {_gcdgg =src .Height +y -dst .Height ;
|
|
};var (_afde int ;_bbgc error ;);_dffg :=x &0x07;_ebge :=8-_dffg ;_bfbb :=src .Width &0x07;_afdc :=_ebge -_bfbb ;_gbec :=_ebge &0x07!=0;_dagd :=src .Width <=((_egc -_caf )<<3)+_ebge ;_gge :=dst .GetByteIndex (x ,y );_dgef :=_gcdgg +dst .Height ;if src .Height > _dgef {_afde =_dgef ;
|
|
}else {_afde =src .Height ;};switch {case !_gbec :_bbgc =_ccfba (src ,dst ,_gcdgg ,_afde ,_gge ,_caf ,_egc ,op );case _dagd :_bbgc =_abba (src ,dst ,_gcdgg ,_afde ,_gge ,_caf ,_egc ,_afdc ,_dffg ,_ebge ,op );default:_bbgc =_fcedd (src ,dst ,_gcdgg ,_afde ,_gge ,_caf ,_egc ,_afdc ,_dffg ,_ebge ,op ,_bfbb );
|
|
};return _bbgc ;};var (_gdcc *Bitmap ;_fbdf *Bitmap ;);func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _gfdaa (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _bfgc (_beea ,_eda *Bitmap ,_dfcab CombinationOperator )*Bitmap {_aedb :=New (_beea .Width ,_beea .Height );
|
|
for _aecd :=0;_aecd < len (_aedb .Data );_aecd ++{_aedb .Data [_aecd ]=_caafb (_beea .Data [_aecd ],_eda .Data [_aecd ],_dfcab );};return _aedb ;};func (_cea *Bitmap )removeBorderGeneral (_faaa ,_feg ,_caef ,_dbe int )(*Bitmap ,error ){const _eedg ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
|
|
if _faaa < 0||_feg < 0||_caef < 0||_dbe < 0{return nil ,_a .Error (_eedg ,"\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");};_bab ,_bgcf :=_cea .Width ,_cea .Height ;
|
|
_gga :=_bab -_faaa -_feg ;_dfd :=_bgcf -_caef -_dbe ;if _gga <=0{return nil ,_a .Errorf (_eedg ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_gga );};if _dfd <=0{return nil ,_a .Errorf (_eedg ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_dfd );
|
|
};_fbee :=New (_gga ,_dfd );_fbee .Color =_cea .Color ;_fbab :=_fbee .RasterOperation (0,0,_gga ,_dfd ,PixSrc ,_cea ,_faaa ,_caef );if _fbab !=nil {return nil ,_a .Wrap (_fbab ,_eedg ,"");};return _fbee ,nil ;};func (_cdgb *byHeight )Less (i ,j int )bool {return _cdgb .Values [i ].Height < _cdgb .Values [j ].Height };
|
|
func _agfe (_debb ,_fg *Bitmap ,_efag int ,_becf []byte ,_bae int )(_ccbd error ){const _ccdf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";var (_dgd ,_cebd ,_abc ,_bga ,_bcf ,_cae ,_dbc ,_dce int ;
|
|
_fce ,_aged ,_bgc ,_aga uint32 ;_fcc ,_fbg byte ;_ebd uint16 ;);_deba :=make ([]byte ,4);_aae :=make ([]byte ,4);for _abc =0;_abc < _debb .Height -1;_abc ,_bga =_abc +2,_bga +1{_dgd =_abc *_debb .RowStride ;_cebd =_bga *_fg .RowStride ;for _bcf ,_cae =0,0;
|
|
_bcf < _bae ;_bcf ,_cae =_bcf +4,_cae +1{for _dbc =0;_dbc < 4;_dbc ++{_dce =_dgd +_bcf +_dbc ;if _dce <=len (_debb .Data )-1&&_dce < _dgd +_debb .RowStride {_deba [_dbc ]=_debb .Data [_dce ];}else {_deba [_dbc ]=0x00;};_dce =_dgd +_debb .RowStride +_bcf +_dbc ;
|
|
if _dce <=len (_debb .Data )-1&&_dce < _dgd +(2*_debb .RowStride ){_aae [_dbc ]=_debb .Data [_dce ];}else {_aae [_dbc ]=0x00;};};_fce =_ca .BigEndian .Uint32 (_deba );_aged =_ca .BigEndian .Uint32 (_aae );_bgc =_fce &_aged ;_bgc |=_bgc <<1;_aga =_fce |_aged ;
|
|
_aga &=_aga <<1;_aged =_bgc |_aga ;_aged &=0xaaaaaaaa;_fce =_aged |(_aged <<7);_fcc =byte (_fce >>24);_fbg =byte ((_fce >>8)&0xff);_dce =_cebd +_cae ;if _dce +1==len (_fg .Data )-1||_dce +1>=_cebd +_fg .RowStride {if _ccbd =_fg .SetByte (_dce ,_becf [_fcc ]);
|
|
_ccbd !=nil {return _a .Wrapf (_ccbd ,_ccdf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_dce );};}else {_ebd =(uint16 (_becf [_fcc ])<<8)|uint16 (_becf [_fbg ]);if _ccbd =_fg .setTwoBytes (_dce ,_ebd );_ccbd !=nil {return _a .Wrapf (_ccbd ,_ccdf ,"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",_dce );
|
|
};_cae ++;};};};return nil ;};func (_ebbe *Bitmap )centroid (_edc ,_abbe []int )(Point ,error ){_agad :=Point {};_ebbe .setPadBits (0);if len (_edc )==0{_edc =_dafg ();};if len (_abbe )==0{_abbe =_daea ();};var _aecc ,_dfae ,_ccdc ,_cgde ,_abaf ,_edab int ;
|
|
var _bag byte ;for _abaf =0;_abaf < _ebbe .Height ;_abaf ++{_abac :=_ebbe .RowStride *_abaf ;_cgde =0;for _edab =0;_edab < _ebbe .RowStride ;_edab ++{_bag =_ebbe .Data [_abac +_edab ];if _bag !=0{_cgde +=_abbe [_bag ];_aecc +=_edc [_bag ]+_edab *8*_abbe [_bag ];
|
|
};};_ccdc +=_cgde ;_dfae +=_cgde *_abaf ;};if _ccdc !=0{_agad .X =float32 (_aecc )/float32 (_ccdc );_agad .Y =float32 (_dfae )/float32 (_ccdc );};return _agad ,nil ;};func _dgbc (_efc ,_dbb int )*Bitmap {return &Bitmap {Width :_efc ,Height :_dbb ,RowStride :(_efc +7)>>3};
|
|
};func TstTSymbol (t *_ac .T ,scale ...int )*Bitmap {_dgbge ,_facdc :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_gd .NoError (t ,_facdc );return TstGetScaledSymbol (t ,_dgbge ,scale ...);};func (_bge *Bitmap )setAll ()error {_cdca :=_gfdaa (_bge ,0,0,_bge .Width ,_bge .Height ,PixSet ,nil ,0,0);
|
|
if _cdca !=nil {return _a .Wrap (_cdca ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _fdc (d ,s ,sel )};var _ggc [256]uint8 ;func _gfdaa (_decf *Bitmap ,_fabg ,_acef ,_fbeee ,_afb int ,_gfcf RasterOperator ,_ecca *Bitmap ,_ceed ,_daac int )error {const _bcgcg ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
|
|
if _decf ==nil {return _a .Error (_bcgcg ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _gfcf ==PixDst {return nil ;};switch _gfcf {case PixClr ,PixSet ,PixNotDst :_feff (_decf ,_fabg ,_acef ,_fbeee ,_afb ,_gfcf );
|
|
return nil ;};if _ecca ==nil {_dc .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 _a .Error (_bcgcg ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _gfcfd :=_fecbg (_decf ,_fabg ,_acef ,_fbeee ,_afb ,_gfcf ,_ecca ,_ceed ,_daac );_gfcfd !=nil {return _a .Wrap (_gfcfd ,_bcgcg ,"");
|
|
};return nil ;};func (_fbed *Bitmap )setEightFullBytes (_gadc int ,_gda uint64 )error {if _gadc +7> len (_fbed .Data )-1{return _a .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");
|
|
};_fbed .Data [_gadc ]=byte ((_gda &0xff00000000000000)>>56);_fbed .Data [_gadc +1]=byte ((_gda &0xff000000000000)>>48);_fbed .Data [_gadc +2]=byte ((_gda &0xff0000000000)>>40);_fbed .Data [_gadc +3]=byte ((_gda &0xff00000000)>>32);_fbed .Data [_gadc +4]=byte ((_gda &0xff000000)>>24);
|
|
_fbed .Data [_gadc +5]=byte ((_gda &0xff0000)>>16);_fbed .Data [_gadc +6]=byte ((_gda &0xff00)>>8);_fbed .Data [_gadc +7]=byte (_gda &0xff);return nil ;};func _fecbg (_dfce *Bitmap ,_ebeda ,_gbfgf int ,_agee ,_degd int ,_dbgc RasterOperator ,_ddfgf *Bitmap ,_geg ,_dafb int )error {var _befe ,_eaeb ,_agde ,_becb int ;
|
|
if _ebeda < 0{_geg -=_ebeda ;_agee +=_ebeda ;_ebeda =0;};if _geg < 0{_ebeda -=_geg ;_agee +=_geg ;_geg =0;};_befe =_ebeda +_agee -_dfce .Width ;if _befe > 0{_agee -=_befe ;};_eaeb =_geg +_agee -_ddfgf .Width ;if _eaeb > 0{_agee -=_eaeb ;};if _gbfgf < 0{_dafb -=_gbfgf ;
|
|
_degd +=_gbfgf ;_gbfgf =0;};if _dafb < 0{_gbfgf -=_dafb ;_degd +=_dafb ;_dafb =0;};_agde =_gbfgf +_degd -_dfce .Height ;if _agde > 0{_degd -=_agde ;};_becb =_dafb +_degd -_ddfgf .Height ;if _becb > 0{_degd -=_becb ;};if _agee <=0||_degd <=0{return nil ;
|
|
};var _fegc error ;switch {case _ebeda &7==0&&_geg &7==0:_fegc =_ecbg (_dfce ,_ebeda ,_gbfgf ,_agee ,_degd ,_dbgc ,_ddfgf ,_geg ,_dafb );case _ebeda &7==_geg &7:_fegc =_dadf (_dfce ,_ebeda ,_gbfgf ,_agee ,_degd ,_dbgc ,_ddfgf ,_geg ,_dafb );default:_fegc =_edda (_dfce ,_ebeda ,_gbfgf ,_agee ,_degd ,_dbgc ,_ddfgf ,_geg ,_dafb );
|
|
};if _fegc !=nil {return _a .Wrap (_fegc ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_bdca :=_eegc (h ,w ,"");_bdca .setOrigin (cy ,cx );
|
|
var _gecf ,_fcbdf int ;for _gecf =0;_gecf < h ;_gecf ++{for _fcbdf =0;_fcbdf < w ;_fcbdf ++{_bdca .Data [_gecf ][_fcbdf ]=tp ;};};return _bdca ;};func (_fggb *ClassedPoints )SortByY (){_fggb ._aceafa =_fggb .ySortFunction ();_c .Sort (_fggb )};func (_ged *Bitmap )GetUnpaddedData ()([]byte ,error ){_fae :=uint (_ged .Width &0x07);
|
|
if _fae ==0{return _ged .Data ,nil ;};_fbd :=_ged .Width *_ged .Height ;if _fbd %8!=0{_fbd >>=3;_fbd ++;}else {_fbd >>=3;};_bdgc :=make ([]byte ,_fbd );_aab :=_d .NewWriterMSB (_bdgc );const _ccfb ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
|
|
for _cdg :=0;_cdg < _ged .Height ;_cdg ++{for _efe :=0;_efe < _ged .RowStride ;_efe ++{_gfgc :=_ged .Data [_cdg *_ged .RowStride +_efe ];if _efe !=_ged .RowStride -1{_aeg :=_aab .WriteByte (_gfgc );if _aeg !=nil {return nil ,_a .Wrap (_aeg ,_ccfb ,"");
|
|
};continue ;};for _cgc :=uint (0);_cgc < _fae ;_cgc ++{_badd :=_aab .WriteBit (int (_gfgc >>(7-_cgc )&0x01));if _badd !=nil {return nil ,_a .Wrap (_badd ,_ccfb ,"");};};};};return _bdgc ,nil ;};func _ccfba (_fade ,_fff *Bitmap ,_egdaf ,_dbcc ,_afcf ,_bcbfb ,_ccae int ,_defg CombinationOperator )error {var _baddf int ;
|
|
_bfee :=func (){_baddf ++;_afcf +=_fff .RowStride ;_bcbfb +=_fade .RowStride ;_ccae +=_fade .RowStride };for _baddf =_egdaf ;_baddf < _dbcc ;_bfee (){_ecc :=_afcf ;for _cdf :=_bcbfb ;_cdf <=_ccae ;_cdf ++{_dga ,_aeab :=_fff .GetByte (_ecc );if _aeab !=nil {return _aeab ;
|
|
};_fdec ,_aeab :=_fade .GetByte (_cdf );if _aeab !=nil {return _aeab ;};if _aeab =_fff .SetByte (_ecc ,_caafb (_dga ,_fdec ,_defg ));_aeab !=nil {return _aeab ;};_ecc ++;};};return nil ;};func (_bbed *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _bbed .Copy (),nil ;
|
|
};_ffca ,_gcae :=_bbed .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _gcae !=nil {return nil ,_a .Wrap (_gcae ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _ffca ,nil ;};func (_fbga *Bitmap )setTwoBytes (_gab int ,_daa uint16 )error {if _gab +1> len (_fbga .Data )-1{return _a .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",_gab );
|
|
};_fbga .Data [_gab ]=byte ((_daa &0xff00)>>8);_fbga .Data [_gab +1]=byte (_daa &0xff);return nil ;};type byHeight Bitmaps ;func Centroids (bms []*Bitmap )(*Points ,error ){_gee :=make ([]Point ,len (bms ));_ebgd :=_dafg ();_gfgg :=_daea ();var _dade error ;
|
|
for _gcdef ,_ecg :=range bms {_gee [_gcdef ],_dade =_ecg .centroid (_ebgd ,_gfgg );if _dade !=nil {return nil ,_dade ;};};_aacf :=Points (_gee );return &_aacf ,nil ;};func (_dfbc *Bitmaps )selectByIndicator (_caeca *_b .NumSlice )(_dddf *Bitmaps ,_ebcb error ){const _dfdgg ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _dfbc ==nil {return nil ,_a .Error (_dfdgg ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _caeca ==nil {return nil ,_a .Error (_dfdgg ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
|
|
};if len (_dfbc .Values )==0{return _dfbc ,nil ;};if len (*_caeca )!=len (_dfbc .Values ){return nil ,_a .Errorf (_dfdgg ,"\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 (*_caeca ),len (_dfbc .Values ));
|
|
};var _ecec ,_dfga ,_bccfb int ;for _dfga =0;_dfga < len (*_caeca );_dfga ++{if _ecec ,_ebcb =_caeca .GetInt (_dfga );_ebcb !=nil {return nil ,_a .Wrap (_ebcb ,_dfdgg ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _ecec ==1{_bccfb ++;
|
|
};};if _bccfb ==len (_dfbc .Values ){return _dfbc ,nil ;};_dddf =&Bitmaps {};_gfcc :=len (_dfbc .Values )==len (_dfbc .Boxes );for _dfga =0;_dfga < len (*_caeca );_dfga ++{if _ecec =int ((*_caeca )[_dfga ]);_ecec ==0{continue ;};_dddf .Values =append (_dddf .Values ,_dfbc .Values [_dfga ]);
|
|
if _gfcc {_dddf .Boxes =append (_dddf .Boxes ,_dfbc .Boxes [_dfga ]);};};return _dddf ,nil ;};func (_ffad *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_fcda *Bitmaps ,_cbabc error ){const _eggb ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
|
|
if _ffad ==nil {return nil ,_a .Error (_eggb ,"\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 ,_a .Errorf (_eggb ,"\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 ,_a .Errorf (_eggb ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
|
|
};_abfbb ,_cbabc :=_ffad .makeSizeIndicator (width ,height ,tp ,relation );if _cbabc !=nil {return nil ,_a .Wrap (_cbabc ,_eggb ,"");};_fcda ,_cbabc =_ffad .selectByIndicator (_abfbb );if _cbabc !=nil {return nil ,_a .Wrap (_cbabc ,_eggb ,"");};return _fcda ,nil ;
|
|
};func (_deee *Bitmaps )selectByIndexes (_cdeb []int )(*Bitmaps ,error ){_efafe :=&Bitmaps {};for _ ,_afgg :=range _cdeb {_abad ,_eccae :=_deee .GetBitmap (_afgg );if _eccae !=nil {return nil ,_a .Wrap (_eccae ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");
|
|
};_efafe .AddBitmap (_abad );};return _efafe ,nil ;};func (_becgc *BitmapsArray )AddBitmaps (bm *Bitmaps ){_becgc .Values =append (_becgc .Values ,bm )};func (_gagb *ClassedPoints )Less (i ,j int )bool {return _gagb ._aceafa (i ,j )};func (_fefb *Bitmaps )GetBox (i int )(*_bb .Rectangle ,error ){const _bdgb ="\u0047\u0065\u0074\u0042\u006f\u0078";
|
|
if _fefb ==nil {return nil ,_a .Error (_bdgb ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_fefb .Boxes )-1{return nil ,_a .Errorf (_bdgb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return _fefb .Boxes [i ],nil ;};func _ecbg (_gcfcf *Bitmap ,_cagb ,_cdcc ,_bcbff ,_afcd int ,_ffec RasterOperator ,_dgfc *Bitmap ,_ddgc ,_egaf int )error {var (_aagg byte ;_fbfd int ;_bcgd int ;_fbgg ,_bgeg int ;_gbce ,_degf int ;);_dcdec :=_bcbff >>3;
|
|
_cacg :=_bcbff &7;if _cacg > 0{_aagg =_dfba [_cacg ];};_fbfd =_dgfc .RowStride *_egaf +(_ddgc >>3);_bcgd =_gcfcf .RowStride *_cdcc +(_cagb >>3);switch _ffec {case PixSrc :for _gbce =0;_gbce < _afcd ;_gbce ++{_fbgg =_fbfd +_gbce *_dgfc .RowStride ;_bgeg =_bcgd +_gbce *_gcfcf .RowStride ;
|
|
for _degf =0;_degf < _dcdec ;_degf ++{_gcfcf .Data [_bgeg ]=_dgfc .Data [_fbgg ];_bgeg ++;_fbgg ++;};if _cacg > 0{_gcfcf .Data [_bgeg ]=_ecgg (_gcfcf .Data [_bgeg ],_dgfc .Data [_fbgg ],_aagg );};};case PixNotSrc :for _gbce =0;_gbce < _afcd ;_gbce ++{_fbgg =_fbfd +_gbce *_dgfc .RowStride ;
|
|
_bgeg =_bcgd +_gbce *_gcfcf .RowStride ;for _degf =0;_degf < _dcdec ;_degf ++{_gcfcf .Data [_bgeg ]=^(_dgfc .Data [_fbgg ]);_bgeg ++;_fbgg ++;};if _cacg > 0{_gcfcf .Data [_bgeg ]=_ecgg (_gcfcf .Data [_bgeg ],^_dgfc .Data [_fbgg ],_aagg );};};case PixSrcOrDst :for _gbce =0;
|
|
_gbce < _afcd ;_gbce ++{_fbgg =_fbfd +_gbce *_dgfc .RowStride ;_bgeg =_bcgd +_gbce *_gcfcf .RowStride ;for _degf =0;_degf < _dcdec ;_degf ++{_gcfcf .Data [_bgeg ]|=_dgfc .Data [_fbgg ];_bgeg ++;_fbgg ++;};if _cacg > 0{_gcfcf .Data [_bgeg ]=_ecgg (_gcfcf .Data [_bgeg ],_dgfc .Data [_fbgg ]|_gcfcf .Data [_bgeg ],_aagg );
|
|
};};case PixSrcAndDst :for _gbce =0;_gbce < _afcd ;_gbce ++{_fbgg =_fbfd +_gbce *_dgfc .RowStride ;_bgeg =_bcgd +_gbce *_gcfcf .RowStride ;for _degf =0;_degf < _dcdec ;_degf ++{_gcfcf .Data [_bgeg ]&=_dgfc .Data [_fbgg ];_bgeg ++;_fbgg ++;};if _cacg > 0{_gcfcf .Data [_bgeg ]=_ecgg (_gcfcf .Data [_bgeg ],_dgfc .Data [_fbgg ]&_gcfcf .Data [_bgeg ],_aagg );
|
|
};};case PixSrcXorDst :for _gbce =0;_gbce < _afcd ;_gbce ++{_fbgg =_fbfd +_gbce *_dgfc .RowStride ;_bgeg =_bcgd +_gbce *_gcfcf .RowStride ;for _degf =0;_degf < _dcdec ;_degf ++{_gcfcf .Data [_bgeg ]^=_dgfc .Data [_fbgg ];_bgeg ++;_fbgg ++;};if _cacg > 0{_gcfcf .Data [_bgeg ]=_ecgg (_gcfcf .Data [_bgeg ],_dgfc .Data [_fbgg ]^_gcfcf .Data [_bgeg ],_aagg );
|
|
};};case PixNotSrcOrDst :for _gbce =0;_gbce < _afcd ;_gbce ++{_fbgg =_fbfd +_gbce *_dgfc .RowStride ;_bgeg =_bcgd +_gbce *_gcfcf .RowStride ;for _degf =0;_degf < _dcdec ;_degf ++{_gcfcf .Data [_bgeg ]|=^(_dgfc .Data [_fbgg ]);_bgeg ++;_fbgg ++;};if _cacg > 0{_gcfcf .Data [_bgeg ]=_ecgg (_gcfcf .Data [_bgeg ],^(_dgfc .Data [_fbgg ])|_gcfcf .Data [_bgeg ],_aagg );
|
|
};};case PixNotSrcAndDst :for _gbce =0;_gbce < _afcd ;_gbce ++{_fbgg =_fbfd +_gbce *_dgfc .RowStride ;_bgeg =_bcgd +_gbce *_gcfcf .RowStride ;for _degf =0;_degf < _dcdec ;_degf ++{_gcfcf .Data [_bgeg ]&=^(_dgfc .Data [_fbgg ]);_bgeg ++;_fbgg ++;};if _cacg > 0{_gcfcf .Data [_bgeg ]=_ecgg (_gcfcf .Data [_bgeg ],^(_dgfc .Data [_fbgg ])&_gcfcf .Data [_bgeg ],_aagg );
|
|
};};case PixSrcOrNotDst :for _gbce =0;_gbce < _afcd ;_gbce ++{_fbgg =_fbfd +_gbce *_dgfc .RowStride ;_bgeg =_bcgd +_gbce *_gcfcf .RowStride ;for _degf =0;_degf < _dcdec ;_degf ++{_gcfcf .Data [_bgeg ]=_dgfc .Data [_fbgg ]|^(_gcfcf .Data [_bgeg ]);_bgeg ++;
|
|
_fbgg ++;};if _cacg > 0{_gcfcf .Data [_bgeg ]=_ecgg (_gcfcf .Data [_bgeg ],_dgfc .Data [_fbgg ]|^(_gcfcf .Data [_bgeg ]),_aagg );};};case PixSrcAndNotDst :for _gbce =0;_gbce < _afcd ;_gbce ++{_fbgg =_fbfd +_gbce *_dgfc .RowStride ;_bgeg =_bcgd +_gbce *_gcfcf .RowStride ;
|
|
for _degf =0;_degf < _dcdec ;_degf ++{_gcfcf .Data [_bgeg ]=_dgfc .Data [_fbgg ]&^(_gcfcf .Data [_bgeg ]);_bgeg ++;_fbgg ++;};if _cacg > 0{_gcfcf .Data [_bgeg ]=_ecgg (_gcfcf .Data [_bgeg ],_dgfc .Data [_fbgg ]&^(_gcfcf .Data [_bgeg ]),_aagg );};};case PixNotPixSrcOrDst :for _gbce =0;
|
|
_gbce < _afcd ;_gbce ++{_fbgg =_fbfd +_gbce *_dgfc .RowStride ;_bgeg =_bcgd +_gbce *_gcfcf .RowStride ;for _degf =0;_degf < _dcdec ;_degf ++{_gcfcf .Data [_bgeg ]=^(_dgfc .Data [_fbgg ]|_gcfcf .Data [_bgeg ]);_bgeg ++;_fbgg ++;};if _cacg > 0{_gcfcf .Data [_bgeg ]=_ecgg (_gcfcf .Data [_bgeg ],^(_dgfc .Data [_fbgg ]|_gcfcf .Data [_bgeg ]),_aagg );
|
|
};};case PixNotPixSrcAndDst :for _gbce =0;_gbce < _afcd ;_gbce ++{_fbgg =_fbfd +_gbce *_dgfc .RowStride ;_bgeg =_bcgd +_gbce *_gcfcf .RowStride ;for _degf =0;_degf < _dcdec ;_degf ++{_gcfcf .Data [_bgeg ]=^(_dgfc .Data [_fbgg ]&_gcfcf .Data [_bgeg ]);_bgeg ++;
|
|
_fbgg ++;};if _cacg > 0{_gcfcf .Data [_bgeg ]=_ecgg (_gcfcf .Data [_bgeg ],^(_dgfc .Data [_fbgg ]&_gcfcf .Data [_bgeg ]),_aagg );};};case PixNotPixSrcXorDst :for _gbce =0;_gbce < _afcd ;_gbce ++{_fbgg =_fbfd +_gbce *_dgfc .RowStride ;_bgeg =_bcgd +_gbce *_gcfcf .RowStride ;
|
|
for _degf =0;_degf < _dcdec ;_degf ++{_gcfcf .Data [_bgeg ]=^(_dgfc .Data [_fbgg ]^_gcfcf .Data [_bgeg ]);_bgeg ++;_fbgg ++;};if _cacg > 0{_gcfcf .Data [_bgeg ]=_ecgg (_gcfcf .Data [_bgeg ],^(_dgfc .Data [_fbgg ]^_gcfcf .Data [_bgeg ]),_aagg );};};default:_dc .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",_ffec );
|
|
return _a .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 ;};type shift int ;var _ _c .Interface =&ClassedPoints {};func _gbad (_bdbdd *Bitmap ,_gfca ,_fgcag int ,_agcge ,_cgcb int ,_bfd RasterOperator ){var (_gfcfda bool ;_bffcc bool ;_efaa int ;_ecbb int ;_facg int ;_eeeef int ;_baea bool ;_agbd byte ;
|
|
);_dgcg :=8-(_gfca &7);_fbaf :=_gcba [_dgcg ];_fgga :=_bdbdd .RowStride *_fgcag +(_gfca >>3);if _agcge < _dgcg {_gfcfda =true ;_fbaf &=_dfba [8-_dgcg +_agcge ];};if !_gfcfda {_efaa =(_agcge -_dgcg )>>3;if _efaa !=0{_bffcc =true ;_ecbb =_fgga +1;};};_facg =(_gfca +_agcge )&7;
|
|
if !(_gfcfda ||_facg ==0){_baea =true ;_agbd =_dfba [_facg ];_eeeef =_fgga +1+_efaa ;};var _fdgb ,_fcdc int ;switch _bfd {case PixClr :for _fdgb =0;_fdgb < _cgcb ;_fdgb ++{_bdbdd .Data [_fgga ]=_ecgg (_bdbdd .Data [_fgga ],0x0,_fbaf );_fgga +=_bdbdd .RowStride ;
|
|
};if _bffcc {for _fdgb =0;_fdgb < _cgcb ;_fdgb ++{for _fcdc =0;_fcdc < _efaa ;_fcdc ++{_bdbdd .Data [_ecbb +_fcdc ]=0x0;};_ecbb +=_bdbdd .RowStride ;};};if _baea {for _fdgb =0;_fdgb < _cgcb ;_fdgb ++{_bdbdd .Data [_eeeef ]=_ecgg (_bdbdd .Data [_eeeef ],0x0,_agbd );
|
|
_eeeef +=_bdbdd .RowStride ;};};case PixSet :for _fdgb =0;_fdgb < _cgcb ;_fdgb ++{_bdbdd .Data [_fgga ]=_ecgg (_bdbdd .Data [_fgga ],0xff,_fbaf );_fgga +=_bdbdd .RowStride ;};if _bffcc {for _fdgb =0;_fdgb < _cgcb ;_fdgb ++{for _fcdc =0;_fcdc < _efaa ;_fcdc ++{_bdbdd .Data [_ecbb +_fcdc ]=0xff;
|
|
};_ecbb +=_bdbdd .RowStride ;};};if _baea {for _fdgb =0;_fdgb < _cgcb ;_fdgb ++{_bdbdd .Data [_eeeef ]=_ecgg (_bdbdd .Data [_eeeef ],0xff,_agbd );_eeeef +=_bdbdd .RowStride ;};};case PixNotDst :for _fdgb =0;_fdgb < _cgcb ;_fdgb ++{_bdbdd .Data [_fgga ]=_ecgg (_bdbdd .Data [_fgga ],^_bdbdd .Data [_fgga ],_fbaf );
|
|
_fgga +=_bdbdd .RowStride ;};if _bffcc {for _fdgb =0;_fdgb < _cgcb ;_fdgb ++{for _fcdc =0;_fcdc < _efaa ;_fcdc ++{_bdbdd .Data [_ecbb +_fcdc ]=^(_bdbdd .Data [_ecbb +_fcdc ]);};_ecbb +=_bdbdd .RowStride ;};};if _baea {for _fdgb =0;_fdgb < _cgcb ;_fdgb ++{_bdbdd .Data [_eeeef ]=_ecgg (_bdbdd .Data [_eeeef ],^_bdbdd .Data [_eeeef ],_agbd );
|
|
_eeeef +=_bdbdd .RowStride ;};};};};func (_eeec *Bitmap )equivalent (_gde *Bitmap )bool {if _eeec ==_gde {return true ;};if !_eeec .SizesEqual (_gde ){return false ;};_dad :=_bfgc (_eeec ,_gde ,CmbOpXor );_faf :=_eeec .countPixels ();_gef :=int (0.25*float32 (_faf ));
|
|
if _dad .thresholdPixelSum (_gef ){return false ;};var (_bded [9][9]int ;_gefg [18][9]int ;_gce [9][18]int ;_ccad int ;_fgg int ;);_gfd :=9;_gbfc :=_eeec .Height /_gfd ;_gggf :=_eeec .Width /_gfd ;_cec ,_accb :=_gbfc /2,_gggf /2;if _gbfc < _gggf {_cec =_gggf /2;
|
|
_accb =_gbfc /2;};_adbb :=float64 (_cec )*float64 (_accb )*_f .Pi ;_dge :=int (float64 (_gbfc *_gggf /2)*0.9);_ffda :=int (float64 (_gggf *_gbfc /2)*0.9);for _gadd :=0;_gadd < _gfd ;_gadd ++{_dcb :=_gggf *_gadd +_ccad ;var _ddef int ;if _gadd ==_gfd -1{_ccad =0;
|
|
_ddef =_eeec .Width ;}else {_ddef =_dcb +_gggf ;if ((_eeec .Width -_ccad )%_gfd )> 0{_ccad ++;_ddef ++;};};for _ffeg :=0;_ffeg < _gfd ;_ffeg ++{_edea :=_gbfc *_ffeg +_fgg ;var _aedc int ;if _ffeg ==_gfd -1{_fgg =0;_aedc =_eeec .Height ;}else {_aedc =_edea +_gbfc ;
|
|
if (_eeec .Height -_fgg )%_gfd > 0{_fgg ++;_aedc ++;};};var _fage ,_cded ,_ffaa ,_aeag int ;_fcedf :=(_dcb +_ddef )/2;_caab :=(_edea +_aedc )/2;for _edb :=_dcb ;_edb < _ddef ;_edb ++{for _dcbe :=_edea ;_dcbe < _aedc ;_dcbe ++{if _dad .GetPixel (_edb ,_dcbe ){if _edb < _fcedf {_fage ++;
|
|
}else {_cded ++;};if _dcbe < _caab {_aeag ++;}else {_ffaa ++;};};};};_bded [_gadd ][_ffeg ]=_fage +_cded ;_gefg [_gadd *2][_ffeg ]=_fage ;_gefg [_gadd *2+1][_ffeg ]=_cded ;_gce [_gadd ][_ffeg *2]=_aeag ;_gce [_gadd ][_ffeg *2+1]=_ffaa ;};};for _cbeb :=0;
|
|
_cbeb < _gfd *2-1;_cbeb ++{for _fdfd :=0;_fdfd < (_gfd -1);_fdfd ++{var _fggg int ;for _aagf :=0;_aagf < 2;_aagf ++{for _gcdc :=0;_gcdc < 2;_gcdc ++{_fggg +=_gefg [_cbeb +_aagf ][_fdfd +_gcdc ];};};if _fggg > _ffda {return false ;};};};for _dbdc :=0;_dbdc < (_gfd -1);
|
|
_dbdc ++{for _feb :=0;_feb < ((_gfd *2)-1);_feb ++{var _aaag int ;for _ddbf :=0;_ddbf < 2;_ddbf ++{for _aaf :=0;_aaf < 2;_aaf ++{_aaag +=_gce [_dbdc +_ddbf ][_feb +_aaf ];};};if _aaag > _dge {return false ;};};};for _bcbg :=0;_bcbg < (_gfd -2);_bcbg ++{for _egdb :=0;
|
|
_egdb < (_gfd -2);_egdb ++{var _bgdd ,_bda int ;for _gecbg :=0;_gecbg < 3;_gecbg ++{for _debg :=0;_debg < 3;_debg ++{if _gecbg ==_debg {_bgdd +=_bded [_bcbg +_gecbg ][_egdb +_debg ];};if (2-_gecbg )==_debg {_bda +=_bded [_bcbg +_gecbg ][_egdb +_debg ];
|
|
};};};if _bgdd > _ffda ||_bda > _ffda {return false ;};};};for _fgc :=0;_fgc < (_gfd -1);_fgc ++{for _ggbe :=0;_ggbe < (_gfd -1);_ggbe ++{var _fab int ;for _ffgd :=0;_ffgd < 2;_ffgd ++{for _afg :=0;_afg < 2;_afg ++{_fab +=_bded [_fgc +_ffgd ][_ggbe +_afg ];
|
|
};};if float64 (_fab )> _adbb {return false ;};};};return true ;};func _dfe (_be ,_dab *Bitmap )(_bca error ){const _bd ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_bbg :=_dab .RowStride ;
|
|
_ef :=_be .RowStride ;var _bg ,_eba ,_gb ,_gf ,_ba int ;for _gb =0;_gb < _dab .Height ;_gb ++{_bg =_gb *_bbg ;_eba =8*_gb *_ef ;for _gf =0;_gf < _bbg ;_gf ++{if _bca =_be .setEightBytes (_eba +_gf *8,_begc [_dab .Data [_bg +_gf ]]);_bca !=nil {return _a .Wrap (_bca ,_bd ,"");
|
|
};};for _ba =1;_ba < 8;_ba ++{for _gf =0;_gf < _ef ;_gf ++{if _bca =_be .SetByte (_eba +_ba *_ef +_gf ,_be .Data [_eba +_gf ]);_bca !=nil {return _a .Wrap (_bca ,_bd ,"");};};};};return nil ;};func (_cgcf *BitmapsArray )GetBox (i int )(*_bb .Rectangle ,error ){const _eddaa ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";
|
|
if _cgcf ==nil {return nil ,_a .Error (_eddaa ,"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 (_cgcf .Boxes )-1{return nil ,_a .Errorf (_eddaa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return _cgcf .Boxes [i ],nil ;};func TstWordBitmap (t *_ac .T ,scale ...int )*Bitmap {_adfg :=1;if len (scale )> 0{_adfg =scale [0];};_gbdea :=3;_eaacf :=9+7+15+2*_gbdea ;_aebd :=5+_gbdea +5;_fcca :=New (_eaacf *_adfg ,_aebd *_adfg );_efbg :=&Bitmaps {};
|
|
var _gffb *int ;_gbdea *=_adfg ;_acaa :=0;_gffb =&_acaa ;_fcba :=0;_aabec :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,1*_adfg );_aabec =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,_gbdea );_aabec =TstISymbol (t ,scale ...);
|
|
TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,1*_adfg );_aabec =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,_gbdea );_aabec =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,1*_adfg );_aabec =TstOSymbol (t ,scale ...);
|
|
TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,1*_adfg );_aabec =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,0);*_gffb =0;_fcba =5*_adfg +_gbdea ;_aabec =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,1*_adfg );
|
|
_aabec =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,_gbdea );_aabec =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,1*_adfg );_aabec =TstESymbol (t ,scale ...);TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,1*_adfg );
|
|
_aabec =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,1*_adfg );_aabec =TstESymbol (t ,scale ...);TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,1*_adfg );_aabec =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_efbg ,_aabec ,_gffb ,_fcba ,0);
|
|
TstWriteSymbols (t ,_efbg ,_fcca );return _fcca ;};func _ecgg (_ecdba ,_cabf ,_dbcde byte )byte {return (_ecdba &^(_dbcde ))|(_cabf &_dbcde )};func TstImageBitmapData ()[]byte {return _fbdf .Data };func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};
|
|
func _caafb (_egad ,_cag byte ,_dbdd CombinationOperator )byte {switch _dbdd {case CmbOpOr :return _cag |_egad ;case CmbOpAnd :return _cag &_egad ;case CmbOpXor :return _cag ^_egad ;case CmbOpXNor :return ^(_cag ^_egad );case CmbOpNot :return ^(_cag );
|
|
default:return _cag ;};};func _adfb (_dced ,_dcba *Bitmap ,_ccaee *Selection )(*Bitmap ,error ){const _fagg ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _edag error ;if _dced ,_edag =_afed (_dced ,_dcba ,_ccaee );_edag !=nil {return nil ,_edag ;
|
|
};_fccb ,_edag :=_fdc (nil ,_dcba ,_ccaee );if _edag !=nil {return nil ,_a .Wrap (_edag ,_fagg ,"");};if _ ,_edag =_bcgc (_dced ,_fccb ,_ccaee );_edag !=nil {return nil ,_a .Wrap (_edag ,_fagg ,"");};return _dced ,nil ;};func (_bdcag *Bitmaps )CountPixels ()*_b .NumSlice {_daed :=&_b .NumSlice {};
|
|
for _ ,_agccc :=range _bdcag .Values {_daed .AddInt (_agccc .CountPixels ());};return _daed ;};func (_cgaf *Bitmaps )Size ()int {return len (_cgaf .Values )};func (_gbdf *Bitmap )Zero ()bool {_dfb :=_gbdf .Width /8;_dgce :=_gbdf .Width &7;var _gfce byte ;
|
|
if _dgce !=0{_gfce =byte (0xff<<uint (8-_dgce ));};var _fced ,_egfd ,_cadb int ;for _egfd =0;_egfd < _gbdf .Height ;_egfd ++{_fced =_gbdf .RowStride *_egfd ;for _cadb =0;_cadb < _dfb ;_cadb ,_fced =_cadb +1,_fced +1{if _gbdf .Data [_fced ]!=0{return false ;
|
|
};};if _dgce > 0{if _gbdf .Data [_fced ]&_gfce !=0{return false ;};};};return true ;};func (_fcg *Bitmap )nextOnPixelLow (_deg ,_gae ,_ega ,_ffgg ,_aefa int )(_fbfb _bb .Point ,_ebe bool ,_fabc error ){const _dcef ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
|
|
var (_bdb int ;_afdg byte ;);_fea :=_aefa *_ega ;_dfg :=_fea +(_ffgg /8);if _afdg ,_fabc =_fcg .GetByte (_dfg );_fabc !=nil {return _fbfb ,false ,_a .Wrap (_fabc ,_dcef ,"\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 _afdg !=0{_bfged :=_ffgg -(_ffgg %8)+7;for _bdb =_ffgg ;_bdb <=_bfged &&_bdb < _deg ;_bdb ++{if _fcg .GetPixel (_bdb ,_aefa ){_fbfb .X =_bdb ;_fbfb .Y =_aefa ;return _fbfb ,true ,nil ;};};};_ebed :=(_ffgg /8)+1;_bdb =8*_ebed ;var _fdfdg int ;for _dfg =_fea +_ebed ;
|
|
_bdb < _deg ;_dfg ,_bdb =_dfg +1,_bdb +8{if _afdg ,_fabc =_fcg .GetByte (_dfg );_fabc !=nil {return _fbfb ,false ,_a .Wrap (_fabc ,_dcef ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _afdg ==0{continue ;
|
|
};for _fdfdg =0;_fdfdg < 8&&_bdb < _deg ;_fdfdg ,_bdb =_fdfdg +1,_bdb +1{if _fcg .GetPixel (_bdb ,_aefa ){_fbfb .X =_bdb ;_fbfb .Y =_aefa ;return _fbfb ,true ,nil ;};};};for _geb :=_aefa +1;_geb < _gae ;_geb ++{_fea =_geb *_ega ;for _dfg ,_bdb =_fea ,0;
|
|
_bdb < _deg ;_dfg ,_bdb =_dfg +1,_bdb +8{if _afdg ,_fabc =_fcg .GetByte (_dfg );_fabc !=nil {return _fbfb ,false ,_a .Wrap (_fabc ,_dcef ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _afdg ==0{continue ;};for _fdfdg =0;
|
|
_fdfdg < 8&&_bdb < _deg ;_fdfdg ,_bdb =_fdfdg +1,_bdb +1{if _fcg .GetPixel (_bdb ,_geb ){_fbfb .X =_bdb ;_fbfb .Y =_geb ;return _fbfb ,true ,nil ;};};};};return _fbfb ,false ,nil ;};func _feff (_ddfb *Bitmap ,_gged ,_adcgb ,_fbae ,_ddcda int ,_ecfb RasterOperator ){if _gged < 0{_fbae +=_gged ;
|
|
_gged =0;};_abga :=_gged +_fbae -_ddfb .Width ;if _abga > 0{_fbae -=_abga ;};if _adcgb < 0{_ddcda +=_adcgb ;_adcgb =0;};_aadgc :=_adcgb +_ddcda -_ddfb .Height ;if _aadgc > 0{_ddcda -=_aadgc ;};if _fbae <=0||_ddcda <=0{return ;};if (_gged &7)==0{_adbab (_ddfb ,_gged ,_adcgb ,_fbae ,_ddcda ,_ecfb );
|
|
}else {_gbad (_ddfb ,_gged ,_adcgb ,_fbae ,_ddcda ,_ecfb );};};func _dafg ()[]int {_ebac :=make ([]int ,256);_ebac [0]=0;_ebac [1]=7;var _bebg int ;for _bebg =2;_bebg < 4;_bebg ++{_ebac [_bebg ]=_ebac [_bebg -2]+6;};for _bebg =4;_bebg < 8;_bebg ++{_ebac [_bebg ]=_ebac [_bebg -4]+5;
|
|
};for _bebg =8;_bebg < 16;_bebg ++{_ebac [_bebg ]=_ebac [_bebg -8]+4;};for _bebg =16;_bebg < 32;_bebg ++{_ebac [_bebg ]=_ebac [_bebg -16]+3;};for _bebg =32;_bebg < 64;_bebg ++{_ebac [_bebg ]=_ebac [_bebg -32]+2;};for _bebg =64;_bebg < 128;_bebg ++{_ebac [_bebg ]=_ebac [_bebg -64]+1;
|
|
};for _bebg =128;_bebg < 256;_bebg ++{_ebac [_bebg ]=_ebac [_bebg -128];};return _ebac ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_bb .Rectangle ;};func (_bfa *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _bfa .removeBorderGeneral (left ,right ,top ,bot );
|
|
};func (_edcb *BitmapsArray )AddBox (box *_bb .Rectangle ){_edcb .Boxes =append (_edcb .Boxes ,box )};func (_dffe *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_gfe *Boxes ,_efee error ){const _ceaa ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
|
|
if _dffe ==nil {return nil ,_a .Error (_ceaa ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_dffe )==0{return _dffe ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_a .Errorf (_ceaa ,"\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 ,_a .Errorf (_ceaa ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
|
|
};_cdfc :=_dffe .makeSizeIndicator (width ,height ,tp ,relation );_bdbg ,_efee :=_dffe .selectWithIndicator (_cdfc );if _efee !=nil {return nil ,_a .Wrap (_efee ,_ceaa ,"");};return _bdbg ,nil ;};func _edda (_fcedfa *Bitmap ,_acca ,_fdbd ,_dffgf ,_abag int ,_fbcf RasterOperator ,_gfabg *Bitmap ,_gfeba ,_fffc int )error {var (_gade bool ;
|
|
_feaga bool ;_gfad byte ;_eade int ;_daeb int ;_dede int ;_fbcd int ;_bfcd bool ;_debab int ;_dccd int ;_gdgcd int ;_egab bool ;_edcf byte ;_fdad int ;_aeegg int ;_gdae int ;_gafg byte ;_ddbg int ;_cbad int ;_ecfdb uint ;_cdfb uint ;_bbbbg byte ;_aefb shift ;
|
|
_gdac bool ;_begcd bool ;_cdfa ,_fagee int ;);if _gfeba &7!=0{_cbad =8-(_gfeba &7);};if _acca &7!=0{_daeb =8-(_acca &7);};if _cbad ==0&&_daeb ==0{_bbbbg =_gcba [0];}else {if _daeb > _cbad {_ecfdb =uint (_daeb -_cbad );}else {_ecfdb =uint (8-(_cbad -_daeb ));
|
|
};_cdfb =8-_ecfdb ;_bbbbg =_gcba [_ecfdb ];};if (_acca &7)!=0{_gade =true ;_eade =8-(_acca &7);_gfad =_gcba [_eade ];_dede =_fcedfa .RowStride *_fdbd +(_acca >>3);_fbcd =_gfabg .RowStride *_fffc +(_gfeba >>3);_ddbg =8-(_gfeba &7);if _eade > _ddbg {_aefb =_gdcb ;
|
|
if _dffgf >=_cbad {_gdac =true ;};}else {_aefb =_ffcfa ;};};if _dffgf < _eade {_feaga =true ;_gfad &=_dfba [8-_eade +_dffgf ];};if !_feaga {_debab =(_dffgf -_eade )>>3;if _debab !=0{_bfcd =true ;_dccd =_fcedfa .RowStride *_fdbd +((_acca +_daeb )>>3);_gdgcd =_gfabg .RowStride *_fffc +((_gfeba +_daeb )>>3);
|
|
};};_fdad =(_acca +_dffgf )&7;if !(_feaga ||_fdad ==0){_egab =true ;_edcf =_dfba [_fdad ];_aeegg =_fcedfa .RowStride *_fdbd +((_acca +_daeb )>>3)+_debab ;_gdae =_gfabg .RowStride *_fffc +((_gfeba +_daeb )>>3)+_debab ;if _fdad > int (_cdfb ){_begcd =true ;
|
|
};};switch _fbcf {case PixSrc :if _gade {for _cdfa =0;_cdfa < _abag ;_cdfa ++{if _aefb ==_gdcb {_gafg =_gfabg .Data [_fbcd ]<<_ecfdb ;if _gdac {_gafg =_ecgg (_gafg ,_gfabg .Data [_fbcd +1]>>_cdfb ,_bbbbg );};}else {_gafg =_gfabg .Data [_fbcd ]>>_cdfb ;
|
|
};_fcedfa .Data [_dede ]=_ecgg (_fcedfa .Data [_dede ],_gafg ,_gfad );_dede +=_fcedfa .RowStride ;_fbcd +=_gfabg .RowStride ;};};if _bfcd {for _cdfa =0;_cdfa < _abag ;_cdfa ++{for _fagee =0;_fagee < _debab ;_fagee ++{_gafg =_ecgg (_gfabg .Data [_gdgcd +_fagee ]<<_ecfdb ,_gfabg .Data [_gdgcd +_fagee +1]>>_cdfb ,_bbbbg );
|
|
_fcedfa .Data [_dccd +_fagee ]=_gafg ;};_dccd +=_fcedfa .RowStride ;_gdgcd +=_gfabg .RowStride ;};};if _egab {for _cdfa =0;_cdfa < _abag ;_cdfa ++{_gafg =_gfabg .Data [_gdae ]<<_ecfdb ;if _begcd {_gafg =_ecgg (_gafg ,_gfabg .Data [_gdae +1]>>_cdfb ,_bbbbg );
|
|
};_fcedfa .Data [_aeegg ]=_ecgg (_fcedfa .Data [_aeegg ],_gafg ,_edcf );_aeegg +=_fcedfa .RowStride ;_gdae +=_gfabg .RowStride ;};};case PixNotSrc :if _gade {for _cdfa =0;_cdfa < _abag ;_cdfa ++{if _aefb ==_gdcb {_gafg =_gfabg .Data [_fbcd ]<<_ecfdb ;if _gdac {_gafg =_ecgg (_gafg ,_gfabg .Data [_fbcd +1]>>_cdfb ,_bbbbg );
|
|
};}else {_gafg =_gfabg .Data [_fbcd ]>>_cdfb ;};_fcedfa .Data [_dede ]=_ecgg (_fcedfa .Data [_dede ],^_gafg ,_gfad );_dede +=_fcedfa .RowStride ;_fbcd +=_gfabg .RowStride ;};};if _bfcd {for _cdfa =0;_cdfa < _abag ;_cdfa ++{for _fagee =0;_fagee < _debab ;
|
|
_fagee ++{_gafg =_ecgg (_gfabg .Data [_gdgcd +_fagee ]<<_ecfdb ,_gfabg .Data [_gdgcd +_fagee +1]>>_cdfb ,_bbbbg );_fcedfa .Data [_dccd +_fagee ]=^_gafg ;};_dccd +=_fcedfa .RowStride ;_gdgcd +=_gfabg .RowStride ;};};if _egab {for _cdfa =0;_cdfa < _abag ;
|
|
_cdfa ++{_gafg =_gfabg .Data [_gdae ]<<_ecfdb ;if _begcd {_gafg =_ecgg (_gafg ,_gfabg .Data [_gdae +1]>>_cdfb ,_bbbbg );};_fcedfa .Data [_aeegg ]=_ecgg (_fcedfa .Data [_aeegg ],^_gafg ,_edcf );_aeegg +=_fcedfa .RowStride ;_gdae +=_gfabg .RowStride ;};};
|
|
case PixSrcOrDst :if _gade {for _cdfa =0;_cdfa < _abag ;_cdfa ++{if _aefb ==_gdcb {_gafg =_gfabg .Data [_fbcd ]<<_ecfdb ;if _gdac {_gafg =_ecgg (_gafg ,_gfabg .Data [_fbcd +1]>>_cdfb ,_bbbbg );};}else {_gafg =_gfabg .Data [_fbcd ]>>_cdfb ;};_fcedfa .Data [_dede ]=_ecgg (_fcedfa .Data [_dede ],_gafg |_fcedfa .Data [_dede ],_gfad );
|
|
_dede +=_fcedfa .RowStride ;_fbcd +=_gfabg .RowStride ;};};if _bfcd {for _cdfa =0;_cdfa < _abag ;_cdfa ++{for _fagee =0;_fagee < _debab ;_fagee ++{_gafg =_ecgg (_gfabg .Data [_gdgcd +_fagee ]<<_ecfdb ,_gfabg .Data [_gdgcd +_fagee +1]>>_cdfb ,_bbbbg );_fcedfa .Data [_dccd +_fagee ]|=_gafg ;
|
|
};_dccd +=_fcedfa .RowStride ;_gdgcd +=_gfabg .RowStride ;};};if _egab {for _cdfa =0;_cdfa < _abag ;_cdfa ++{_gafg =_gfabg .Data [_gdae ]<<_ecfdb ;if _begcd {_gafg =_ecgg (_gafg ,_gfabg .Data [_gdae +1]>>_cdfb ,_bbbbg );};_fcedfa .Data [_aeegg ]=_ecgg (_fcedfa .Data [_aeegg ],_gafg |_fcedfa .Data [_aeegg ],_edcf );
|
|
_aeegg +=_fcedfa .RowStride ;_gdae +=_gfabg .RowStride ;};};case PixSrcAndDst :if _gade {for _cdfa =0;_cdfa < _abag ;_cdfa ++{if _aefb ==_gdcb {_gafg =_gfabg .Data [_fbcd ]<<_ecfdb ;if _gdac {_gafg =_ecgg (_gafg ,_gfabg .Data [_fbcd +1]>>_cdfb ,_bbbbg );
|
|
};}else {_gafg =_gfabg .Data [_fbcd ]>>_cdfb ;};_fcedfa .Data [_dede ]=_ecgg (_fcedfa .Data [_dede ],_gafg &_fcedfa .Data [_dede ],_gfad );_dede +=_fcedfa .RowStride ;_fbcd +=_gfabg .RowStride ;};};if _bfcd {for _cdfa =0;_cdfa < _abag ;_cdfa ++{for _fagee =0;
|
|
_fagee < _debab ;_fagee ++{_gafg =_ecgg (_gfabg .Data [_gdgcd +_fagee ]<<_ecfdb ,_gfabg .Data [_gdgcd +_fagee +1]>>_cdfb ,_bbbbg );_fcedfa .Data [_dccd +_fagee ]&=_gafg ;};_dccd +=_fcedfa .RowStride ;_gdgcd +=_gfabg .RowStride ;};};if _egab {for _cdfa =0;
|
|
_cdfa < _abag ;_cdfa ++{_gafg =_gfabg .Data [_gdae ]<<_ecfdb ;if _begcd {_gafg =_ecgg (_gafg ,_gfabg .Data [_gdae +1]>>_cdfb ,_bbbbg );};_fcedfa .Data [_aeegg ]=_ecgg (_fcedfa .Data [_aeegg ],_gafg &_fcedfa .Data [_aeegg ],_edcf );_aeegg +=_fcedfa .RowStride ;
|
|
_gdae +=_gfabg .RowStride ;};};case PixSrcXorDst :if _gade {for _cdfa =0;_cdfa < _abag ;_cdfa ++{if _aefb ==_gdcb {_gafg =_gfabg .Data [_fbcd ]<<_ecfdb ;if _gdac {_gafg =_ecgg (_gafg ,_gfabg .Data [_fbcd +1]>>_cdfb ,_bbbbg );};}else {_gafg =_gfabg .Data [_fbcd ]>>_cdfb ;
|
|
};_fcedfa .Data [_dede ]=_ecgg (_fcedfa .Data [_dede ],_gafg ^_fcedfa .Data [_dede ],_gfad );_dede +=_fcedfa .RowStride ;_fbcd +=_gfabg .RowStride ;};};if _bfcd {for _cdfa =0;_cdfa < _abag ;_cdfa ++{for _fagee =0;_fagee < _debab ;_fagee ++{_gafg =_ecgg (_gfabg .Data [_gdgcd +_fagee ]<<_ecfdb ,_gfabg .Data [_gdgcd +_fagee +1]>>_cdfb ,_bbbbg );
|
|
_fcedfa .Data [_dccd +_fagee ]^=_gafg ;};_dccd +=_fcedfa .RowStride ;_gdgcd +=_gfabg .RowStride ;};};if _egab {for _cdfa =0;_cdfa < _abag ;_cdfa ++{_gafg =_gfabg .Data [_gdae ]<<_ecfdb ;if _begcd {_gafg =_ecgg (_gafg ,_gfabg .Data [_gdae +1]>>_cdfb ,_bbbbg );
|
|
};_fcedfa .Data [_aeegg ]=_ecgg (_fcedfa .Data [_aeegg ],_gafg ^_fcedfa .Data [_aeegg ],_edcf );_aeegg +=_fcedfa .RowStride ;_gdae +=_gfabg .RowStride ;};};case PixNotSrcOrDst :if _gade {for _cdfa =0;_cdfa < _abag ;_cdfa ++{if _aefb ==_gdcb {_gafg =_gfabg .Data [_fbcd ]<<_ecfdb ;
|
|
if _gdac {_gafg =_ecgg (_gafg ,_gfabg .Data [_fbcd +1]>>_cdfb ,_bbbbg );};}else {_gafg =_gfabg .Data [_fbcd ]>>_cdfb ;};_fcedfa .Data [_dede ]=_ecgg (_fcedfa .Data [_dede ],^_gafg |_fcedfa .Data [_dede ],_gfad );_dede +=_fcedfa .RowStride ;_fbcd +=_gfabg .RowStride ;
|
|
};};if _bfcd {for _cdfa =0;_cdfa < _abag ;_cdfa ++{for _fagee =0;_fagee < _debab ;_fagee ++{_gafg =_ecgg (_gfabg .Data [_gdgcd +_fagee ]<<_ecfdb ,_gfabg .Data [_gdgcd +_fagee +1]>>_cdfb ,_bbbbg );_fcedfa .Data [_dccd +_fagee ]|=^_gafg ;};_dccd +=_fcedfa .RowStride ;
|
|
_gdgcd +=_gfabg .RowStride ;};};if _egab {for _cdfa =0;_cdfa < _abag ;_cdfa ++{_gafg =_gfabg .Data [_gdae ]<<_ecfdb ;if _begcd {_gafg =_ecgg (_gafg ,_gfabg .Data [_gdae +1]>>_cdfb ,_bbbbg );};_fcedfa .Data [_aeegg ]=_ecgg (_fcedfa .Data [_aeegg ],^_gafg |_fcedfa .Data [_aeegg ],_edcf );
|
|
_aeegg +=_fcedfa .RowStride ;_gdae +=_gfabg .RowStride ;};};case PixNotSrcAndDst :if _gade {for _cdfa =0;_cdfa < _abag ;_cdfa ++{if _aefb ==_gdcb {_gafg =_gfabg .Data [_fbcd ]<<_ecfdb ;if _gdac {_gafg =_ecgg (_gafg ,_gfabg .Data [_fbcd +1]>>_cdfb ,_bbbbg );
|
|
};}else {_gafg =_gfabg .Data [_fbcd ]>>_cdfb ;};_fcedfa .Data [_dede ]=_ecgg (_fcedfa .Data [_dede ],^_gafg &_fcedfa .Data [_dede ],_gfad );_dede +=_fcedfa .RowStride ;_fbcd +=_gfabg .RowStride ;};};if _bfcd {for _cdfa =0;_cdfa < _abag ;_cdfa ++{for _fagee =0;
|
|
_fagee < _debab ;_fagee ++{_gafg =_ecgg (_gfabg .Data [_gdgcd +_fagee ]<<_ecfdb ,_gfabg .Data [_gdgcd +_fagee +1]>>_cdfb ,_bbbbg );_fcedfa .Data [_dccd +_fagee ]&=^_gafg ;};_dccd +=_fcedfa .RowStride ;_gdgcd +=_gfabg .RowStride ;};};if _egab {for _cdfa =0;
|
|
_cdfa < _abag ;_cdfa ++{_gafg =_gfabg .Data [_gdae ]<<_ecfdb ;if _begcd {_gafg =_ecgg (_gafg ,_gfabg .Data [_gdae +1]>>_cdfb ,_bbbbg );};_fcedfa .Data [_aeegg ]=_ecgg (_fcedfa .Data [_aeegg ],^_gafg &_fcedfa .Data [_aeegg ],_edcf );_aeegg +=_fcedfa .RowStride ;
|
|
_gdae +=_gfabg .RowStride ;};};case PixSrcOrNotDst :if _gade {for _cdfa =0;_cdfa < _abag ;_cdfa ++{if _aefb ==_gdcb {_gafg =_gfabg .Data [_fbcd ]<<_ecfdb ;if _gdac {_gafg =_ecgg (_gafg ,_gfabg .Data [_fbcd +1]>>_cdfb ,_bbbbg );};}else {_gafg =_gfabg .Data [_fbcd ]>>_cdfb ;
|
|
};_fcedfa .Data [_dede ]=_ecgg (_fcedfa .Data [_dede ],_gafg |^_fcedfa .Data [_dede ],_gfad );_dede +=_fcedfa .RowStride ;_fbcd +=_gfabg .RowStride ;};};if _bfcd {for _cdfa =0;_cdfa < _abag ;_cdfa ++{for _fagee =0;_fagee < _debab ;_fagee ++{_gafg =_ecgg (_gfabg .Data [_gdgcd +_fagee ]<<_ecfdb ,_gfabg .Data [_gdgcd +_fagee +1]>>_cdfb ,_bbbbg );
|
|
_fcedfa .Data [_dccd +_fagee ]=_gafg |^_fcedfa .Data [_dccd +_fagee ];};_dccd +=_fcedfa .RowStride ;_gdgcd +=_gfabg .RowStride ;};};if _egab {for _cdfa =0;_cdfa < _abag ;_cdfa ++{_gafg =_gfabg .Data [_gdae ]<<_ecfdb ;if _begcd {_gafg =_ecgg (_gafg ,_gfabg .Data [_gdae +1]>>_cdfb ,_bbbbg );
|
|
};_fcedfa .Data [_aeegg ]=_ecgg (_fcedfa .Data [_aeegg ],_gafg |^_fcedfa .Data [_aeegg ],_edcf );_aeegg +=_fcedfa .RowStride ;_gdae +=_gfabg .RowStride ;};};case PixSrcAndNotDst :if _gade {for _cdfa =0;_cdfa < _abag ;_cdfa ++{if _aefb ==_gdcb {_gafg =_gfabg .Data [_fbcd ]<<_ecfdb ;
|
|
if _gdac {_gafg =_ecgg (_gafg ,_gfabg .Data [_fbcd +1]>>_cdfb ,_bbbbg );};}else {_gafg =_gfabg .Data [_fbcd ]>>_cdfb ;};_fcedfa .Data [_dede ]=_ecgg (_fcedfa .Data [_dede ],_gafg &^_fcedfa .Data [_dede ],_gfad );_dede +=_fcedfa .RowStride ;_fbcd +=_gfabg .RowStride ;
|
|
};};if _bfcd {for _cdfa =0;_cdfa < _abag ;_cdfa ++{for _fagee =0;_fagee < _debab ;_fagee ++{_gafg =_ecgg (_gfabg .Data [_gdgcd +_fagee ]<<_ecfdb ,_gfabg .Data [_gdgcd +_fagee +1]>>_cdfb ,_bbbbg );_fcedfa .Data [_dccd +_fagee ]=_gafg &^_fcedfa .Data [_dccd +_fagee ];
|
|
};_dccd +=_fcedfa .RowStride ;_gdgcd +=_gfabg .RowStride ;};};if _egab {for _cdfa =0;_cdfa < _abag ;_cdfa ++{_gafg =_gfabg .Data [_gdae ]<<_ecfdb ;if _begcd {_gafg =_ecgg (_gafg ,_gfabg .Data [_gdae +1]>>_cdfb ,_bbbbg );};_fcedfa .Data [_aeegg ]=_ecgg (_fcedfa .Data [_aeegg ],_gafg &^_fcedfa .Data [_aeegg ],_edcf );
|
|
_aeegg +=_fcedfa .RowStride ;_gdae +=_gfabg .RowStride ;};};case PixNotPixSrcOrDst :if _gade {for _cdfa =0;_cdfa < _abag ;_cdfa ++{if _aefb ==_gdcb {_gafg =_gfabg .Data [_fbcd ]<<_ecfdb ;if _gdac {_gafg =_ecgg (_gafg ,_gfabg .Data [_fbcd +1]>>_cdfb ,_bbbbg );
|
|
};}else {_gafg =_gfabg .Data [_fbcd ]>>_cdfb ;};_fcedfa .Data [_dede ]=_ecgg (_fcedfa .Data [_dede ],^(_gafg |_fcedfa .Data [_dede ]),_gfad );_dede +=_fcedfa .RowStride ;_fbcd +=_gfabg .RowStride ;};};if _bfcd {for _cdfa =0;_cdfa < _abag ;_cdfa ++{for _fagee =0;
|
|
_fagee < _debab ;_fagee ++{_gafg =_ecgg (_gfabg .Data [_gdgcd +_fagee ]<<_ecfdb ,_gfabg .Data [_gdgcd +_fagee +1]>>_cdfb ,_bbbbg );_fcedfa .Data [_dccd +_fagee ]=^(_gafg |_fcedfa .Data [_dccd +_fagee ]);};_dccd +=_fcedfa .RowStride ;_gdgcd +=_gfabg .RowStride ;
|
|
};};if _egab {for _cdfa =0;_cdfa < _abag ;_cdfa ++{_gafg =_gfabg .Data [_gdae ]<<_ecfdb ;if _begcd {_gafg =_ecgg (_gafg ,_gfabg .Data [_gdae +1]>>_cdfb ,_bbbbg );};_fcedfa .Data [_aeegg ]=_ecgg (_fcedfa .Data [_aeegg ],^(_gafg |_fcedfa .Data [_aeegg ]),_edcf );
|
|
_aeegg +=_fcedfa .RowStride ;_gdae +=_gfabg .RowStride ;};};case PixNotPixSrcAndDst :if _gade {for _cdfa =0;_cdfa < _abag ;_cdfa ++{if _aefb ==_gdcb {_gafg =_gfabg .Data [_fbcd ]<<_ecfdb ;if _gdac {_gafg =_ecgg (_gafg ,_gfabg .Data [_fbcd +1]>>_cdfb ,_bbbbg );
|
|
};}else {_gafg =_gfabg .Data [_fbcd ]>>_cdfb ;};_fcedfa .Data [_dede ]=_ecgg (_fcedfa .Data [_dede ],^(_gafg &_fcedfa .Data [_dede ]),_gfad );_dede +=_fcedfa .RowStride ;_fbcd +=_gfabg .RowStride ;};};if _bfcd {for _cdfa =0;_cdfa < _abag ;_cdfa ++{for _fagee =0;
|
|
_fagee < _debab ;_fagee ++{_gafg =_ecgg (_gfabg .Data [_gdgcd +_fagee ]<<_ecfdb ,_gfabg .Data [_gdgcd +_fagee +1]>>_cdfb ,_bbbbg );_fcedfa .Data [_dccd +_fagee ]=^(_gafg &_fcedfa .Data [_dccd +_fagee ]);};_dccd +=_fcedfa .RowStride ;_gdgcd +=_gfabg .RowStride ;
|
|
};};if _egab {for _cdfa =0;_cdfa < _abag ;_cdfa ++{_gafg =_gfabg .Data [_gdae ]<<_ecfdb ;if _begcd {_gafg =_ecgg (_gafg ,_gfabg .Data [_gdae +1]>>_cdfb ,_bbbbg );};_fcedfa .Data [_aeegg ]=_ecgg (_fcedfa .Data [_aeegg ],^(_gafg &_fcedfa .Data [_aeegg ]),_edcf );
|
|
_aeegg +=_fcedfa .RowStride ;_gdae +=_gfabg .RowStride ;};};case PixNotPixSrcXorDst :if _gade {for _cdfa =0;_cdfa < _abag ;_cdfa ++{if _aefb ==_gdcb {_gafg =_gfabg .Data [_fbcd ]<<_ecfdb ;if _gdac {_gafg =_ecgg (_gafg ,_gfabg .Data [_fbcd +1]>>_cdfb ,_bbbbg );
|
|
};}else {_gafg =_gfabg .Data [_fbcd ]>>_cdfb ;};_fcedfa .Data [_dede ]=_ecgg (_fcedfa .Data [_dede ],^(_gafg ^_fcedfa .Data [_dede ]),_gfad );_dede +=_fcedfa .RowStride ;_fbcd +=_gfabg .RowStride ;};};if _bfcd {for _cdfa =0;_cdfa < _abag ;_cdfa ++{for _fagee =0;
|
|
_fagee < _debab ;_fagee ++{_gafg =_ecgg (_gfabg .Data [_gdgcd +_fagee ]<<_ecfdb ,_gfabg .Data [_gdgcd +_fagee +1]>>_cdfb ,_bbbbg );_fcedfa .Data [_dccd +_fagee ]=^(_gafg ^_fcedfa .Data [_dccd +_fagee ]);};_dccd +=_fcedfa .RowStride ;_gdgcd +=_gfabg .RowStride ;
|
|
};};if _egab {for _cdfa =0;_cdfa < _abag ;_cdfa ++{_gafg =_gfabg .Data [_gdae ]<<_ecfdb ;if _begcd {_gafg =_ecgg (_gafg ,_gfabg .Data [_gdae +1]>>_cdfb ,_bbbbg );};_fcedfa .Data [_aeegg ]=_ecgg (_fcedfa .Data [_aeegg ],^(_gafg ^_fcedfa .Data [_aeegg ]),_edcf );
|
|
_aeegg +=_fcedfa .RowStride ;_gdae +=_gfabg .RowStride ;};};default:_dc .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",_fbcf );
|
|
return _a .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 CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _caafb (oldByte ,newByte ,op );};type Points []Point ;func (_gcdg *Bitmap )GetBitOffset (x int )int {return x &0x07};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _feeg (src ,sequence ...);
|
|
};func (_dfgf Points )GetIntY (i int )(int ,error ){if i >=len (_dfgf ){return 0,_a .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 (_dfgf [i ].Y ),nil ;};func _efa ()(_afc [256]uint64 ){for _fac :=0;_fac < 256;_fac ++{if _fac &0x01!=0{_afc [_fac ]|=0xff;};if _fac &0x02!=0{_afc [_fac ]|=0xff00;};if _fac &0x04!=0{_afc [_fac ]|=0xff0000;};if _fac &0x08!=0{_afc [_fac ]|=0xff000000;
|
|
};if _fac &0x10!=0{_afc [_fac ]|=0xff00000000;};if _fac &0x20!=0{_afc [_fac ]|=0xff0000000000;};if _fac &0x40!=0{_afc [_fac ]|=0xff000000000000;};if _fac &0x80!=0{_afc [_fac ]|=0xff00000000000000;};};return _afc ;};func (_egef *ClassedPoints )XAtIndex (i int )float32 {return (*_egef .Points )[_egef .IntSlice [i ]].X };
|
|
func TstISymbol (t *_ac .T ,scale ...int )*Bitmap {_fadg ,_eeggb :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_gd .NoError (t ,_eeggb );return TstGetScaledSymbol (t ,_fadg ,scale ...);};func (_cdbb *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_dcdg *Bitmaps ,_dabd *Boxes ,_cafa error ){const _egfca ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
|
|
if _cdbb ==nil {return nil ,nil ,_a .Error (_egfca ,"\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 ,_a .Error (_egfca ,"\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 _cdbb .Zero (){_dabd =&Boxes {};_dcdg =&Bitmaps {};return _dcdg ,_dabd ,nil ;};switch components {case ComponentConn :_dcdg =&Bitmaps {};if _dabd ,_cafa =_cdbb .ConnComponents (_dcdg ,8);_cafa !=nil {return nil ,nil ,_a .Wrap (_cafa ,_egfca ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};case ComponentCharacters :_cdd ,_cfe :=MorphSequence (_cdbb ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _cfe !=nil {return nil ,nil ,_a .Wrap (_cfe ,_egfca ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};if _dc .Log .IsLogLevel (_dc .LogLevelTrace ){_dc .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",_cdd .String ());
|
|
};_fcbd :=&Bitmaps {};_dabd ,_cfe =_cdd .ConnComponents (_fcbd ,8);if _cfe !=nil {return nil ,nil ,_a .Wrap (_cfe ,_egfca ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};if _dc .Log .IsLogLevel (_dc .LogLevelTrace ){_dc .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",_fcbd .String ());
|
|
};if _dcdg ,_cfe =_fcbd .ClipToBitmap (_cdbb );_cfe !=nil {return nil ,nil ,_a .Wrap (_cfe ,_egfca ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_gcde :=1;
|
|
var _cafg *Bitmap ;switch {case _cdbb .XResolution <=200:_cafg =_cdbb ;case _cdbb .XResolution <=400:_gcde =2;_cafg ,_cafa =_aff (_cdbb ,1,0,0,0);if _cafa !=nil {return nil ,nil ,_a .Wrap (_cafa ,_egfca ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
|
|
};default:_gcde =4;_cafg ,_cafa =_aff (_cdbb ,1,1,0,0);if _cafa !=nil {return nil ,nil ,_a .Wrap (_cafa ,_egfca ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
|
|
};};_aba ,_ ,_dcc :=_bdeb (_cafg );if _dcc !=nil {return nil ,nil ,_a .Wrap (_dcc ,_egfca ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_cbaf ,_dcc :=_cebc (_aba ,_gcde );if _dcc !=nil {return nil ,nil ,_a .Wrap (_dcc ,_egfca ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
|
|
};_bgfc :=&Bitmaps {};if _dabd ,_dcc =_cbaf .ConnComponents (_bgfc ,4);_dcc !=nil {return nil ,nil ,_a .Wrap (_dcc ,_egfca ,"\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 _dcdg ,_dcc =_bgfc .ClipToBitmap (_cdbb );_dcc !=nil {return nil ,nil ,_a .Wrap (_dcc ,_egfca ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_dcdg ,_cafa =_dcdg .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
|
|
if _cafa !=nil {return nil ,nil ,_a .Wrap (_cafa ,_egfca ,"");};_dabd ,_cafa =_dabd .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _cafa !=nil {return nil ,nil ,_a .Wrap (_cafa ,_egfca ,"");};return _dcdg ,_dabd ,nil ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_gfgbe bool ,_gcb error ){const _dffea ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
|
|
_fbfa ,_bdge :=p1 .Width ,p1 .Height ;_bdee ,_eged :=p3 .Width ,p3 .Height ;if _b .Abs (_fbfa -_bdee )> maxDiffW {return false ,nil ;};if _b .Abs (_bdge -_eged )> maxDiffH {return false ,nil ;};_bbgb :=int (float32 (area1 )*(1.0-rank )+0.5);_feca :=int (float32 (area3 )*(1.0-rank )+0.5);
|
|
var _bdce ,_eafe int ;if delX >=0{_bdce =int (delX +0.5);}else {_bdce =int (delX -0.5);};if delY >=0{_eafe =int (delY +0.5);}else {_eafe =int (delY -0.5);};_gbbd :=p1 .CreateTemplate ();if _gcb =_gbbd .RasterOperation (0,0,_fbfa ,_bdge ,PixSrc ,p1 ,0,0);
|
|
_gcb !=nil {return false ,_a .Wrap (_gcb ,_dffea ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gcb =_gbbd .RasterOperation (_bdce ,_eafe ,_fbfa ,_bdge ,PixNotSrcAndDst ,p4 ,0,0);_gcb !=nil {return false ,_a .Wrap (_gcb ,_dffea ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
|
|
};_gfgbe ,_gcb =_gbbd .ThresholdPixelSum (_bbgb ,tab8 );if _gcb !=nil {return false ,_a .Wrap (_gcb ,_dffea ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _gfgbe {return false ,nil ;};if _gcb =_gbbd .RasterOperation (_bdce ,_eafe ,_bdee ,_eged ,PixSrc ,p3 ,0,0);
|
|
_gcb !=nil {return false ,_a .Wrap (_gcb ,_dffea ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gcb =_gbbd .RasterOperation (0,0,_bdee ,_eged ,PixNotSrcAndDst ,p2 ,0,0);_gcb !=nil {return false ,_a .Wrap (_gcb ,_dffea ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
|
|
};_gfgbe ,_gcb =_gbbd .ThresholdPixelSum (_feca ,tab8 );if _gcb !=nil {return false ,_a .Wrap (_gcb ,_dffea ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_gfgbe ,nil ;};func (_cffc *Bitmap )addBorderGeneral (_gffe ,_bbeg ,_ddf ,_cdc int ,_gdg int )(*Bitmap ,error ){const _fga ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
|
|
if _gffe < 0||_bbeg < 0||_ddf < 0||_cdc < 0{return nil ,_a .Error (_fga ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_ggb ,_bbec :=_cffc .Width ,_cffc .Height ;_egdf :=_ggb +_gffe +_bbeg ;_fdag :=_bbec +_ddf +_cdc ;
|
|
_cgb :=New (_egdf ,_fdag );_cgb .Color =_cffc .Color ;_aacb :=PixClr ;if _gdg > 0{_aacb =PixSet ;};_egfg :=_cgb .RasterOperation (0,0,_gffe ,_fdag ,_aacb ,nil ,0,0);if _egfg !=nil {return nil ,_a .Wrap (_egfg ,_fga ,"\u006c\u0065\u0066\u0074");};_egfg =_cgb .RasterOperation (_egdf -_bbeg ,0,_bbeg ,_fdag ,_aacb ,nil ,0,0);
|
|
if _egfg !=nil {return nil ,_a .Wrap (_egfg ,_fga ,"\u0072\u0069\u0067h\u0074");};_egfg =_cgb .RasterOperation (0,0,_egdf ,_ddf ,_aacb ,nil ,0,0);if _egfg !=nil {return nil ,_a .Wrap (_egfg ,_fga ,"\u0074\u006f\u0070");};_egfg =_cgb .RasterOperation (0,_fdag -_cdc ,_egdf ,_cdc ,_aacb ,nil ,0,0);
|
|
if _egfg !=nil {return nil ,_a .Wrap (_egfg ,_fga ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_egfg =_cgb .RasterOperation (_gffe ,_ddf ,_ggb ,_bbec ,PixSrc ,_cffc ,0,0);if _egfg !=nil {return nil ,_a .Wrap (_egfg ,_fga ,"\u0063\u006f\u0070\u0079");};return _cgb ,nil ;
|
|
};func TstPSymbol (t *_ac .T )*Bitmap {t .Helper ();_dddb :=New (5,8);_gd .NoError (t ,_dddb .SetPixel (0,0,1));_gd .NoError (t ,_dddb .SetPixel (1,0,1));_gd .NoError (t ,_dddb .SetPixel (2,0,1));_gd .NoError (t ,_dddb .SetPixel (3,0,1));_gd .NoError (t ,_dddb .SetPixel (4,1,1));
|
|
_gd .NoError (t ,_dddb .SetPixel (0,1,1));_gd .NoError (t ,_dddb .SetPixel (4,2,1));_gd .NoError (t ,_dddb .SetPixel (0,2,1));_gd .NoError (t ,_dddb .SetPixel (4,3,1));_gd .NoError (t ,_dddb .SetPixel (0,3,1));_gd .NoError (t ,_dddb .SetPixel (0,4,1));
|
|
_gd .NoError (t ,_dddb .SetPixel (1,4,1));_gd .NoError (t ,_dddb .SetPixel (2,4,1));_gd .NoError (t ,_dddb .SetPixel (3,4,1));_gd .NoError (t ,_dddb .SetPixel (0,5,1));_gd .NoError (t ,_dddb .SetPixel (0,6,1));_gd .NoError (t ,_dddb .SetPixel (0,7,1));
|
|
return _dddb ;};func (_cbea *Boxes )Get (i int )(*_bb .Rectangle ,error ){const _aec ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _cbea ==nil {return nil ,_a .Error (_aec ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if i > len (*_cbea )-1{return nil ,_a .Errorf (_aec ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_cbea )[i ],nil ;};func _bdeb (_gaed *Bitmap )(_egcc *Bitmap ,_cdcab int ,_fadf error ){const _adde ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
|
|
if _gaed ==nil {return nil ,0,_a .Errorf (_adde ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _gccf ,_gcddc *Bitmap ;if _gccf ,_fadf =_gbc (nil ,_gaed );_fadf !=nil {return nil ,0,_a .Wrap (_fadf ,_adde ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
|
|
};var (_bgde [13]int ;_cbdf ,_afeg int ;);_cbab :=12;_aecb :=_b .NewNumSlice (_cbab +1);_dgg :=_b .NewNumSlice (_cbab +1);var _gaee *Boxes ;for _gdfe :=0;_gdfe <=_cbab ;_gdfe ++{if _gdfe ==0{if _gcddc ,_fadf =_gbc (nil ,_gccf );_fadf !=nil {return nil ,0,_a .Wrap (_fadf ,_adde ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
|
|
};}else {if _gcddc ,_fadf =_feeg (_gccf ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_fadf !=nil {return nil ,0,_a .Wrap (_fadf ,_adde ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _gaee ,_fadf =_gcddc .connComponentsBB (4);
|
|
_fadf !=nil {return nil ,0,_a .Wrap (_fadf ,_adde ,"");};_bgde [_gdfe ]=len (*_gaee );_aecb .AddInt (_bgde [_gdfe ]);switch _gdfe {case 0:_cbdf =_bgde [0];default:_afeg =_bgde [_gdfe -1]-_bgde [_gdfe ];_dgg .AddInt (_afeg );};_gccf =_gcddc ;};_aadg :=true ;
|
|
_aggf :=2;var _affgb ,_cgec int ;for _ccadg :=1;_ccadg < len (*_dgg );_ccadg ++{if _affgb ,_fadf =_aecb .GetInt (_ccadg );_fadf !=nil {return nil ,0,_a .Wrap (_fadf ,_adde ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
|
|
};if _aadg &&_affgb < int (0.3*float32 (_cbdf )){_aggf =_ccadg +1;_aadg =false ;};if _afeg ,_fadf =_dgg .GetInt (_ccadg );_fadf !=nil {return nil ,0,_a .Wrap (_fadf ,_adde ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
|
|
};if _afeg > _cgec {_cgec =_afeg ;};};_dbcd :=_gaed .XResolution ;if _dbcd ==0{_dbcd =150;};if _dbcd > 110{_aggf ++;};if _aggf < 2{_dc .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");
|
|
_aggf =2;};_cdcab =_aggf +1;if _egcc ,_fadf =_fgba (nil ,_gaed ,_aggf +1,1);_fadf !=nil {return nil ,0,_a .Wrap (_fadf ,_adde ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _egcc ,_cdcab ,nil ;
|
|
};func (_agfff *byWidth )Swap (i ,j int ){_agfff .Values [i ],_agfff .Values [j ]=_agfff .Values [j ],_agfff .Values [i ];if _agfff .Boxes !=nil {_agfff .Boxes [i ],_agfff .Boxes [j ]=_agfff .Boxes [j ],_agfff .Boxes [i ];};};type Boxes []*_bb .Rectangle ;
|
|
func (_acb *Bitmap )resizeImageData (_gefd *Bitmap )error {if _gefd ==nil {return _a .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 _acb .SizesEqual (_gefd ){return nil ;};_acb .Data =make ([]byte ,len (_gefd .Data ));_acb .Width =_gefd .Width ;_acb .Height =_gefd .Height ;_acb .RowStride =_gefd .RowStride ;return nil ;};func (_cgg *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_gfga bool ,_bcc error ){const _bgca ="\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 =_daea ();};_eddg :=_cgg .Width >>3;_dba :=_cgg .Width &7;_bcag :=byte (0xff<<uint (8-_dba ));var (_bfc ,_bgb ,_fbdg ,_dbge int ;_gbg byte ;);for _bfc =0;_bfc < _cgg .Height ;_bfc ++{_fbdg =_cgg .RowStride *_bfc ;for _bgb =0;_bgb < _eddg ;
|
|
_bgb ++{_gbg ,_bcc =_cgg .GetByte (_fbdg +_bgb );if _bcc !=nil {return false ,_a .Wrap (_bcc ,_bgca ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_dbge +=tab8 [_gbg ];};if _dba !=0{_gbg ,_bcc =_cgg .GetByte (_fbdg +_bgb );if _bcc !=nil {return false ,_a .Wrap (_bcc ,_bgca ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");
|
|
};_gbg &=_bcag ;_dbge +=tab8 [_gbg ];};if _dbge > thresh {return true ,nil ;};};return _gfga ,nil ;};const (_gdcb shift =iota ;_ffcfa ;);var (_dfba =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_gcba =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
|
|
);func (_ccg *Bitmap )setEightPartlyBytes (_ddbe ,_acbe int ,_gbfd uint64 )(_dded error ){var (_bffc byte ;_bggc int ;);const _fgcg ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _bafb :=1;
|
|
_bafb <=_acbe ;_bafb ++{_bggc =64-_bafb *8;_bffc =byte (_gbfd >>uint (_bggc )&0xff);_dc .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",_bffc ,_ddbe ,_ddbe +_bafb -1,_acbe ,_bggc );
|
|
if _dded =_ccg .SetByte (_ddbe +_bafb -1,_bffc );_dded !=nil {return _a .Wrap (_dded ,_fgcg ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_dddc :=_ccg .RowStride *8-_ccg .Width ;if _dddc ==0{return nil ;};_bggc -=8;_bffc =byte (_gbfd >>uint (_bggc )&0xff)<<uint (_dddc );
|
|
if _dded =_ccg .SetByte (_ddbe +_acbe ,_bffc );_dded !=nil {return _a .Wrap (_dded ,_fgcg ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func _eagf (_fcab *Bitmap ,_ffdf *Bitmap ,_gcbd int )(_gaad error ){const _ccgd ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";
|
|
_daaf :=_bdaf (_fcab .Height ,_ffdf .Height );_bbdb :=_bdaf (_fcab .RowStride ,_ffdf .RowStride );switch _gcbd {case 4:_gaad =_cbfd (_fcab ,_ffdf ,_daaf ,_bbdb );case 8:_gaad =_abcfe (_fcab ,_ffdf ,_daaf ,_bbdb );default:return _a .Errorf (_ccgd ,"\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",_gcbd );
|
|
};if _gaad !=nil {return _a .Wrap (_gaad ,_ccgd ,"");};return nil ;};func (_fdffa *Bitmap )CountPixels ()int {return _fdffa .countPixels ()};func TstNSymbol (t *_ac .T ,scale ...int )*Bitmap {_bcfb ,_abcd :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});
|
|
_gd .NoError (t ,_abcd );return TstGetScaledSymbol (t ,_bcfb ,scale ...);};func TstGetScaledSymbol (t *_ac .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_fccbd ,_fbffa :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });
|
|
_gd .NoError (t ,_fbffa );return _fccbd ;};func (_bbb *Boxes )makeSizeIndicator (_dbda ,_cgbg int ,_bdd LocationFilter ,_cbf SizeComparison )*_b .NumSlice {_ecd :=&_b .NumSlice {};var _dbbc ,_eff ,_bcgf int ;for _ ,_edec :=range *_bbb {_dbbc =0;_eff ,_bcgf =_edec .Dx (),_edec .Dy ();
|
|
switch _bdd {case LocSelectWidth :if (_cbf ==SizeSelectIfLT &&_eff < _dbda )||(_cbf ==SizeSelectIfGT &&_eff > _dbda )||(_cbf ==SizeSelectIfLTE &&_eff <=_dbda )||(_cbf ==SizeSelectIfGTE &&_eff >=_dbda ){_dbbc =1;};case LocSelectHeight :if (_cbf ==SizeSelectIfLT &&_bcgf < _cgbg )||(_cbf ==SizeSelectIfGT &&_bcgf > _cgbg )||(_cbf ==SizeSelectIfLTE &&_bcgf <=_cgbg )||(_cbf ==SizeSelectIfGTE &&_bcgf >=_cgbg ){_dbbc =1;
|
|
};case LocSelectIfEither :if (_cbf ==SizeSelectIfLT &&(_bcgf < _cgbg ||_eff < _dbda ))||(_cbf ==SizeSelectIfGT &&(_bcgf > _cgbg ||_eff > _dbda ))||(_cbf ==SizeSelectIfLTE &&(_bcgf <=_cgbg ||_eff <=_dbda ))||(_cbf ==SizeSelectIfGTE &&(_bcgf >=_cgbg ||_eff >=_dbda )){_dbbc =1;
|
|
};case LocSelectIfBoth :if (_cbf ==SizeSelectIfLT &&(_bcgf < _cgbg &&_eff < _dbda ))||(_cbf ==SizeSelectIfGT &&(_bcgf > _cgbg &&_eff > _dbda ))||(_cbf ==SizeSelectIfLTE &&(_bcgf <=_cgbg &&_eff <=_dbda ))||(_cbf ==SizeSelectIfGTE &&(_bcgf >=_cgbg &&_eff >=_dbda )){_dbbc =1;
|
|
};};_ecd .AddInt (_dbbc );};return _ecd ;};func NewClassedPoints (points *Points ,classes _b .IntSlice )(*ClassedPoints ,error ){const _abea ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_a .Error (_abea ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");
|
|
};if classes ==nil {return nil ,_a .Error (_abea ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_caefg :=&ClassedPoints {Points :points ,IntSlice :classes };if _cbbd :=_caefg .validateIntSlice ();_cbbd !=nil {return nil ,_a .Wrap (_cbbd ,_abea ,"");
|
|
};return _caefg ,nil ;};func (_fdfa *ClassedPoints )Swap (i ,j int ){_fdfa .IntSlice [i ],_fdfa .IntSlice [j ]=_fdfa .IntSlice [j ],_fdfa .IntSlice [i ];};func TstASymbol (t *_ac .T )*Bitmap {t .Helper ();_fdbda :=New (6,6);_gd .NoError (t ,_fdbda .SetPixel (1,0,1));
|
|
_gd .NoError (t ,_fdbda .SetPixel (2,0,1));_gd .NoError (t ,_fdbda .SetPixel (3,0,1));_gd .NoError (t ,_fdbda .SetPixel (4,0,1));_gd .NoError (t ,_fdbda .SetPixel (5,1,1));_gd .NoError (t ,_fdbda .SetPixel (1,2,1));_gd .NoError (t ,_fdbda .SetPixel (2,2,1));
|
|
_gd .NoError (t ,_fdbda .SetPixel (3,2,1));_gd .NoError (t ,_fdbda .SetPixel (4,2,1));_gd .NoError (t ,_fdbda .SetPixel (5,2,1));_gd .NoError (t ,_fdbda .SetPixel (0,3,1));_gd .NoError (t ,_fdbda .SetPixel (5,3,1));_gd .NoError (t ,_fdbda .SetPixel (0,4,1));
|
|
_gd .NoError (t ,_fdbda .SetPixel (5,4,1));_gd .NoError (t ,_fdbda .SetPixel (1,5,1));_gd .NoError (t ,_fdbda .SetPixel (2,5,1));_gd .NoError (t ,_fdbda .SetPixel (3,5,1));_gd .NoError (t ,_fdbda .SetPixel (4,5,1));_gd .NoError (t ,_fdbda .SetPixel (5,5,1));
|
|
return _fdbda ;};func (_gbcb Points )GetIntX (i int )(int ,error ){if i >=len (_gbcb ){return 0,_a .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 (_gbcb [i ].X ),nil ;};func (_dfaa *Selection )findMaxTranslations ()(_adcfb ,_bgbe ,_eeb ,_bcbba int ){for _bebc :=0;_bebc < _dfaa .Height ;_bebc ++{for _baa :=0;_baa < _dfaa .Width ;_baa ++{if _dfaa .Data [_bebc ][_baa ]==SelHit {_adcfb =_dfaf (_adcfb ,_dfaa .Cx -_baa );
|
|
_bgbe =_dfaf (_bgbe ,_dfaa .Cy -_bebc );_eeb =_dfaf (_eeb ,_baa -_dfaa .Cx );_bcbba =_dfaf (_bcbba ,_bebc -_dfaa .Cy );};};};return _adcfb ,_bgbe ,_eeb ,_bcbba ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_bb .Rectangle ;};func _cd ()(_aee [256]uint32 ){for _adc :=0;
|
|
_adc < 256;_adc ++{if _adc &0x01!=0{_aee [_adc ]|=0xf;};if _adc &0x02!=0{_aee [_adc ]|=0xf0;};if _adc &0x04!=0{_aee [_adc ]|=0xf00;};if _adc &0x08!=0{_aee [_adc ]|=0xf000;};if _adc &0x10!=0{_aee [_adc ]|=0xf0000;};if _adc &0x20!=0{_aee [_adc ]|=0xf00000;
|
|
};if _adc &0x40!=0{_aee [_adc ]|=0xf000000;};if _adc &0x80!=0{_aee [_adc ]|=0xf0000000;};};return _aee ;};func (_afe *Bitmap )And (s *Bitmap )(_aceae *Bitmap ,_gaf error ){const _becg ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _afe ==nil {return nil ,_a .Error (_becg ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");
|
|
};if s ==nil {return nil ,_a .Error (_becg ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_afe .SizesEqual (s ){_dc .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",_becg );
|
|
};if _aceae ,_gaf =_gbc (_aceae ,_afe );_gaf !=nil {return nil ,_a .Wrap (_gaf ,_becg ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _gaf =_aceae .RasterOperation (0,0,_aceae .Width ,_aceae .Height ,PixSrcAndDst ,s ,0,0);
|
|
_gaf !=nil {return nil ,_a .Wrap (_gaf ,_becg ,"");};return _aceae ,nil ;};func _daea ()[]int {_caec :=make ([]int ,256);for _fgee :=0;_fgee <=0xff;_fgee ++{_ecgd :=byte (_fgee );_caec [_ecgd ]=int (_ecgd &0x1)+(int (_ecgd >>1)&0x1)+(int (_ecgd >>2)&0x1)+(int (_ecgd >>3)&0x1)+(int (_ecgd >>4)&0x1)+(int (_ecgd >>5)&0x1)+(int (_ecgd >>6)&0x1)+(int (_ecgd >>7)&0x1);
|
|
};return _caec ;};func (_ebg *Bitmap )GetVanillaData ()[]byte {if _ebg .Color ==Chocolate {_ebg .inverseData ();};return _ebg .Data ;};func _bbga (_agfa ,_eaac *Bitmap ,_fag int ,_fcec []byte ,_fcb int )(_gbf error ){const _ddb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";
|
|
var (_bbf ,_ed ,_aac ,_fbe ,_dcdb ,_cde ,_gcd ,_ffe int ;_fdac ,_cad ,_facd ,_gcc uint32 ;_adba ,_ccdb byte ;_afdb uint16 ;);_dceb :=make ([]byte ,4);_fca :=make ([]byte ,4);for _aac =0;_aac < _agfa .Height -1;_aac ,_fbe =_aac +2,_fbe +1{_bbf =_aac *_agfa .RowStride ;
|
|
_ed =_fbe *_eaac .RowStride ;for _dcdb ,_cde =0,0;_dcdb < _fcb ;_dcdb ,_cde =_dcdb +4,_cde +1{for _gcd =0;_gcd < 4;_gcd ++{_ffe =_bbf +_dcdb +_gcd ;if _ffe <=len (_agfa .Data )-1&&_ffe < _bbf +_agfa .RowStride {_dceb [_gcd ]=_agfa .Data [_ffe ];}else {_dceb [_gcd ]=0x00;
|
|
};_ffe =_bbf +_agfa .RowStride +_dcdb +_gcd ;if _ffe <=len (_agfa .Data )-1&&_ffe < _bbf +(2*_agfa .RowStride ){_fca [_gcd ]=_agfa .Data [_ffe ];}else {_fca [_gcd ]=0x00;};};_fdac =_ca .BigEndian .Uint32 (_dceb );_cad =_ca .BigEndian .Uint32 (_fca );_facd =_fdac &_cad ;
|
|
_facd |=_facd <<1;_gcc =_fdac |_cad ;_gcc &=_gcc <<1;_cad =_facd &_gcc ;_cad &=0xaaaaaaaa;_fdac =_cad |(_cad <<7);_adba =byte (_fdac >>24);_ccdb =byte ((_fdac >>8)&0xff);_ffe =_ed +_cde ;if _ffe +1==len (_eaac .Data )-1||_ffe +1>=_ed +_eaac .RowStride {if _gbf =_eaac .SetByte (_ffe ,_fcec [_adba ]);
|
|
_gbf !=nil {return _a .Wrapf (_gbf ,_ddb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_ffe );};}else {_afdb =(uint16 (_fcec [_adba ])<<8)|uint16 (_fcec [_ccdb ]);if _gbf =_eaac .setTwoBytes (_ffe ,_afdb );_gbf !=nil {return _a .Wrapf (_gbf ,_ddb ,"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",_ffe );
|
|
};_cde ++;};};};return nil ;};type SizeSelection int ;func TstWSymbol (t *_ac .T ,scale ...int )*Bitmap {_accfa ,_baac :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_gd .NoError (t ,_baac );return TstGetScaledSymbol (t ,_accfa ,scale ...);};func (_fefd Points )XSorter ()func (_bead ,_beggb int )bool {return func (_agab ,_ecfe int )bool {return _fefd [_agab ].X < _fefd [_ecfe ].X };
|
|
};func TstVSymbol (t *_ac .T ,scale ...int )*Bitmap {_bbdaf ,_fefff :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_gd .NoError (t ,_fefff );return TstGetScaledSymbol (t ,_bbdaf ,scale ...);};func Rect (x ,y ,w ,h int )(*_bb .Rectangle ,error ){const _ebb ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";
|
|
if x < 0{w +=x ;x =0;if w <=0{return nil ,_a .Errorf (_ebb ,"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 ,_a .Error (_ebb ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");
|
|
};};_fcaf :=_bb .Rect (x ,y ,x +w ,y +h );return &_fcaf ,nil ;};func init (){const _ceaf ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_gdcc =New (50,40);var _bcagb error ;_gdcc ,_bcagb =_gdcc .AddBorder (2,1);
|
|
if _bcagb !=nil {panic (_a .Wrap (_bcagb ,_ceaf ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_fbdf ,_bcagb =NewWithData (50,22,_daee );if _bcagb !=nil {panic (_a .Wrap (_bcagb ,_ceaf ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
|
|
};};const (Vanilla Color =iota ;Chocolate ;);func _cebc (_edfd *Bitmap ,_fgf int )(*Bitmap ,error ){const _affgd ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _edfd ==nil {return nil ,_a .Error (_affgd ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _fgf <=0{return nil ,_a .Error (_affgd ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _fgf ==1{_abfb ,_bacc :=_gbc (nil ,_edfd );if _bacc !=nil {return nil ,_a .Wrap (_bacc ,_affgd ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");
|
|
};return _abfb ,nil ;};_fcfe ,_efcd :=_dg (_edfd ,_fgf ,_fgf );if _efcd !=nil {return nil ,_a .Wrap (_efcd ,_affgd ,"");};return _fcfe ,nil ;};func (_agabe *Bitmaps )AddBitmap (bm *Bitmap ){_agabe .Values =append (_agabe .Values ,bm )};func (_afegg *Selection )setOrigin (_bgga ,_ebgg int ){_afegg .Cy ,_afegg .Cx =_bgga ,_ebgg };
|
|
func _effg (_agba *Bitmap ,_dcbf *_b .Stack ,_cadge ,_aafa int )(_dggb *_bb .Rectangle ,_gebdc error ){const _beec ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _agba ==nil {return nil ,_a .Error (_beec ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
|
|
};if _dcbf ==nil {return nil ,_a .Error (_beec ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_cfegb ,_cccg :=_agba .Width ,_agba .Height ;_aagcb :=_cfegb -1;_cdcf :=_cccg -1;if _cadge < 0||_cadge > _aagcb ||_aafa < 0||_aafa > _cdcf ||!_agba .GetPixel (_cadge ,_aafa ){return nil ,nil ;
|
|
};_adaaf :=_bb .Rect (100000,100000,0,0);if _gebdc =_dfbf (_dcbf ,_cadge ,_cadge ,_aafa ,1,_cdcf ,&_adaaf );_gebdc !=nil {return nil ,_a .Wrap (_gebdc ,_beec ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gebdc =_dfbf (_dcbf ,_cadge ,_cadge ,_aafa +1,-1,_cdcf ,&_adaaf );
|
|
_gebdc !=nil {return nil ,_a .Wrap (_gebdc ,_beec ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_adaaf .Min .X ,_adaaf .Max .X =_cadge ,_cadge ;_adaaf .Min .Y ,_adaaf .Max .Y =_aafa ,_aafa ;var (_ceebg *fillSegment ;
|
|
_eeadf int ;);for _dcbf .Len ()> 0{if _ceebg ,_gebdc =_eddcg (_dcbf );_gebdc !=nil {return nil ,_a .Wrap (_gebdc ,_beec ,"");};_aafa =_ceebg ._eeaa ;for _cadge =_ceebg ._daaee -1;_cadge >=0&&_agba .GetPixel (_cadge ,_aafa );_cadge --{if _gebdc =_agba .SetPixel (_cadge ,_aafa ,0);
|
|
_gebdc !=nil {return nil ,_a .Wrap (_gebdc ,_beec ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _cadge >=_ceebg ._daaee -1{for {for _cadge ++;_cadge <=_ceebg ._dgdcf +1&&_cadge <=_aagcb &&!_agba .GetPixel (_cadge ,_aafa );_cadge ++{};_eeadf =_cadge ;
|
|
if !(_cadge <=_ceebg ._dgdcf +1&&_cadge <=_aagcb ){break ;};for ;_cadge <=_aagcb &&_agba .GetPixel (_cadge ,_aafa );_cadge ++{if _gebdc =_agba .SetPixel (_cadge ,_aafa ,0);_gebdc !=nil {return nil ,_a .Wrap (_gebdc ,_beec ,"\u0032n\u0064\u0020\u0073\u0065\u0074");
|
|
};};if _gebdc =_dfbf (_dcbf ,_eeadf ,_cadge -1,_ceebg ._eeaa ,_ceebg ._abfc ,_cdcf ,&_adaaf );_gebdc !=nil {return nil ,_a .Wrap (_gebdc ,_beec ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cadge > _ceebg ._dgdcf {if _gebdc =_dfbf (_dcbf ,_ceebg ._dgdcf +1,_cadge -1,_ceebg ._eeaa ,-_ceebg ._abfc ,_cdcf ,&_adaaf );
|
|
_gebdc !=nil {return nil ,_a .Wrap (_gebdc ,_beec ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};};continue ;};_eeadf =_cadge +1;if _eeadf < _ceebg ._daaee {if _gebdc =_dfbf (_dcbf ,_eeadf ,_ceebg ._daaee -1,_ceebg ._eeaa ,-_ceebg ._abfc ,_cdcf ,&_adaaf );
|
|
_gebdc !=nil {return nil ,_a .Wrap (_gebdc ,_beec ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_cadge =_ceebg ._daaee ;for {for ;_cadge <=_aagcb &&_agba .GetPixel (_cadge ,_aafa );_cadge ++{if _gebdc =_agba .SetPixel (_cadge ,_aafa ,0);
|
|
_gebdc !=nil {return nil ,_a .Wrap (_gebdc ,_beec ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gebdc =_dfbf (_dcbf ,_eeadf ,_cadge -1,_ceebg ._eeaa ,_ceebg ._abfc ,_cdcf ,&_adaaf );_gebdc !=nil {return nil ,_a .Wrap (_gebdc ,_beec ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
|
|
};if _cadge > _ceebg ._dgdcf {if _gebdc =_dfbf (_dcbf ,_ceebg ._dgdcf +1,_cadge -1,_ceebg ._eeaa ,-_ceebg ._abfc ,_cdcf ,&_adaaf );_gebdc !=nil {return nil ,_a .Wrap (_gebdc ,_beec ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};for _cadge ++;_cadge <=_ceebg ._dgdcf +1&&_cadge <=_aagcb &&!_agba .GetPixel (_cadge ,_aafa );_cadge ++{};_eeadf =_cadge ;if !(_cadge <=_ceebg ._dgdcf +1&&_cadge <=_aagcb ){break ;};};};_adaaf .Max .X ++;_adaaf .Max .Y ++;return &_adaaf ,nil ;};func MakePixelCentroidTab8 ()[]int {return _dafg ()};
|
|
var _daee =[]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};
|
|
func (_dbca *Bitmap )Equals (s *Bitmap )bool {if len (_dbca .Data )!=len (s .Data )||_dbca .Width !=s .Width ||_dbca .Height !=s .Height {return false ;};for _dabf :=0;_dabf < _dbca .Height ;_dabf ++{_acc :=_dabf *_dbca .RowStride ;for _bgg :=0;_bgg < _dbca .RowStride ;
|
|
_bgg ++{if _dbca .Data [_acc +_bgg ]!=s .Data [_acc +_bgg ]{return false ;};};};return true ;};func (_fge *Bitmap )GetByte (index int )(byte ,error ){if index > len (_fge .Data )-1||index < 0{return 0,_a .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 _fge .Data [index ],nil ;};func _gdffa (_fcge ,_gdfea *Bitmap ,_bdeg ,_ccab int )(*Bitmap ,error ){const _aada ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _gdfea ==nil {return nil ,_a .Error (_aada ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
|
|
};if _bdeg < 1&&_ccab < 1{return nil ,_a .Error (_aada ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _bdeg ==1&&_ccab ==1{return _gdfea .Copy (),nil ;};if _bdeg ==1||_ccab ==1{var _edcg error ;
|
|
_cbaa :=SelCreateBrick (_ccab ,_bdeg ,_ccab /2,_bdeg /2,SelHit );_fcge ,_edcg =_bgaba (_fcge ,_gdfea ,_cbaa );if _edcg !=nil {return nil ,_a .Wrap (_edcg ,_aada ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _fcge ,nil ;};_fceg :=SelCreateBrick (1,_bdeg ,0,_bdeg /2,SelHit );_beggg :=SelCreateBrick (_ccab ,1,_ccab /2,0,SelHit );_cdgdd ,_ggafe :=_bcgc (nil ,_gdfea ,_fceg );if _ggafe !=nil {return nil ,_a .Wrap (_ggafe ,_aada ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};_fcge ,_ggafe =_bcgc (_fcge ,_cdgdd ,_beggg );if _ggafe !=nil {return nil ,_a .Wrap (_ggafe ,_aada ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_ggafe =_fdc (_cdgdd ,_fcge ,_fceg );if _ggafe !=nil {return nil ,_a .Wrap (_ggafe ,_aada ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};_ ,_ggafe =_fdc (_fcge ,_cdgdd ,_beggg );if _ggafe !=nil {return nil ,_a .Wrap (_ggafe ,_aada ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _fcge ,nil ;};func _ddca (_cfb uint ,_ccbg byte )byte {return _ccbg >>_cfb <<_cfb };
|
|
const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func (_bbfd *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _caceg ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";
|
|
if _bbfd ==nil {return nil ,_a .Error (_caceg ,"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 (_bbfd .Values )-1{return nil ,_a .Errorf (_caceg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return _bbfd .Values [i ],nil ;};type Point struct{X ,Y float32 ;};func (_dcbg CombinationOperator )String ()string {var _aceaf string ;switch _dcbg {case CmbOpOr :_aceaf ="\u004f\u0052";case CmbOpAnd :_aceaf ="\u0041\u004e\u0044";case CmbOpXor :_aceaf ="\u0058\u004f\u0052";
|
|
case CmbOpXNor :_aceaf ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_aceaf ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_aceaf ="\u004e\u004f\u0054";};return _aceaf ;};func (_ebcf *Boxes )Add (box *_bb .Rectangle )error {if _ebcf ==nil {return _a .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");
|
|
};*_ebcf =append (*_ebcf ,box );return nil ;};func _dfbf (_gdad *_b .Stack ,_acgb ,_feea ,_cdaa ,_bbda ,_bcfa int ,_gcbce *_bb .Rectangle )(_febd error ){const _caee ="\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 _gdad ==nil {return _a .Error (_caee ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _gcbce ==nil {return _a .Error (_caee ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
|
|
};_gcbce .Min .X =_b .Min (_gcbce .Min .X ,_acgb );_gcbce .Max .X =_b .Max (_gcbce .Max .X ,_feea );_gcbce .Min .Y =_b .Min (_gcbce .Min .Y ,_cdaa );_gcbce .Max .Y =_b .Max (_gcbce .Max .Y ,_cdaa );if !(_cdaa +_bbda >=0&&_cdaa +_bbda <=_bcfa ){return nil ;
|
|
};if _gdad .Aux ==nil {return _a .Error (_caee ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _fdfdf *fillSegment ;_dcea ,_acbc :=_gdad .Aux .Pop ();if _acbc {if _fdfdf ,_acbc =_dcea .(*fillSegment );
|
|
!_acbc {return _a .Error (_caee ,"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 {_fdfdf =&fillSegment {};
|
|
};_fdfdf ._daaee =_acgb ;_fdfdf ._dgdcf =_feea ;_fdfdf ._eeaa =_cdaa ;_fdfdf ._abfc =_bbda ;_gdad .Push (_fdfdf );return nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _bdbd ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
|
|
_aecfc ,_fddfd :=p1 .Width ,p1 .Height ;_gcabe ,_dgcd :=p3 .Width ,p3 .Height ;if _b .Abs (_aecfc -_gcabe )> maxDiffW {return false ,nil ;};if _b .Abs (_fddfd -_dgcd )> maxDiffH {return false ,nil ;};_abfa :=int (delX +_b .Sign (delX )*0.5);_adbce :=int (delY +_b .Sign (delY )*0.5);
|
|
var _dfcge error ;_caag :=p1 .CreateTemplate ();if _dfcge =_caag .RasterOperation (0,0,_aecfc ,_fddfd ,PixSrc ,p1 ,0,0);_dfcge !=nil {return false ,_a .Wrap (_dfcge ,_bdbd ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _dfcge =_caag .RasterOperation (_abfa ,_adbce ,_aecfc ,_fddfd ,PixNotSrcAndDst ,p4 ,0,0);
|
|
_dfcge !=nil {return false ,_a .Wrap (_dfcge ,_bdbd ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _caag .Zero (){return false ,nil ;};if _dfcge =_caag .RasterOperation (_abfa ,_adbce ,_gcabe ,_dgcd ,PixSrc ,p3 ,0,0);_dfcge !=nil {return false ,_a .Wrap (_dfcge ,_bdbd ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");
|
|
};if _dfcge =_caag .RasterOperation (0,0,_gcabe ,_dgcd ,PixNotSrcAndDst ,p2 ,0,0);_dfcge !=nil {return false ,_a .Wrap (_dfcge ,_bdbd ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _caag .Zero (),nil ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _aea ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";
|
|
_eded :=_dgbc (width ,height );_eded .Data =data ;if len (data )< height *_eded .RowStride {return nil ,_a .Errorf (_aea ,"\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 *_eded .RowStride );
|
|
};return _eded ,nil ;};func TstCSymbol (t *_ac .T )*Bitmap {t .Helper ();_facag :=New (6,6);_gd .NoError (t ,_facag .SetPixel (1,0,1));_gd .NoError (t ,_facag .SetPixel (2,0,1));_gd .NoError (t ,_facag .SetPixel (3,0,1));_gd .NoError (t ,_facag .SetPixel (4,0,1));
|
|
_gd .NoError (t ,_facag .SetPixel (0,1,1));_gd .NoError (t ,_facag .SetPixel (5,1,1));_gd .NoError (t ,_facag .SetPixel (0,2,1));_gd .NoError (t ,_facag .SetPixel (0,3,1));_gd .NoError (t ,_facag .SetPixel (0,4,1));_gd .NoError (t ,_facag .SetPixel (5,4,1));
|
|
_gd .NoError (t ,_facag .SetPixel (1,5,1));_gd .NoError (t ,_facag .SetPixel (2,5,1));_gd .NoError (t ,_facag .SetPixel (3,5,1));_gd .NoError (t ,_facag .SetPixel (4,5,1));return _facag ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _gbc (d ,s )};
|
|
func _fdc (_bdbf *Bitmap ,_dadb *Bitmap ,_gabe *Selection )(*Bitmap ,error ){var (_gdgg *Bitmap ;_fbc error ;);_bdbf ,_fbc =_edcdg (_bdbf ,_dadb ,_gabe ,&_gdgg );if _fbc !=nil {return nil ,_fbc ;};if _fbc =_bdbf .clearAll ();_fbc !=nil {return nil ,_fbc ;
|
|
};var _edga SelectionValue ;for _cggc :=0;_cggc < _gabe .Height ;_cggc ++{for _fbefe :=0;_fbefe < _gabe .Width ;_fbefe ++{_edga =_gabe .Data [_cggc ][_fbefe ];if _edga ==SelHit {if _fbc =_bdbf .RasterOperation (_fbefe -_gabe .Cx ,_cggc -_gabe .Cy ,_dadb .Width ,_dadb .Height ,PixSrcOrDst ,_gdgg ,0,0);
|
|
_fbc !=nil {return nil ,_fbc ;};};};};return _bdbf ,nil ;}; |