mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-02 22:17:06 +08:00
656 lines
196 KiB
Go
656 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 (_ae "encoding/binary";_c "github.com/stretchr/testify/require";_bc "github.com/unidoc/unipdf/v3/common";_ba "github.com/unidoc/unipdf/v3/internal/bitwise";_b "github.com/unidoc/unipdf/v3/internal/imageutil";_d "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
|
|
_f "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_ac "image";_a "math";_fbe "sort";_fb "strings";_ee "testing";);func _gedd (_aefg ,_afed *Bitmap ,_acecd ,_ebbf ,_babg uint ,_eaef ,_cggb int ,_edfa bool ,_edbd ,_edad int )error {for _ddca :=_eaef ;
|
|
_ddca < _cggb ;_ddca ++{if _edbd +1< len (_aefg .Data ){_bgcg :=_ddca +1==_cggb ;_fbeb ,_egfcb :=_aefg .GetByte (_edbd );if _egfcb !=nil {return _egfcb ;};_edbd ++;_fbeb <<=_acecd ;_ddab ,_egfcb :=_aefg .GetByte (_edbd );if _egfcb !=nil {return _egfcb ;
|
|
};_ddab >>=_ebbf ;_cce :=_fbeb |_ddab ;if _bgcg &&!_edfa {_cce =_aeae (_babg ,_cce );};_egfcb =_afed .SetByte (_edad ,_cce );if _egfcb !=nil {return _egfcb ;};_edad ++;if _bgcg &&_edfa {_bbe ,_bfeg :=_aefg .GetByte (_edbd );if _bfeg !=nil {return _bfeg ;
|
|
};_bbe <<=_acecd ;_cce =_aeae (_babg ,_bbe );if _bfeg =_afed .SetByte (_edad ,_cce );_bfeg !=nil {return _bfeg ;};};continue ;};_fgfe ,_gdf :=_aefg .GetByte (_edbd );if _gdf !=nil {_bc .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",_edbd ,_gdf );
|
|
return _gdf ;};_fgfe <<=_acecd ;_edbd ++;_gdf =_afed .SetByte (_edad ,_fgfe );if _gdf !=nil {return _gdf ;};_edad ++;};return nil ;};func (_acdc *Bitmap )setAll ()error {_gfg :=_afffd (_acdc ,0,0,_acdc .Width ,_acdc .Height ,PixSet ,nil ,0,0);if _gfg !=nil {return _f .Wrap (_gfg ,"\u0073\u0065\u0074\u0041\u006c\u006c","");
|
|
};return nil ;};func (_cffad *byWidth )Less (i ,j int )bool {return _cffad .Values [i ].Width < _cffad .Values [j ].Width };func (_agba *Bitmap )GetBitOffset (x int )int {return x &0x07};func _fdag (_bbbe ...MorphProcess )(_bbcde error ){const _eaffd ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";
|
|
var _dfcb ,_dfde int ;for _ebgb ,_bgdg :=range _bbbe {if _bbcde =_bgdg .verify (_ebgb ,&_dfcb ,&_dfde );_bbcde !=nil {return _f .Wrap (_bbcde ,_eaffd ,"");};};if _dfde !=0&&_dfcb !=0{return _f .Error (_eaffd ,"\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 NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _ccfe ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_aee :=_bbg (width ,height );_aee .Data =data ;if len (data )< height *_aee .RowStride {return nil ,_f .Errorf (_ccfe ,"\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 *_aee .RowStride );
|
|
};return _aee ,nil ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _eebd ,_feb int ;_afge :=src .RowStride -1;if x < 0{_feb =-x ;x =0;}else if x +src .Width > dst .Width {_afge -=src .Width +x -dst .Width ;};if y < 0{_eebd =-y ;
|
|
y =0;_feb +=src .RowStride ;_afge +=src .RowStride ;}else if y +src .Height > dst .Height {_eebd =src .Height +y -dst .Height ;};var (_bgfb int ;_bfgc error ;);_adaga :=x &0x07;_gbgf :=8-_adaga ;_bedfc :=src .Width &0x07;_eab :=_gbgf -_bedfc ;_dgac :=_gbgf &0x07!=0;
|
|
_baee :=src .Width <=((_afge -_feb )<<3)+_gbgf ;_cfaf :=dst .GetByteIndex (x ,y );_fef :=_eebd +dst .Height ;if src .Height > _fef {_bgfb =_fef ;}else {_bgfb =src .Height ;};switch {case !_dgac :_bfgc =_gccb (src ,dst ,_eebd ,_bgfb ,_cfaf ,_feb ,_afge ,op );
|
|
case _baee :_bfgc =_bccb (src ,dst ,_eebd ,_bgfb ,_cfaf ,_feb ,_afge ,_eab ,_adaga ,_gbgf ,op );default:_bfgc =_deeb (src ,dst ,_eebd ,_bgfb ,_cfaf ,_feb ,_afge ,_eab ,_adaga ,_gbgf ,op ,_bedfc );};return _bfgc ;};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _acab (src ,sequence ...);
|
|
};func (_dfce *Bitmaps )AddBox (box *_ac .Rectangle ){_dfce .Boxes =append (_dfce .Boxes ,box )};func (_eff *Boxes )selectWithIndicator (_cfdd *_d .NumSlice )(_fcbg *Boxes ,_ddbc error ){const _gag ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _eff ==nil {return nil ,_f .Error (_gag ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _cfdd ==nil {return nil ,_f .Error (_gag ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if len (*_cfdd )!=len (*_eff ){return nil ,_f .Error (_gag ,"\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 _adfa ,_bfdf int ;for _bcde :=0;_bcde < len (*_cfdd );_bcde ++{if _adfa ,_ddbc =_cfdd .GetInt (_bcde );_ddbc !=nil {return nil ,_f .Wrap (_ddbc ,_gag ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _adfa ==1{_bfdf ++;
|
|
};};if _bfdf ==len (*_eff ){return _eff ,nil ;};_gagd :=Boxes {};for _daae :=0;_daae < len (*_cfdd );_daae ++{_adfa =int ((*_cfdd )[_daae ]);if _adfa ==0{continue ;};_gagd =append (_gagd ,(*_eff )[_daae ]);};_fcbg =&_gagd ;return _fcbg ,nil ;};func (_egba Points )GetGeometry (i int )(_fdfd ,_deab float32 ,_fcfdd error ){if i > len (_egba )-1{return 0,0,_f .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 );
|
|
};_agfba :=_egba [i ];return _agfba .X ,_agfba .Y ,nil ;};func _dcbf (_egee *Bitmap ,_baegb *_d .Stack ,_cceb ,_gbdfc ,_ddedg int )(_gegdaf *_ac .Rectangle ,_gafg error ){const _edfg ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
|
|
if _egee ==nil {return nil ,_f .Error (_edfg ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _baegb ==nil {return nil ,_f .Error (_edfg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
|
|
};switch _ddedg {case 4:if _gegdaf ,_gafg =_gbag (_egee ,_baegb ,_cceb ,_gbdfc );_gafg !=nil {return nil ,_f .Wrap (_gafg ,_edfg ,"");};return _gegdaf ,nil ;case 8:if _gegdaf ,_gafg =_bbef (_egee ,_baegb ,_cceb ,_gbdfc );_gafg !=nil {return nil ,_f .Wrap (_gafg ,_edfg ,"");
|
|
};return _gegdaf ,nil ;default:return nil ,_f .Errorf (_edfg ,"\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",_ddedg );
|
|
};};func (_aba *Bitmap )equivalent (_gede *Bitmap )bool {if _aba ==_gede {return true ;};if !_aba .SizesEqual (_gede ){return false ;};_cegf :=_cgda (_aba ,_gede ,CmbOpXor );_eaa :=_aba .countPixels ();_ggcb :=int (0.25*float32 (_eaa ));if _cegf .thresholdPixelSum (_ggcb ){return false ;
|
|
};var (_gaf [9][9]int ;_cab [18][9]int ;_ccaa [9][18]int ;_dba int ;_fggd int ;);_ggb :=9;_eedc :=_aba .Height /_ggb ;_cffd :=_aba .Width /_ggb ;_bcgc ,_egc :=_eedc /2,_cffd /2;if _eedc < _cffd {_bcgc =_cffd /2;_egc =_eedc /2;};_egb :=float64 (_bcgc )*float64 (_egc )*_a .Pi ;
|
|
_cfd :=int (float64 (_eedc *_cffd /2)*0.9);_bba :=int (float64 (_cffd *_eedc /2)*0.9);for _cbbg :=0;_cbbg < _ggb ;_cbbg ++{_bcff :=_cffd *_cbbg +_dba ;var _faca int ;if _cbbg ==_ggb -1{_dba =0;_faca =_aba .Width ;}else {_faca =_bcff +_cffd ;if ((_aba .Width -_dba )%_ggb )> 0{_dba ++;
|
|
_faca ++;};};for _cgbc :=0;_cgbc < _ggb ;_cgbc ++{_bcgf :=_eedc *_cgbc +_fggd ;var _ccaaf int ;if _cgbc ==_ggb -1{_fggd =0;_ccaaf =_aba .Height ;}else {_ccaaf =_bcgf +_eedc ;if (_aba .Height -_fggd )%_ggb > 0{_fggd ++;_ccaaf ++;};};var _bgdc ,_efga ,_dbdf ,_acb int ;
|
|
_fgf :=(_bcff +_faca )/2;_cga :=(_bcgf +_ccaaf )/2;for _fdf :=_bcff ;_fdf < _faca ;_fdf ++{for _cdgc :=_bcgf ;_cdgc < _ccaaf ;_cdgc ++{if _cegf .GetPixel (_fdf ,_cdgc ){if _fdf < _fgf {_bgdc ++;}else {_efga ++;};if _cdgc < _cga {_acb ++;}else {_dbdf ++;
|
|
};};};};_gaf [_cbbg ][_cgbc ]=_bgdc +_efga ;_cab [_cbbg *2][_cgbc ]=_bgdc ;_cab [_cbbg *2+1][_cgbc ]=_efga ;_ccaa [_cbbg ][_cgbc *2]=_acb ;_ccaa [_cbbg ][_cgbc *2+1]=_dbdf ;};};for _dgfb :=0;_dgfb < _ggb *2-1;_dgfb ++{for _agfb :=0;_agfb < (_ggb -1);_agfb ++{var _efce int ;
|
|
for _cbae :=0;_cbae < 2;_cbae ++{for _ddge :=0;_ddge < 2;_ddge ++{_efce +=_cab [_dgfb +_cbae ][_agfb +_ddge ];};};if _efce > _bba {return false ;};};};for _adaa :=0;_adaa < (_ggb -1);_adaa ++{for _dce :=0;_dce < ((_ggb *2)-1);_dce ++{var _ecc int ;for _ggd :=0;
|
|
_ggd < 2;_ggd ++{for _dafg :=0;_dafg < 2;_dafg ++{_ecc +=_ccaa [_adaa +_ggd ][_dce +_dafg ];};};if _ecc > _cfd {return false ;};};};for _abfd :=0;_abfd < (_ggb -2);_abfd ++{for _dfc :=0;_dfc < (_ggb -2);_dfc ++{var _daff ,_aga int ;for _baea :=0;_baea < 3;
|
|
_baea ++{for _cfga :=0;_cfga < 3;_cfga ++{if _baea ==_cfga {_daff +=_gaf [_abfd +_baea ][_dfc +_cfga ];};if (2-_baea )==_cfga {_aga +=_gaf [_abfd +_baea ][_dfc +_cfga ];};};};if _daff > _bba ||_aga > _bba {return false ;};};};for _fabd :=0;_fabd < (_ggb -1);
|
|
_fabd ++{for _fabg :=0;_fabg < (_ggb -1);_fabg ++{var _dga int ;for _bdb :=0;_bdb < 2;_bdb ++{for _efcf :=0;_efcf < 2;_efcf ++{_dga +=_gaf [_fabd +_bdb ][_fabg +_efcf ];};};if float64 (_dga )> _egb {return false ;};};};return true ;};func _gbag (_begb *Bitmap ,_cdcda *_d .Stack ,_ebca ,_aege int )(_fgag *_ac .Rectangle ,_bffea error ){const _egdc ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
|
|
if _begb ==nil {return nil ,_f .Error (_egdc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _cdcda ==nil {return nil ,_f .Error (_egdc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
|
|
};_aeaea ,_eafbb :=_begb .Width ,_begb .Height ;_fegcd :=_aeaea -1;_gdeb :=_eafbb -1;if _ebca < 0||_ebca > _fegcd ||_aege < 0||_aege > _gdeb ||!_begb .GetPixel (_ebca ,_aege ){return nil ,nil ;};var _bdfab *_ac .Rectangle ;_bdfab ,_bffea =Rect (100000,100000,0,0);
|
|
if _bffea !=nil {return nil ,_f .Wrap (_bffea ,_egdc ,"");};if _bffea =_aefbe (_cdcda ,_ebca ,_ebca ,_aege ,1,_gdeb ,_bdfab );_bffea !=nil {return nil ,_f .Wrap (_bffea ,_egdc ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bffea =_aefbe (_cdcda ,_ebca ,_ebca ,_aege +1,-1,_gdeb ,_bdfab );
|
|
_bffea !=nil {return nil ,_f .Wrap (_bffea ,_egdc ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_bdfab .Min .X ,_bdfab .Max .X =_ebca ,_ebca ;_bdfab .Min .Y ,_bdfab .Max .Y =_aege ,_aege ;var (_cbcbd *fillSegment ;
|
|
_eag int ;);for _cdcda .Len ()> 0{if _cbcbd ,_bffea =_ggae (_cdcda );_bffea !=nil {return nil ,_f .Wrap (_bffea ,_egdc ,"");};_aege =_cbcbd ._fefg ;for _ebca =_cbcbd ._cegff ;_ebca >=0&&_begb .GetPixel (_ebca ,_aege );_ebca --{if _bffea =_begb .SetPixel (_ebca ,_aege ,0);
|
|
_bffea !=nil {return nil ,_f .Wrap (_bffea ,_egdc ,"");};};if _ebca >=_cbcbd ._cegff {for _ebca ++;_ebca <=_cbcbd ._cdcac &&_ebca <=_fegcd &&!_begb .GetPixel (_ebca ,_aege );_ebca ++{};_eag =_ebca ;if !(_ebca <=_cbcbd ._cdcac &&_ebca <=_fegcd ){continue ;
|
|
};}else {_eag =_ebca +1;if _eag < _cbcbd ._cegff -1{if _bffea =_aefbe (_cdcda ,_eag ,_cbcbd ._cegff -1,_cbcbd ._fefg ,-_cbcbd ._adca ,_gdeb ,_bdfab );_bffea !=nil {return nil ,_f .Wrap (_bffea ,_egdc ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
|
|
};};_ebca =_cbcbd ._cegff +1;};for {for ;_ebca <=_fegcd &&_begb .GetPixel (_ebca ,_aege );_ebca ++{if _bffea =_begb .SetPixel (_ebca ,_aege ,0);_bffea !=nil {return nil ,_f .Wrap (_bffea ,_egdc ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bffea =_aefbe (_cdcda ,_eag ,_ebca -1,_cbcbd ._fefg ,_cbcbd ._adca ,_gdeb ,_bdfab );
|
|
_bffea !=nil {return nil ,_f .Wrap (_bffea ,_egdc ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ebca > _cbcbd ._cdcac +1{if _bffea =_aefbe (_cdcda ,_cbcbd ._cdcac +1,_ebca -1,_cbcbd ._fefg ,-_cbcbd ._adca ,_gdeb ,_bdfab );_bffea !=nil {return nil ,_f .Wrap (_bffea ,_egdc ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};for _ebca ++;_ebca <=_cbcbd ._cdcac &&_ebca <=_fegcd &&!_begb .GetPixel (_ebca ,_aege );_ebca ++{};_eag =_ebca ;if !(_ebca <=_cbcbd ._cdcac &&_ebca <=_fegcd ){break ;};};};_bdfab .Max .X ++;_bdfab .Max .Y ++;return _bdfab ,nil ;};func (_eef *Bitmap )SetPixel (x ,y int ,pixel byte )error {_bdca :=_eef .GetByteIndex (x ,y );
|
|
if _bdca > len (_eef .Data )-1{return _f .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",_bdca );};_bfg :=_eef .GetBitOffset (x );
|
|
_eggd :=uint (7-_bfg );_fed :=_eef .Data [_bdca ];var _gea byte ;if pixel ==1{_gea =_fed |(pixel &0x01<<_eggd );}else {_gea =_fed &^(1<<_eggd );};_eef .Data [_bdca ]=_gea ;return nil ;};func (_aceb *Bitmaps )HeightSorter ()func (_beca ,_bgeag int )bool {return func (_fgfbfd ,_gfcg int )bool {_fagfa :=_aceb .Values [_fgfbfd ].Height < _aceb .Values [_gfcg ].Height ;
|
|
_bc .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_aceb .Values [_fgfbfd ].Height ,_aceb .Values [_gfcg ].Height ,_fagfa );return _fagfa ;};};func (_dbad *BitmapsArray )AddBox (box *_ac .Rectangle ){_dbad .Boxes =append (_dbad .Boxes ,box )};
|
|
func init (){for _ced :=0;_ced < 256;_ced ++{_fggb [_ced ]=uint8 (_ced &0x1)+(uint8 (_ced >>1)&0x1)+(uint8 (_ced >>2)&0x1)+(uint8 (_ced >>3)&0x1)+(uint8 (_ced >>4)&0x1)+(uint8 (_ced >>5)&0x1)+(uint8 (_ced >>6)&0x1)+(uint8 (_ced >>7)&0x1);};};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _dcc (d ,s )};
|
|
func (_ebfcc *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _ebfa ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _ebfcc ==nil {return nil ,_f .Error (_ebfa ,"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 (_ebfcc .Values )-1{return nil ,_f .Errorf (_ebfa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ebfcc .Values [i ],nil ;};func (_afea *BitmapsArray )GetBox (i int )(*_ac .Rectangle ,error ){const _ebcg ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";
|
|
if _afea ==nil {return nil ,_f .Error (_ebcg ,"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 (_afea .Boxes )-1{return nil ,_f .Errorf (_ebcg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return _afea .Boxes [i ],nil ;};func (_baff *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _fgde ="\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 >=_baff .IntSlice .Size (){return 0,_f .Errorf (_fgde ,"\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 (_baff .YAtIndex (i )),nil ;};type Getter interface{GetBitmap ()*Bitmap ;};func _bd (_bdc *Bitmap ,_bb int )(*Bitmap ,error ){const _ccge ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _bdc ==nil {return nil ,_f .Error (_ccge ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _bb ==1{return _dcc (nil ,_bdc );};if _bb !=2&&_bb !=4&&_bb !=8{return nil ,_f .Error (_ccge ,"\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");
|
|
};_age :=_bb *_bdc .Width ;_agd :=_bb *_bdc .Height ;_fda :=New (_age ,_agd );var _cfe error ;switch _bb {case 2:_cfe =_cc (_fda ,_bdc );case 4:_cfe =_ef (_fda ,_bdc );case 8:_cfe =_eee (_fda ,_bdc );};if _cfe !=nil {return nil ,_f .Wrap (_cfe ,_ccge ,"");
|
|
};return _fda ,nil ;};func (_fdcf Points )GetIntX (i int )(int ,error ){if i >=len (_fdcf ){return 0,_f .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 (_fdcf [i ].X ),nil ;};func (_fdea *ClassedPoints )xSortFunction ()func (_cbfdc int ,_baac int )bool {return func (_cdag ,_ffgf int )bool {return _fdea .XAtIndex (_cdag )< _fdea .XAtIndex (_ffgf )};};func (_ffd *Bitmap )InverseData (){_ffd .inverseData ()};
|
|
func _eeaba (_fgfbf ,_ebbe *Bitmap ,_cbaf *Selection )(*Bitmap ,error ){const _degf ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _cae error ;if _fgfbf ,_cae =_gfea (_fgfbf ,_ebbe ,_cbaf );_cae !=nil {return nil ,_cae ;};_ebga ,_cae :=_gcgb (nil ,_ebbe ,_cbaf );
|
|
if _cae !=nil {return nil ,_f .Wrap (_cae ,_degf ,"");};if _ ,_cae =_ffded (_fgfbf ,_ebga ,_cbaf );_cae !=nil {return nil ,_f .Wrap (_cae ,_degf ,"");};return _fgfbf ,nil ;};type LocationFilter int ;func (_dead *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_bcfbc *Boxes ,_daac error ){const _aafca ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
|
|
if _dead ==nil {return nil ,_f .Error (_aafca ,"\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 ,_f .Error (_aafca ,"\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 _bcfbc ,_daac =_dead .connComponentsBB (connectivity );_daac !=nil {return nil ,_f .Wrap (_daac ,_aafca ,"");};}else {if _bcfbc ,_daac =_dead .connComponentsBitmapsBB (bms ,connectivity );_daac !=nil {return nil ,_f .Wrap (_daac ,_aafca ,"");
|
|
};};return _bcfbc ,nil ;};func (_dfga *Bitmap )CountPixels ()int {return _dfga .countPixels ()};func _ebec (_gcfe ,_ggad byte ,_fcdc CombinationOperator )byte {switch _fcdc {case CmbOpOr :return _ggad |_gcfe ;case CmbOpAnd :return _ggad &_gcfe ;case CmbOpXor :return _ggad ^_gcfe ;
|
|
case CmbOpXNor :return ^(_ggad ^_gcfe );case CmbOpNot :return ^(_ggad );default:return _ggad ;};};func (_agfeb *Bitmaps )CountPixels ()*_d .NumSlice {_cbec :=&_d .NumSlice {};for _ ,_bbae :=range _agfeb .Values {_cbec .AddInt (_bbae .CountPixels ());};
|
|
return _cbec ;};func MakePixelSumTab8 ()[]int {return _cega ()};func _cfed (_afe *Bitmap ,_gcc ...int )(_ageb *Bitmap ,_ggg error ){const _gcd ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
|
|
if _afe ==nil {return nil ,_f .Error (_gcd ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_gcc )==0||len (_gcc )> 4{return nil ,_f .Error (_gcd ,"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 _gcc [0]<=0{_bc .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");_ageb ,_ggg =_dcc (nil ,_afe );if _ggg !=nil {return nil ,_f .Wrap (_ggg ,_gcd ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
|
|
};return _ageb ,nil ;};_dgcg :=_dfad ();_ageb =_afe ;for _feg ,_aca :=range _gcc {if _aca <=0{break ;};_ageb ,_ggg =_beg (_ageb ,_aca ,_dgcg );if _ggg !=nil {return nil ,_f .Wrapf (_ggg ,_gcd ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_feg );
|
|
};};return _ageb ,nil ;};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func _cega ()[]int {_dced :=make ([]int ,256);for _bec :=0;_bec <=0xff;_bec ++{_bcge :=byte (_bec );
|
|
_dced [_bcge ]=int (_bcge &0x1)+(int (_bcge >>1)&0x1)+(int (_bcge >>2)&0x1)+(int (_bcge >>3)&0x1)+(int (_bcge >>4)&0x1)+(int (_bcge >>5)&0x1)+(int (_bcge >>6)&0x1)+(int (_bcge >>7)&0x1);};return _dced ;};func (_ade *Bitmap )ToImage ()_ac .Image {_egfe ,_cedb :=_b .NewImage (_ade .Width ,_ade .Height ,1,1,_ade .Data ,nil ,nil );
|
|
if _cedb !=nil {_bc .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",_cedb );
|
|
};return _egfe ;};func (_agfd *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _aceg ="\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 >=_agfd .IntSlice .Size (){return 0,_f .Errorf (_aceg ,"\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 (_agfd .XAtIndex (i )),nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _afbe ="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 ,_f .Error (_afbe ,"\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 ,_f .Error (_afbe ,"\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 ,_f .Error (_afbe ,"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 ,_f .Error (_afbe ,"\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 ,_f .Error (_afbe ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
|
|
};_dbbf ,_egdg :=bm1 .Width ,bm1 .Height ;_cdce ,_febb :=bm2 .Width ,bm2 .Height ;if _d .Abs (_dbbf -_cdce )> maxDiffW {return false ,nil ;};if _d .Abs (_egdg -_febb )> maxDiffH {return false ,nil ;};_cced :=int (delX +_d .Sign (delX )*0.5);_gabc :=int (delY +_d .Sign (delY )*0.5);
|
|
_gacb :=int (_a .Ceil (_a .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_fad :=bm2 .RowStride ;_ecfg :=_egaa (_gabc ,0);_aadd :=_gfc (_febb +_gabc ,_egdg );_ddbgd :=bm1 .RowStride *_ecfg ;_aaef :=bm2 .RowStride *(_ecfg -_gabc );
|
|
var _dfbcg int ;if _aadd <=_egdg {_dfbcg =downcount [_aadd -1];};_gfgc :=_egaa (_cced ,0);_fdfa :=_gfc (_cdce +_cced ,_dbbf );var _bggb ,_aagg int ;if _cced >=8{_bggb =_cced >>3;_ddbgd +=_bggb ;_gfgc -=_bggb <<3;_fdfa -=_bggb <<3;_cced &=7;}else if _cced <=-8{_aagg =-((_cced +7)>>3);
|
|
_aaef +=_aagg ;_fad -=_aagg ;_cced +=_aagg <<3;};var (_dbe ,_fgfb ,_fbgf int ;_efdc ,_acdb ,_abde byte ;);if _gfgc >=_fdfa ||_ecfg >=_aadd {return false ,nil ;};_eeea :=(_fdfa +7)>>3;switch {case _cced ==0:for _fgfb =_ecfg ;_fgfb < _aadd ;_fgfb ,_ddbgd ,_aaef =_fgfb +1,_ddbgd +bm1 .RowStride ,_aaef +bm2 .RowStride {for _fbgf =0;
|
|
_fbgf < _eeea ;_fbgf ++{_efdc =bm1 .Data [_ddbgd +_fbgf ]&bm2 .Data [_aaef +_fbgf ];_dbe +=tab [_efdc ];};if _dbe >=_gacb {return true ,nil ;};if _dgcfd :=_dbe +downcount [_fgfb ]-_dfbcg ;_dgcfd < _gacb {return false ,nil ;};};case _cced > 0&&_fad < _eeea :for _fgfb =_ecfg ;
|
|
_fgfb < _aadd ;_fgfb ,_ddbgd ,_aaef =_fgfb +1,_ddbgd +bm1 .RowStride ,_aaef +bm2 .RowStride {_acdb =bm1 .Data [_ddbgd ];_abde =bm2 .Data [_aaef ]>>uint (_cced );_efdc =_acdb &_abde ;_dbe +=tab [_efdc ];for _fbgf =1;_fbgf < _fad ;_fbgf ++{_acdb =bm1 .Data [_ddbgd +_fbgf ];
|
|
_abde =bm2 .Data [_aaef +_fbgf ]>>uint (_cced )|bm2 .Data [_aaef +_fbgf -1]<<uint (8-_cced );_efdc =_acdb &_abde ;_dbe +=tab [_efdc ];};_acdb =bm1 .Data [_ddbgd +_fbgf ];_abde =bm2 .Data [_aaef +_fbgf -1]<<uint (8-_cced );_efdc =_acdb &_abde ;_dbe +=tab [_efdc ];
|
|
if _dbe >=_gacb {return true ,nil ;}else if _dbe +downcount [_fgfb ]-_dfbcg < _gacb {return false ,nil ;};};case _cced > 0&&_fad >=_eeea :for _fgfb =_ecfg ;_fgfb < _aadd ;_fgfb ,_ddbgd ,_aaef =_fgfb +1,_ddbgd +bm1 .RowStride ,_aaef +bm2 .RowStride {_acdb =bm1 .Data [_ddbgd ];
|
|
_abde =bm2 .Data [_aaef ]>>uint (_cced );_efdc =_acdb &_abde ;_dbe +=tab [_efdc ];for _fbgf =1;_fbgf < _eeea ;_fbgf ++{_acdb =bm1 .Data [_ddbgd +_fbgf ];_abde =bm2 .Data [_aaef +_fbgf ]>>uint (_cced );_abde |=bm2 .Data [_aaef +_fbgf -1]<<uint (8-_cced );
|
|
_efdc =_acdb &_abde ;_dbe +=tab [_efdc ];};if _dbe >=_gacb {return true ,nil ;}else if _dbe +downcount [_fgfb ]-_dfbcg < _gacb {return false ,nil ;};};case _eeea < _fad :for _fgfb =_ecfg ;_fgfb < _aadd ;_fgfb ,_ddbgd ,_aaef =_fgfb +1,_ddbgd +bm1 .RowStride ,_aaef +bm2 .RowStride {for _fbgf =0;
|
|
_fbgf < _eeea ;_fbgf ++{_acdb =bm1 .Data [_ddbgd +_fbgf ];_abde =bm2 .Data [_aaef +_fbgf ]<<uint (-_cced );_abde |=bm2 .Data [_aaef +_fbgf +1]>>uint (8+_cced );_efdc =_acdb &_abde ;_dbe +=tab [_efdc ];};if _dbe >=_gacb {return true ,nil ;}else if _ceda :=_dbe +downcount [_fgfb ]-_dfbcg ;
|
|
_ceda < _gacb {return false ,nil ;};};case _fad >=_eeea :for _fgfb =_ecfg ;_fgfb < _aadd ;_fgfb ,_ddbgd ,_aaef =_fgfb +1,_ddbgd +bm1 .RowStride ,_aaef +bm2 .RowStride {for _fbgf =0;_fbgf < _eeea ;_fbgf ++{_acdb =bm1 .Data [_ddbgd +_fbgf ];_abde =bm2 .Data [_aaef +_fbgf ]<<uint (-_cced );
|
|
_abde |=bm2 .Data [_aaef +_fbgf +1]>>uint (8+_cced );_efdc =_acdb &_abde ;_dbe +=tab [_efdc ];};_acdb =bm1 .Data [_ddbgd +_fbgf ];_abde =bm2 .Data [_aaef +_fbgf ]<<uint (-_cced );_efdc =_acdb &_abde ;_dbe +=tab [_efdc ];if _dbe >=_gacb {return true ,nil ;
|
|
}else if _dbe +downcount [_fgfb ]-_dfbcg < _gacb {return false ,nil ;};};};_dacdf :=float32 (_dbe )*float32 (_dbe )/(float32 (area1 )*float32 (area2 ));if _dacdf >=scoreThreshold {_bc .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",_dbe ,_gacb ,_dacdf ,scoreThreshold );
|
|
};return false ,nil ;};type Boxes []*_ac .Rectangle ;func _aeae (_dacd uint ,_dcaec byte )byte {return _dcaec >>_dacd <<_dacd };type CombinationOperator int ;func _be ()(_agg [256]uint64 ){for _bge :=0;_bge < 256;_bge ++{if _bge &0x01!=0{_agg [_bge ]|=0xff;
|
|
};if _bge &0x02!=0{_agg [_bge ]|=0xff00;};if _bge &0x04!=0{_agg [_bge ]|=0xff0000;};if _bge &0x08!=0{_agg [_bge ]|=0xff000000;};if _bge &0x10!=0{_agg [_bge ]|=0xff00000000;};if _bge &0x20!=0{_agg [_bge ]|=0xff0000000000;};if _bge &0x40!=0{_agg [_bge ]|=0xff000000000000;
|
|
};if _bge &0x80!=0{_agg [_bge ]|=0xff00000000000000;};};return _agg ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_dage :=_bdcd (h ,w ,"");_dage .setOrigin (cy ,cx );var _egab ,_dcfe int ;for _egab =0;_egab < h ;_egab ++{for _dcfe =0;
|
|
_dcfe < w ;_dcfe ++{_dage .Data [_egab ][_dcfe ]=tp ;};};return _dage ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func _fecc ()(_cbc [256]uint16 ){for _fab :=0;_fab < 256;_fab ++{if _fab &0x01!=0{_cbc [_fab ]|=0x3;};if _fab &0x02!=0{_cbc [_fab ]|=0xc;
|
|
};if _fab &0x04!=0{_cbc [_fab ]|=0x30;};if _fab &0x08!=0{_cbc [_fab ]|=0xc0;};if _fab &0x10!=0{_cbc [_fab ]|=0x300;};if _fab &0x20!=0{_cbc [_fab ]|=0xc00;};if _fab &0x40!=0{_cbc [_fab ]|=0x3000;};if _fab &0x80!=0{_cbc [_fab ]|=0xc000;};};return _cbc ;};
|
|
func ClipBoxToRectangle (box *_ac .Rectangle ,wi ,hi int )(_bgga *_ac .Rectangle ,_bfgg error ){const _bgeg ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_f .Error (_bgeg ,"\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 ,_f .Error (_bgeg ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_fcf :=*box ;
|
|
_bgga =&_fcf ;if _bgga .Min .X < 0{_bgga .Max .X +=_bgga .Min .X ;_bgga .Min .X =0;};if _bgga .Min .Y < 0{_bgga .Max .Y +=_bgga .Min .Y ;_bgga .Min .Y =0;};if _bgga .Max .X > wi {_bgga .Max .X =wi ;};if _bgga .Max .Y > hi {_bgga .Max .Y =hi ;};return _bgga ,nil ;
|
|
};func (_fbde *Boxes )Add (box *_ac .Rectangle )error {if _fbde ==nil {return _f .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");};*_fbde =append (*_fbde ,box );
|
|
return nil ;};func _bbef (_dfbe *Bitmap ,_adgae *_d .Stack ,_ffaee ,_gdecg int )(_dfbg *_ac .Rectangle ,_ccfee error ){const _cfgab ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _dfbe ==nil {return nil ,_f .Error (_cfgab ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
|
|
};if _adgae ==nil {return nil ,_f .Error (_cfgab ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_ffge ,_efaa :=_dfbe .Width ,_dfbe .Height ;_fggdcd :=_ffge -1;_eebc :=_efaa -1;if _ffaee < 0||_ffaee > _fggdcd ||_gdecg < 0||_gdecg > _eebc ||!_dfbe .GetPixel (_ffaee ,_gdecg ){return nil ,nil ;
|
|
};_aafb :=_ac .Rect (100000,100000,0,0);if _ccfee =_aefbe (_adgae ,_ffaee ,_ffaee ,_gdecg ,1,_eebc ,&_aafb );_ccfee !=nil {return nil ,_f .Wrap (_ccfee ,_cfgab ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ccfee =_aefbe (_adgae ,_ffaee ,_ffaee ,_gdecg +1,-1,_eebc ,&_aafb );
|
|
_ccfee !=nil {return nil ,_f .Wrap (_ccfee ,_cfgab ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_aafb .Min .X ,_aafb .Max .X =_ffaee ,_ffaee ;_aafb .Min .Y ,_aafb .Max .Y =_gdecg ,_gdecg ;var (_fbfb *fillSegment ;
|
|
_bgaa int ;);for _adgae .Len ()> 0{if _fbfb ,_ccfee =_ggae (_adgae );_ccfee !=nil {return nil ,_f .Wrap (_ccfee ,_cfgab ,"");};_gdecg =_fbfb ._fefg ;for _ffaee =_fbfb ._cegff -1;_ffaee >=0&&_dfbe .GetPixel (_ffaee ,_gdecg );_ffaee --{if _ccfee =_dfbe .SetPixel (_ffaee ,_gdecg ,0);
|
|
_ccfee !=nil {return nil ,_f .Wrap (_ccfee ,_cfgab ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _ffaee >=_fbfb ._cegff -1{for {for _ffaee ++;_ffaee <=_fbfb ._cdcac +1&&_ffaee <=_fggdcd &&!_dfbe .GetPixel (_ffaee ,_gdecg );_ffaee ++{};_bgaa =_ffaee ;
|
|
if !(_ffaee <=_fbfb ._cdcac +1&&_ffaee <=_fggdcd ){break ;};for ;_ffaee <=_fggdcd &&_dfbe .GetPixel (_ffaee ,_gdecg );_ffaee ++{if _ccfee =_dfbe .SetPixel (_ffaee ,_gdecg ,0);_ccfee !=nil {return nil ,_f .Wrap (_ccfee ,_cfgab ,"\u0032n\u0064\u0020\u0073\u0065\u0074");
|
|
};};if _ccfee =_aefbe (_adgae ,_bgaa ,_ffaee -1,_fbfb ._fefg ,_fbfb ._adca ,_eebc ,&_aafb );_ccfee !=nil {return nil ,_f .Wrap (_ccfee ,_cfgab ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ffaee > _fbfb ._cdcac {if _ccfee =_aefbe (_adgae ,_fbfb ._cdcac +1,_ffaee -1,_fbfb ._fefg ,-_fbfb ._adca ,_eebc ,&_aafb );
|
|
_ccfee !=nil {return nil ,_f .Wrap (_ccfee ,_cfgab ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};};continue ;};_bgaa =_ffaee +1;if _bgaa < _fbfb ._cegff {if _ccfee =_aefbe (_adgae ,_bgaa ,_fbfb ._cegff -1,_fbfb ._fefg ,-_fbfb ._adca ,_eebc ,&_aafb );
|
|
_ccfee !=nil {return nil ,_f .Wrap (_ccfee ,_cfgab ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_ffaee =_fbfb ._cegff ;for {for ;_ffaee <=_fggdcd &&_dfbe .GetPixel (_ffaee ,_gdecg );_ffaee ++{if _ccfee =_dfbe .SetPixel (_ffaee ,_gdecg ,0);
|
|
_ccfee !=nil {return nil ,_f .Wrap (_ccfee ,_cfgab ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _ccfee =_aefbe (_adgae ,_bgaa ,_ffaee -1,_fbfb ._fefg ,_fbfb ._adca ,_eebc ,&_aafb );_ccfee !=nil {return nil ,_f .Wrap (_ccfee ,_cfgab ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
|
|
};if _ffaee > _fbfb ._cdcac {if _ccfee =_aefbe (_adgae ,_fbfb ._cdcac +1,_ffaee -1,_fbfb ._fefg ,-_fbfb ._adca ,_eebc ,&_aafb );_ccfee !=nil {return nil ,_f .Wrap (_ccfee ,_cfgab ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};for _ffaee ++;_ffaee <=_fbfb ._cdcac +1&&_ffaee <=_fggdcd &&!_dfbe .GetPixel (_ffaee ,_gdecg );_ffaee ++{};_bgaa =_ffaee ;if !(_ffaee <=_fbfb ._cdcac +1&&_ffaee <=_fggdcd ){break ;};};};_aafb .Max .X ++;_aafb .Max .Y ++;return &_aafb ,nil ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_cebg bool ,_fgbg error ){const _fdbg ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
|
|
_dfgg ,_agfe :=p1 .Width ,p1 .Height ;_fecf ,_aeg :=p3 .Width ,p3 .Height ;if _d .Abs (_dfgg -_fecf )> maxDiffW {return false ,nil ;};if _d .Abs (_agfe -_aeg )> maxDiffH {return false ,nil ;};_ecg :=int (float32 (area1 )*(1.0-rank )+0.5);_efdee :=int (float32 (area3 )*(1.0-rank )+0.5);
|
|
var _beeb ,_ccec int ;if delX >=0{_beeb =int (delX +0.5);}else {_beeb =int (delX -0.5);};if delY >=0{_ccec =int (delY +0.5);}else {_ccec =int (delY -0.5);};_ecea :=p1 .CreateTemplate ();if _fgbg =_ecea .RasterOperation (0,0,_dfgg ,_agfe ,PixSrc ,p1 ,0,0);
|
|
_fgbg !=nil {return false ,_f .Wrap (_fgbg ,_fdbg ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _fgbg =_ecea .RasterOperation (_beeb ,_ccec ,_dfgg ,_agfe ,PixNotSrcAndDst ,p4 ,0,0);_fgbg !=nil {return false ,_f .Wrap (_fgbg ,_fdbg ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
|
|
};_cebg ,_fgbg =_ecea .ThresholdPixelSum (_ecg ,tab8 );if _fgbg !=nil {return false ,_f .Wrap (_fgbg ,_fdbg ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _cebg {return false ,nil ;};if _fgbg =_ecea .RasterOperation (_beeb ,_ccec ,_fecf ,_aeg ,PixSrc ,p3 ,0,0);
|
|
_fgbg !=nil {return false ,_f .Wrap (_fgbg ,_fdbg ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _fgbg =_ecea .RasterOperation (0,0,_fecf ,_aeg ,PixNotSrcAndDst ,p2 ,0,0);_fgbg !=nil {return false ,_f .Wrap (_fgbg ,_fdbg ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
|
|
};_cebg ,_fgbg =_ecea .ThresholdPixelSum (_efdee ,tab8 );if _fgbg !=nil {return false ,_f .Wrap (_fgbg ,_fdbg ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_cebg ,nil ;};func (_bgg *Bitmap )setEightFullBytes (_egdb int ,_cbf uint64 )error {if _egdb +7> len (_bgg .Data )-1{return _f .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");
|
|
};_bgg .Data [_egdb ]=byte ((_cbf &0xff00000000000000)>>56);_bgg .Data [_egdb +1]=byte ((_cbf &0xff000000000000)>>48);_bgg .Data [_egdb +2]=byte ((_cbf &0xff0000000000)>>40);_bgg .Data [_egdb +3]=byte ((_cbf &0xff00000000)>>32);_bgg .Data [_egdb +4]=byte ((_cbf &0xff000000)>>24);
|
|
_bgg .Data [_egdb +5]=byte ((_cbf &0xff0000)>>16);_bgg .Data [_egdb +6]=byte ((_cbf &0xff00)>>8);_bgg .Data [_egdb +7]=byte (_cbf &0xff);return nil ;};func (_cdd *Bitmap )Zero ()bool {_bfc :=_cdd .Width /8;_eaf :=_cdd .Width &7;var _agbee byte ;if _eaf !=0{_agbee =byte (0xff<<uint (8-_eaf ));
|
|
};var _gee ,_ega ,_dbc int ;for _ega =0;_ega < _cdd .Height ;_ega ++{_gee =_cdd .RowStride *_ega ;for _dbc =0;_dbc < _bfc ;_dbc ,_gee =_dbc +1,_gee +1{if _cdd .Data [_gee ]!=0{return false ;};};if _eaf > 0{if _cdd .Data [_gee ]&_agbee !=0{return false ;
|
|
};};};return true ;};func _gcgb (_agfcc *Bitmap ,_bdfb *Bitmap ,_dabg *Selection )(*Bitmap ,error ){var (_daffe *Bitmap ;_ddcf error ;);_agfcc ,_ddcf =_abggb (_agfcc ,_bdfb ,_dabg ,&_daffe );if _ddcf !=nil {return nil ,_ddcf ;};if _ddcf =_agfcc .clearAll ();
|
|
_ddcf !=nil {return nil ,_ddcf ;};var _gedb SelectionValue ;for _baed :=0;_baed < _dabg .Height ;_baed ++{for _ecga :=0;_ecga < _dabg .Width ;_ecga ++{_gedb =_dabg .Data [_baed ][_ecga ];if _gedb ==SelHit {if _ddcf =_agfcc .RasterOperation (_ecga -_dabg .Cx ,_baed -_dabg .Cy ,_bdfb .Width ,_bdfb .Height ,PixSrcOrDst ,_daffe ,0,0);
|
|
_ddcf !=nil {return nil ,_ddcf ;};};};};return _agfcc ,nil ;};func TstDSymbol (t *_ee .T ,scale ...int )*Bitmap {_cddcc ,_egffb :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_c .NoError (t ,_egffb );return TstGetScaledSymbol (t ,_cddcc ,scale ...);
|
|
};type Color int ;const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func _ffded (_gdbe ,_cbcb *Bitmap ,_ddfe *Selection )(*Bitmap ,error ){const _efddg ="\u0065\u0072\u006fd\u0065";
|
|
var (_ggbg error ;_cbef *Bitmap ;);_gdbe ,_ggbg =_abggb (_gdbe ,_cbcb ,_ddfe ,&_cbef );if _ggbg !=nil {return nil ,_f .Wrap (_ggbg ,_efddg ,"");};if _ggbg =_gdbe .setAll ();_ggbg !=nil {return nil ,_f .Wrap (_ggbg ,_efddg ,"");};var _cdbb SelectionValue ;
|
|
for _dafa :=0;_dafa < _ddfe .Height ;_dafa ++{for _ddeg :=0;_ddeg < _ddfe .Width ;_ddeg ++{_cdbb =_ddfe .Data [_dafa ][_ddeg ];if _cdbb ==SelHit {_ggbg =_afffd (_gdbe ,_ddfe .Cx -_ddeg ,_ddfe .Cy -_dafa ,_cbcb .Width ,_cbcb .Height ,PixSrcAndDst ,_cbef ,0,0);
|
|
if _ggbg !=nil {return nil ,_f .Wrap (_ggbg ,_efddg ,"");};};};};if MorphBC ==SymmetricMorphBC {return _gdbe ,nil ;};_edbdg ,_ccee ,_abfdb ,_bdbfa :=_ddfe .findMaxTranslations ();if _edbdg > 0{if _ggbg =_gdbe .RasterOperation (0,0,_edbdg ,_cbcb .Height ,PixClr ,nil ,0,0);
|
|
_ggbg !=nil {return nil ,_f .Wrap (_ggbg ,_efddg ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _abfdb > 0{if _ggbg =_gdbe .RasterOperation (_cbcb .Width -_abfdb ,0,_abfdb ,_cbcb .Height ,PixClr ,nil ,0,0);_ggbg !=nil {return nil ,_f .Wrap (_ggbg ,_efddg ,"\u0078\u006e\u0020\u003e\u0020\u0030");
|
|
};};if _ccee > 0{if _ggbg =_gdbe .RasterOperation (0,0,_cbcb .Width ,_ccee ,PixClr ,nil ,0,0);_ggbg !=nil {return nil ,_f .Wrap (_ggbg ,_efddg ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _bdbfa > 0{if _ggbg =_gdbe .RasterOperation (0,_cbcb .Height -_bdbfa ,_cbcb .Width ,_bdbfa ,PixClr ,nil ,0,0);
|
|
_ggbg !=nil {return nil ,_f .Wrap (_ggbg ,_efddg ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _gdbe ,nil ;};func (_cffed *Points )Add (pt *Points )error {const _gaee ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _cffed ==nil {return _f .Error (_gaee ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if pt ==nil {return _f .Error (_gaee ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_cffed =append (*_cffed ,*pt ...);return nil ;};var MorphBC BoundaryCondition ;
|
|
func (_ceee *byHeight )Less (i ,j int )bool {return _ceee .Values [i ].Height < _ceee .Values [j ].Height };func (_cddbe *Bitmaps )WidthSorter ()func (_aedf ,_fgaf int )bool {return func (_cgea ,_cgae int )bool {return _cddbe .Values [_cgea ].Width < _cddbe .Values [_cgae ].Width };
|
|
};func (_addbe *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _fbac ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_addbe .Values )==0{return nil ,_f .Error (_fbac ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
|
|
};_dfbfd :=&BitmapsArray {};_addbe .SortByHeight ();_bbee :=-1;_agcea :=-1;for _fcdg :=0;_fcdg < len (_addbe .Values );_fcdg ++{_cfgaad :=_addbe .Values [_fcdg ].Height ;if _cfgaad > _bbee {_bbee =_cfgaad ;_agcea ++;_dfbfd .Values =append (_dfbfd .Values ,&Bitmaps {});
|
|
};_dfbfd .Values [_agcea ].AddBitmap (_addbe .Values [_fcdg ]);};return _dfbfd ,nil ;};func _agdf (_dbce *Bitmap ,_agff ,_aacb ,_cedbg ,_gacag int ,_ccdd RasterOperator ,_egdd *Bitmap ,_aefb ,_daga int )error {var (_bbea bool ;_feae bool ;_fcag byte ;_caab int ;
|
|
_fffg int ;_fbda int ;_cggc int ;_fffb bool ;_eeaf int ;_gffe int ;_bgcdc int ;_egcd bool ;_bfcfc byte ;_adab int ;_cebb int ;_efff int ;_beaa byte ;_afcc int ;_gcdc int ;_eaea uint ;_gcgbd uint ;_bbbg byte ;_dadg shift ;_dbgf bool ;_gaga bool ;_eged ,_def int ;
|
|
);if _aefb &7!=0{_gcdc =8-(_aefb &7);};if _agff &7!=0{_fffg =8-(_agff &7);};if _gcdc ==0&&_fffg ==0{_bbbg =_dece [0];}else {if _fffg > _gcdc {_eaea =uint (_fffg -_gcdc );}else {_eaea =uint (8-(_gcdc -_fffg ));};_gcgbd =8-_eaea ;_bbbg =_dece [_eaea ];};
|
|
if (_agff &7)!=0{_bbea =true ;_caab =8-(_agff &7);_fcag =_dece [_caab ];_fbda =_dbce .RowStride *_aacb +(_agff >>3);_cggc =_egdd .RowStride *_daga +(_aefb >>3);_afcc =8-(_aefb &7);if _caab > _afcc {_dadg =_bbaf ;if _cedbg >=_gcdc {_dbgf =true ;};}else {_dadg =_gbee ;
|
|
};};if _cedbg < _caab {_feae =true ;_fcag &=_agcb [8-_caab +_cedbg ];};if !_feae {_eeaf =(_cedbg -_caab )>>3;if _eeaf !=0{_fffb =true ;_gffe =_dbce .RowStride *_aacb +((_agff +_fffg )>>3);_bgcdc =_egdd .RowStride *_daga +((_aefb +_fffg )>>3);};};_adab =(_agff +_cedbg )&7;
|
|
if !(_feae ||_adab ==0){_egcd =true ;_bfcfc =_agcb [_adab ];_cebb =_dbce .RowStride *_aacb +((_agff +_fffg )>>3)+_eeaf ;_efff =_egdd .RowStride *_daga +((_aefb +_fffg )>>3)+_eeaf ;if _adab > int (_gcgbd ){_gaga =true ;};};switch _ccdd {case PixSrc :if _bbea {for _eged =0;
|
|
_eged < _gacag ;_eged ++{if _dadg ==_bbaf {_beaa =_egdd .Data [_cggc ]<<_eaea ;if _dbgf {_beaa =_faba (_beaa ,_egdd .Data [_cggc +1]>>_gcgbd ,_bbbg );};}else {_beaa =_egdd .Data [_cggc ]>>_gcgbd ;};_dbce .Data [_fbda ]=_faba (_dbce .Data [_fbda ],_beaa ,_fcag );
|
|
_fbda +=_dbce .RowStride ;_cggc +=_egdd .RowStride ;};};if _fffb {for _eged =0;_eged < _gacag ;_eged ++{for _def =0;_def < _eeaf ;_def ++{_beaa =_faba (_egdd .Data [_bgcdc +_def ]<<_eaea ,_egdd .Data [_bgcdc +_def +1]>>_gcgbd ,_bbbg );_dbce .Data [_gffe +_def ]=_beaa ;
|
|
};_gffe +=_dbce .RowStride ;_bgcdc +=_egdd .RowStride ;};};if _egcd {for _eged =0;_eged < _gacag ;_eged ++{_beaa =_egdd .Data [_efff ]<<_eaea ;if _gaga {_beaa =_faba (_beaa ,_egdd .Data [_efff +1]>>_gcgbd ,_bbbg );};_dbce .Data [_cebb ]=_faba (_dbce .Data [_cebb ],_beaa ,_bfcfc );
|
|
_cebb +=_dbce .RowStride ;_efff +=_egdd .RowStride ;};};case PixNotSrc :if _bbea {for _eged =0;_eged < _gacag ;_eged ++{if _dadg ==_bbaf {_beaa =_egdd .Data [_cggc ]<<_eaea ;if _dbgf {_beaa =_faba (_beaa ,_egdd .Data [_cggc +1]>>_gcgbd ,_bbbg );};}else {_beaa =_egdd .Data [_cggc ]>>_gcgbd ;
|
|
};_dbce .Data [_fbda ]=_faba (_dbce .Data [_fbda ],^_beaa ,_fcag );_fbda +=_dbce .RowStride ;_cggc +=_egdd .RowStride ;};};if _fffb {for _eged =0;_eged < _gacag ;_eged ++{for _def =0;_def < _eeaf ;_def ++{_beaa =_faba (_egdd .Data [_bgcdc +_def ]<<_eaea ,_egdd .Data [_bgcdc +_def +1]>>_gcgbd ,_bbbg );
|
|
_dbce .Data [_gffe +_def ]=^_beaa ;};_gffe +=_dbce .RowStride ;_bgcdc +=_egdd .RowStride ;};};if _egcd {for _eged =0;_eged < _gacag ;_eged ++{_beaa =_egdd .Data [_efff ]<<_eaea ;if _gaga {_beaa =_faba (_beaa ,_egdd .Data [_efff +1]>>_gcgbd ,_bbbg );};_dbce .Data [_cebb ]=_faba (_dbce .Data [_cebb ],^_beaa ,_bfcfc );
|
|
_cebb +=_dbce .RowStride ;_efff +=_egdd .RowStride ;};};case PixSrcOrDst :if _bbea {for _eged =0;_eged < _gacag ;_eged ++{if _dadg ==_bbaf {_beaa =_egdd .Data [_cggc ]<<_eaea ;if _dbgf {_beaa =_faba (_beaa ,_egdd .Data [_cggc +1]>>_gcgbd ,_bbbg );};}else {_beaa =_egdd .Data [_cggc ]>>_gcgbd ;
|
|
};_dbce .Data [_fbda ]=_faba (_dbce .Data [_fbda ],_beaa |_dbce .Data [_fbda ],_fcag );_fbda +=_dbce .RowStride ;_cggc +=_egdd .RowStride ;};};if _fffb {for _eged =0;_eged < _gacag ;_eged ++{for _def =0;_def < _eeaf ;_def ++{_beaa =_faba (_egdd .Data [_bgcdc +_def ]<<_eaea ,_egdd .Data [_bgcdc +_def +1]>>_gcgbd ,_bbbg );
|
|
_dbce .Data [_gffe +_def ]|=_beaa ;};_gffe +=_dbce .RowStride ;_bgcdc +=_egdd .RowStride ;};};if _egcd {for _eged =0;_eged < _gacag ;_eged ++{_beaa =_egdd .Data [_efff ]<<_eaea ;if _gaga {_beaa =_faba (_beaa ,_egdd .Data [_efff +1]>>_gcgbd ,_bbbg );};_dbce .Data [_cebb ]=_faba (_dbce .Data [_cebb ],_beaa |_dbce .Data [_cebb ],_bfcfc );
|
|
_cebb +=_dbce .RowStride ;_efff +=_egdd .RowStride ;};};case PixSrcAndDst :if _bbea {for _eged =0;_eged < _gacag ;_eged ++{if _dadg ==_bbaf {_beaa =_egdd .Data [_cggc ]<<_eaea ;if _dbgf {_beaa =_faba (_beaa ,_egdd .Data [_cggc +1]>>_gcgbd ,_bbbg );};}else {_beaa =_egdd .Data [_cggc ]>>_gcgbd ;
|
|
};_dbce .Data [_fbda ]=_faba (_dbce .Data [_fbda ],_beaa &_dbce .Data [_fbda ],_fcag );_fbda +=_dbce .RowStride ;_cggc +=_egdd .RowStride ;};};if _fffb {for _eged =0;_eged < _gacag ;_eged ++{for _def =0;_def < _eeaf ;_def ++{_beaa =_faba (_egdd .Data [_bgcdc +_def ]<<_eaea ,_egdd .Data [_bgcdc +_def +1]>>_gcgbd ,_bbbg );
|
|
_dbce .Data [_gffe +_def ]&=_beaa ;};_gffe +=_dbce .RowStride ;_bgcdc +=_egdd .RowStride ;};};if _egcd {for _eged =0;_eged < _gacag ;_eged ++{_beaa =_egdd .Data [_efff ]<<_eaea ;if _gaga {_beaa =_faba (_beaa ,_egdd .Data [_efff +1]>>_gcgbd ,_bbbg );};_dbce .Data [_cebb ]=_faba (_dbce .Data [_cebb ],_beaa &_dbce .Data [_cebb ],_bfcfc );
|
|
_cebb +=_dbce .RowStride ;_efff +=_egdd .RowStride ;};};case PixSrcXorDst :if _bbea {for _eged =0;_eged < _gacag ;_eged ++{if _dadg ==_bbaf {_beaa =_egdd .Data [_cggc ]<<_eaea ;if _dbgf {_beaa =_faba (_beaa ,_egdd .Data [_cggc +1]>>_gcgbd ,_bbbg );};}else {_beaa =_egdd .Data [_cggc ]>>_gcgbd ;
|
|
};_dbce .Data [_fbda ]=_faba (_dbce .Data [_fbda ],_beaa ^_dbce .Data [_fbda ],_fcag );_fbda +=_dbce .RowStride ;_cggc +=_egdd .RowStride ;};};if _fffb {for _eged =0;_eged < _gacag ;_eged ++{for _def =0;_def < _eeaf ;_def ++{_beaa =_faba (_egdd .Data [_bgcdc +_def ]<<_eaea ,_egdd .Data [_bgcdc +_def +1]>>_gcgbd ,_bbbg );
|
|
_dbce .Data [_gffe +_def ]^=_beaa ;};_gffe +=_dbce .RowStride ;_bgcdc +=_egdd .RowStride ;};};if _egcd {for _eged =0;_eged < _gacag ;_eged ++{_beaa =_egdd .Data [_efff ]<<_eaea ;if _gaga {_beaa =_faba (_beaa ,_egdd .Data [_efff +1]>>_gcgbd ,_bbbg );};_dbce .Data [_cebb ]=_faba (_dbce .Data [_cebb ],_beaa ^_dbce .Data [_cebb ],_bfcfc );
|
|
_cebb +=_dbce .RowStride ;_efff +=_egdd .RowStride ;};};case PixNotSrcOrDst :if _bbea {for _eged =0;_eged < _gacag ;_eged ++{if _dadg ==_bbaf {_beaa =_egdd .Data [_cggc ]<<_eaea ;if _dbgf {_beaa =_faba (_beaa ,_egdd .Data [_cggc +1]>>_gcgbd ,_bbbg );};
|
|
}else {_beaa =_egdd .Data [_cggc ]>>_gcgbd ;};_dbce .Data [_fbda ]=_faba (_dbce .Data [_fbda ],^_beaa |_dbce .Data [_fbda ],_fcag );_fbda +=_dbce .RowStride ;_cggc +=_egdd .RowStride ;};};if _fffb {for _eged =0;_eged < _gacag ;_eged ++{for _def =0;_def < _eeaf ;
|
|
_def ++{_beaa =_faba (_egdd .Data [_bgcdc +_def ]<<_eaea ,_egdd .Data [_bgcdc +_def +1]>>_gcgbd ,_bbbg );_dbce .Data [_gffe +_def ]|=^_beaa ;};_gffe +=_dbce .RowStride ;_bgcdc +=_egdd .RowStride ;};};if _egcd {for _eged =0;_eged < _gacag ;_eged ++{_beaa =_egdd .Data [_efff ]<<_eaea ;
|
|
if _gaga {_beaa =_faba (_beaa ,_egdd .Data [_efff +1]>>_gcgbd ,_bbbg );};_dbce .Data [_cebb ]=_faba (_dbce .Data [_cebb ],^_beaa |_dbce .Data [_cebb ],_bfcfc );_cebb +=_dbce .RowStride ;_efff +=_egdd .RowStride ;};};case PixNotSrcAndDst :if _bbea {for _eged =0;
|
|
_eged < _gacag ;_eged ++{if _dadg ==_bbaf {_beaa =_egdd .Data [_cggc ]<<_eaea ;if _dbgf {_beaa =_faba (_beaa ,_egdd .Data [_cggc +1]>>_gcgbd ,_bbbg );};}else {_beaa =_egdd .Data [_cggc ]>>_gcgbd ;};_dbce .Data [_fbda ]=_faba (_dbce .Data [_fbda ],^_beaa &_dbce .Data [_fbda ],_fcag );
|
|
_fbda +=_dbce .RowStride ;_cggc +=_egdd .RowStride ;};};if _fffb {for _eged =0;_eged < _gacag ;_eged ++{for _def =0;_def < _eeaf ;_def ++{_beaa =_faba (_egdd .Data [_bgcdc +_def ]<<_eaea ,_egdd .Data [_bgcdc +_def +1]>>_gcgbd ,_bbbg );_dbce .Data [_gffe +_def ]&=^_beaa ;
|
|
};_gffe +=_dbce .RowStride ;_bgcdc +=_egdd .RowStride ;};};if _egcd {for _eged =0;_eged < _gacag ;_eged ++{_beaa =_egdd .Data [_efff ]<<_eaea ;if _gaga {_beaa =_faba (_beaa ,_egdd .Data [_efff +1]>>_gcgbd ,_bbbg );};_dbce .Data [_cebb ]=_faba (_dbce .Data [_cebb ],^_beaa &_dbce .Data [_cebb ],_bfcfc );
|
|
_cebb +=_dbce .RowStride ;_efff +=_egdd .RowStride ;};};case PixSrcOrNotDst :if _bbea {for _eged =0;_eged < _gacag ;_eged ++{if _dadg ==_bbaf {_beaa =_egdd .Data [_cggc ]<<_eaea ;if _dbgf {_beaa =_faba (_beaa ,_egdd .Data [_cggc +1]>>_gcgbd ,_bbbg );};
|
|
}else {_beaa =_egdd .Data [_cggc ]>>_gcgbd ;};_dbce .Data [_fbda ]=_faba (_dbce .Data [_fbda ],_beaa |^_dbce .Data [_fbda ],_fcag );_fbda +=_dbce .RowStride ;_cggc +=_egdd .RowStride ;};};if _fffb {for _eged =0;_eged < _gacag ;_eged ++{for _def =0;_def < _eeaf ;
|
|
_def ++{_beaa =_faba (_egdd .Data [_bgcdc +_def ]<<_eaea ,_egdd .Data [_bgcdc +_def +1]>>_gcgbd ,_bbbg );_dbce .Data [_gffe +_def ]=_beaa |^_dbce .Data [_gffe +_def ];};_gffe +=_dbce .RowStride ;_bgcdc +=_egdd .RowStride ;};};if _egcd {for _eged =0;_eged < _gacag ;
|
|
_eged ++{_beaa =_egdd .Data [_efff ]<<_eaea ;if _gaga {_beaa =_faba (_beaa ,_egdd .Data [_efff +1]>>_gcgbd ,_bbbg );};_dbce .Data [_cebb ]=_faba (_dbce .Data [_cebb ],_beaa |^_dbce .Data [_cebb ],_bfcfc );_cebb +=_dbce .RowStride ;_efff +=_egdd .RowStride ;
|
|
};};case PixSrcAndNotDst :if _bbea {for _eged =0;_eged < _gacag ;_eged ++{if _dadg ==_bbaf {_beaa =_egdd .Data [_cggc ]<<_eaea ;if _dbgf {_beaa =_faba (_beaa ,_egdd .Data [_cggc +1]>>_gcgbd ,_bbbg );};}else {_beaa =_egdd .Data [_cggc ]>>_gcgbd ;};_dbce .Data [_fbda ]=_faba (_dbce .Data [_fbda ],_beaa &^_dbce .Data [_fbda ],_fcag );
|
|
_fbda +=_dbce .RowStride ;_cggc +=_egdd .RowStride ;};};if _fffb {for _eged =0;_eged < _gacag ;_eged ++{for _def =0;_def < _eeaf ;_def ++{_beaa =_faba (_egdd .Data [_bgcdc +_def ]<<_eaea ,_egdd .Data [_bgcdc +_def +1]>>_gcgbd ,_bbbg );_dbce .Data [_gffe +_def ]=_beaa &^_dbce .Data [_gffe +_def ];
|
|
};_gffe +=_dbce .RowStride ;_bgcdc +=_egdd .RowStride ;};};if _egcd {for _eged =0;_eged < _gacag ;_eged ++{_beaa =_egdd .Data [_efff ]<<_eaea ;if _gaga {_beaa =_faba (_beaa ,_egdd .Data [_efff +1]>>_gcgbd ,_bbbg );};_dbce .Data [_cebb ]=_faba (_dbce .Data [_cebb ],_beaa &^_dbce .Data [_cebb ],_bfcfc );
|
|
_cebb +=_dbce .RowStride ;_efff +=_egdd .RowStride ;};};case PixNotPixSrcOrDst :if _bbea {for _eged =0;_eged < _gacag ;_eged ++{if _dadg ==_bbaf {_beaa =_egdd .Data [_cggc ]<<_eaea ;if _dbgf {_beaa =_faba (_beaa ,_egdd .Data [_cggc +1]>>_gcgbd ,_bbbg );
|
|
};}else {_beaa =_egdd .Data [_cggc ]>>_gcgbd ;};_dbce .Data [_fbda ]=_faba (_dbce .Data [_fbda ],^(_beaa |_dbce .Data [_fbda ]),_fcag );_fbda +=_dbce .RowStride ;_cggc +=_egdd .RowStride ;};};if _fffb {for _eged =0;_eged < _gacag ;_eged ++{for _def =0;
|
|
_def < _eeaf ;_def ++{_beaa =_faba (_egdd .Data [_bgcdc +_def ]<<_eaea ,_egdd .Data [_bgcdc +_def +1]>>_gcgbd ,_bbbg );_dbce .Data [_gffe +_def ]=^(_beaa |_dbce .Data [_gffe +_def ]);};_gffe +=_dbce .RowStride ;_bgcdc +=_egdd .RowStride ;};};if _egcd {for _eged =0;
|
|
_eged < _gacag ;_eged ++{_beaa =_egdd .Data [_efff ]<<_eaea ;if _gaga {_beaa =_faba (_beaa ,_egdd .Data [_efff +1]>>_gcgbd ,_bbbg );};_dbce .Data [_cebb ]=_faba (_dbce .Data [_cebb ],^(_beaa |_dbce .Data [_cebb ]),_bfcfc );_cebb +=_dbce .RowStride ;_efff +=_egdd .RowStride ;
|
|
};};case PixNotPixSrcAndDst :if _bbea {for _eged =0;_eged < _gacag ;_eged ++{if _dadg ==_bbaf {_beaa =_egdd .Data [_cggc ]<<_eaea ;if _dbgf {_beaa =_faba (_beaa ,_egdd .Data [_cggc +1]>>_gcgbd ,_bbbg );};}else {_beaa =_egdd .Data [_cggc ]>>_gcgbd ;};_dbce .Data [_fbda ]=_faba (_dbce .Data [_fbda ],^(_beaa &_dbce .Data [_fbda ]),_fcag );
|
|
_fbda +=_dbce .RowStride ;_cggc +=_egdd .RowStride ;};};if _fffb {for _eged =0;_eged < _gacag ;_eged ++{for _def =0;_def < _eeaf ;_def ++{_beaa =_faba (_egdd .Data [_bgcdc +_def ]<<_eaea ,_egdd .Data [_bgcdc +_def +1]>>_gcgbd ,_bbbg );_dbce .Data [_gffe +_def ]=^(_beaa &_dbce .Data [_gffe +_def ]);
|
|
};_gffe +=_dbce .RowStride ;_bgcdc +=_egdd .RowStride ;};};if _egcd {for _eged =0;_eged < _gacag ;_eged ++{_beaa =_egdd .Data [_efff ]<<_eaea ;if _gaga {_beaa =_faba (_beaa ,_egdd .Data [_efff +1]>>_gcgbd ,_bbbg );};_dbce .Data [_cebb ]=_faba (_dbce .Data [_cebb ],^(_beaa &_dbce .Data [_cebb ]),_bfcfc );
|
|
_cebb +=_dbce .RowStride ;_efff +=_egdd .RowStride ;};};case PixNotPixSrcXorDst :if _bbea {for _eged =0;_eged < _gacag ;_eged ++{if _dadg ==_bbaf {_beaa =_egdd .Data [_cggc ]<<_eaea ;if _dbgf {_beaa =_faba (_beaa ,_egdd .Data [_cggc +1]>>_gcgbd ,_bbbg );
|
|
};}else {_beaa =_egdd .Data [_cggc ]>>_gcgbd ;};_dbce .Data [_fbda ]=_faba (_dbce .Data [_fbda ],^(_beaa ^_dbce .Data [_fbda ]),_fcag );_fbda +=_dbce .RowStride ;_cggc +=_egdd .RowStride ;};};if _fffb {for _eged =0;_eged < _gacag ;_eged ++{for _def =0;
|
|
_def < _eeaf ;_def ++{_beaa =_faba (_egdd .Data [_bgcdc +_def ]<<_eaea ,_egdd .Data [_bgcdc +_def +1]>>_gcgbd ,_bbbg );_dbce .Data [_gffe +_def ]=^(_beaa ^_dbce .Data [_gffe +_def ]);};_gffe +=_dbce .RowStride ;_bgcdc +=_egdd .RowStride ;};};if _egcd {for _eged =0;
|
|
_eged < _gacag ;_eged ++{_beaa =_egdd .Data [_efff ]<<_eaea ;if _gaga {_beaa =_faba (_beaa ,_egdd .Data [_efff +1]>>_gcgbd ,_bbbg );};_dbce .Data [_cebb ]=_faba (_dbce .Data [_cebb ],^(_beaa ^_dbce .Data [_cebb ]),_bfcfc );_cebb +=_dbce .RowStride ;_efff +=_egdd .RowStride ;
|
|
};};default:_bc .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",_ccdd );return _f .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 (_efefa *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _egeg ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_bgcb ,_bbec :=_efefa .selectByIndexes (idx );
|
|
if _bbec !=nil {return nil ,_f .Wrap (_bbec ,_egeg ,"");};return _bgcb ,nil ;};func _cdda (_edcf ,_gcad *Bitmap ,_cfgac *Selection )(*Bitmap ,error ){const _geac ="\u006f\u0070\u0065\u006e";var _cdca error ;_edcf ,_cdca =_gfea (_edcf ,_gcad ,_cfgac );if _cdca !=nil {return nil ,_f .Wrap (_cdca ,_geac ,"");
|
|
};_ffgc ,_cdca :=_ffded (nil ,_gcad ,_cfgac );if _cdca !=nil {return nil ,_f .Wrap (_cdca ,_geac ,"");};_ ,_cdca =_gcgb (_edcf ,_ffgc ,_cfgac );if _cdca !=nil {return nil ,_f .Wrap (_cdca ,_geac ,"");};return _edcf ,nil ;};func _gccb (_eccf ,_dbfe *Bitmap ,_egge ,_aafc ,_geab ,_eae ,_debe int ,_cfbf CombinationOperator )error {var _deae int ;
|
|
_dec :=func (){_deae ++;_geab +=_dbfe .RowStride ;_eae +=_eccf .RowStride ;_debe +=_eccf .RowStride };for _deae =_egge ;_deae < _aafc ;_dec (){_fbcd :=_geab ;for _gfb :=_eae ;_gfb <=_debe ;_gfb ++{_gege ,_ddfc :=_dbfe .GetByte (_fbcd );if _ddfc !=nil {return _ddfc ;
|
|
};_ggffb ,_ddfc :=_eccf .GetByte (_gfb );if _ddfc !=nil {return _ddfc ;};if _ddfc =_dbfe .SetByte (_fbcd ,_ebec (_gege ,_ggffb ,_cfbf ));_ddfc !=nil {return _ddfc ;};_fbcd ++;};};return nil ;};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;
|
|
};func (_dcdb *ClassedPoints )Swap (i ,j int ){_dcdb .IntSlice [i ],_dcdb .IntSlice [j ]=_dcdb .IntSlice [j ],_dcdb .IntSlice [i ];};func (_efaf *Bitmap )setBit (_gceg int ){_efaf .Data [(_gceg >>3)]|=0x80>>uint (_gceg &7)};type RasterOperator int ;func (_ddbga Points )GetIntY (i int )(int ,error ){if i >=len (_ddbga ){return 0,_f .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 (_ddbga [i ].Y ),nil ;};func (_daegf Points )Get (i int )(Point ,error ){if i > len (_daegf )-1{return Point {},_f .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 _daegf [i ],nil ;};func (_ccda *Bitmap )setEightBytes (_gda int ,_ccc uint64 )error {_debg :=_ccda .RowStride -(_gda %_ccda .RowStride );if _ccda .RowStride !=_ccda .Width >>3{_debg --;};if _debg >=8{return _ccda .setEightFullBytes (_gda ,_ccc );
|
|
};return _ccda .setEightPartlyBytes (_gda ,_debg ,_ccc );};func (_fedd *Bitmaps )SortByHeight (){_ecd :=(*byHeight )(_fedd );_fbe .Sort (_ecd )};func (_fccab *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _eaeab ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";
|
|
if len (_fccab .Values )==0{return nil ,_f .Error (_eaeab ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_degd :=&BitmapsArray {};_fccab .SortByWidth ();_ddfcd :=-1;_efgdba :=-1;for _efdf :=0;_efdf < len (_fccab .Values );
|
|
_efdf ++{_dgdf :=_fccab .Values [_efdf ].Width ;if _dgdf > _ddfcd {_ddfcd =_dgdf ;_efgdba ++;_degd .Values =append (_degd .Values ,&Bitmaps {});};_degd .Values [_efgdba ].AddBitmap (_fccab .Values [_efdf ]);};return _degd ,nil ;};func (_acfb *Bitmap )inverseData (){if _aebgf :=_acfb .RasterOperation (0,0,_acfb .Width ,_acfb .Height ,PixNotDst ,nil ,0,0);
|
|
_aebgf !=nil {_bc .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_aebgf );};if _acfb .Color ==Chocolate {_acfb .Color =Vanilla ;}else {_acfb .Color =Chocolate ;};};
|
|
func TstVSymbol (t *_ee .T ,scale ...int )*Bitmap {_fbcf ,_face :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_c .NoError (t ,_face );return TstGetScaledSymbol (t ,_fbcf ,scale ...);};func _dfad ()(_dbdb []byte ){_dbdb =make ([]byte ,256);for _bbd :=0;
|
|
_bbd < 256;_bbd ++{_cea :=byte (_bbd );_dbdb [_cea ]=(_cea &0x01)|((_cea &0x04)>>1)|((_cea &0x10)>>2)|((_cea &0x40)>>3)|((_cea &0x02)<<3)|((_cea &0x08)<<2)|((_cea &0x20)<<1)|(_cea &0x80);};return _dbdb ;};func _fddgg (_agda *Bitmap ,_gacae ,_abafe ,_cbgb ,_babd int ,_gfd RasterOperator ){if _gacae < 0{_cbgb +=_gacae ;
|
|
_gacae =0;};_bffe :=_gacae +_cbgb -_agda .Width ;if _bffe > 0{_cbgb -=_bffe ;};if _abafe < 0{_babd +=_abafe ;_abafe =0;};_gegda :=_abafe +_babd -_agda .Height ;if _gegda > 0{_babd -=_gegda ;};if _cbgb <=0||_babd <=0{return ;};if (_gacae &7)==0{_deagf (_agda ,_gacae ,_abafe ,_cbgb ,_babd ,_gfd );
|
|
}else {_dede (_agda ,_gacae ,_abafe ,_cbgb ,_babd ,_gfd );};};func _fggf (_gbcg ,_efgdb *Bitmap ,_bbge ,_gacf int )(_bfab error ){const _gegb ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_gdeg ,_aabg ,_bdff ,_cgeb int ;
|
|
_eabg ,_bbdg ,_afad ,_gbeb ,_fggdc ,_gdfb ,_efcd ,_bfdb byte ;);for _gdeg =0;_gdeg < _bbge ;_gdeg ++{_bdff =_gdeg *_gbcg .RowStride ;_cgeb =_gdeg *_efgdb .RowStride ;for _aabg =0;_aabg < _gacf ;_aabg ++{if _eabg ,_bfab =_gbcg .GetByte (_bdff +_aabg );_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
|
|
};if _bbdg ,_bfab =_efgdb .GetByte (_cgeb +_aabg );_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _gdeg > 0{if _afad ,_bfab =_gbcg .GetByte (_bdff -_gbcg .RowStride +_aabg );
|
|
_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_eabg |=_afad |(_afad <<1)|(_afad >>1);if _aabg > 0{if _bfdb ,_bfab =_gbcg .GetByte (_bdff -_gbcg .RowStride +_aabg -1);_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");
|
|
};_eabg |=_bfdb <<7;};if _aabg < _gacf -1{if _bfdb ,_bfab =_gbcg .GetByte (_bdff -_gbcg .RowStride +_aabg +1);_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_eabg |=_bfdb >>7;
|
|
};};if _aabg > 0{if _gbeb ,_bfab =_gbcg .GetByte (_bdff +_aabg -1);_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\u006a\u0020\u003e \u0030");};_eabg |=_gbeb <<7;};_eabg &=_bbdg ;if _eabg ==0||^_eabg ==0{if _bfab =_gbcg .SetByte (_bdff +_aabg ,_eabg );_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");
|
|
};};for {_efcd =_eabg ;_eabg =(_eabg |(_eabg >>1)|(_eabg <<1))&_bbdg ;if (_eabg ^_efcd )==0{if _bfab =_gbcg .SetByte (_bdff +_aabg ,_eabg );_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
|
|
};break ;};};};};for _gdeg =_bbge -1;_gdeg >=0;_gdeg --{_bdff =_gdeg *_gbcg .RowStride ;_cgeb =_gdeg *_efgdb .RowStride ;for _aabg =_gacf -1;_aabg >=0;_aabg --{if _eabg ,_bfab =_gbcg .GetByte (_bdff +_aabg );_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
|
|
};if _bbdg ,_bfab =_efgdb .GetByte (_cgeb +_aabg );_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _gdeg < _bbge -1{if _fggdc ,_bfab =_gbcg .GetByte (_bdff +_gbcg .RowStride +_aabg );
|
|
_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_eabg |=_fggdc |(_fggdc <<1)|_fggdc >>1;if _aabg > 0{if _bfdb ,_bfab =_gbcg .GetByte (_bdff +_gbcg .RowStride +_aabg -1);
|
|
_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\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");};_eabg |=_bfdb <<7;};if _aabg < _gacf -1{if _bfdb ,_bfab =_gbcg .GetByte (_bdff +_gbcg .RowStride +_aabg +1);
|
|
_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\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");
|
|
};_eabg |=_bfdb >>7;};};if _aabg < _gacf -1{if _gdfb ,_bfab =_gbcg .GetByte (_bdff +_aabg +1);_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\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");
|
|
};_eabg |=_gdfb >>7;};_eabg &=_bbdg ;if _eabg ==0||(^_eabg )==0{if _bfab =_gbcg .SetByte (_bdff +_aabg ,_eabg );_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_efcd =_eabg ;
|
|
_eabg =(_eabg |(_eabg >>1)|(_eabg <<1))&_bbdg ;if (_eabg ^_efcd )==0{if _bfab =_gbcg .SetByte (_bdff +_aabg ,_eabg );_bfab !=nil {return _f .Wrap (_bfab ,_gegb ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
|
|
};break ;};};};};return nil ;};func (_fee *Bitmap )nextOnPixelLow (_acfe ,_faaaa ,_baeg ,_bbdf ,_cdaea int )(_bedf _ac .Point ,_fege bool ,_ffb error ){const _acec ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
|
|
var (_gccd int ;_gac byte ;);_bbcd :=_cdaea *_baeg ;_dgcdb :=_bbcd +(_bbdf /8);if _gac ,_ffb =_fee .GetByte (_dgcdb );_ffb !=nil {return _bedf ,false ,_f .Wrap (_ffb ,_acec ,"\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 _gac !=0{_bfcg :=_bbdf -(_bbdf %8)+7;for _gccd =_bbdf ;_gccd <=_bfcg &&_gccd < _acfe ;_gccd ++{if _fee .GetPixel (_gccd ,_cdaea ){_bedf .X =_gccd ;_bedf .Y =_cdaea ;return _bedf ,true ,nil ;};};};_eeaa :=(_bbdf /8)+1;_gccd =8*_eeaa ;var _fbc int ;
|
|
for _dgcdb =_bbcd +_eeaa ;_gccd < _acfe ;_dgcdb ,_gccd =_dgcdb +1,_gccd +8{if _gac ,_ffb =_fee .GetByte (_dgcdb );_ffb !=nil {return _bedf ,false ,_f .Wrap (_ffb ,_acec ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");
|
|
};if _gac ==0{continue ;};for _fbc =0;_fbc < 8&&_gccd < _acfe ;_fbc ,_gccd =_fbc +1,_gccd +1{if _fee .GetPixel (_gccd ,_cdaea ){_bedf .X =_gccd ;_bedf .Y =_cdaea ;return _bedf ,true ,nil ;};};};for _baba :=_cdaea +1;_baba < _faaaa ;_baba ++{_bbcd =_baba *_baeg ;
|
|
for _dgcdb ,_gccd =_bbcd ,0;_gccd < _acfe ;_dgcdb ,_gccd =_dgcdb +1,_gccd +8{if _gac ,_ffb =_fee .GetByte (_dgcdb );_ffb !=nil {return _bedf ,false ,_f .Wrap (_ffb ,_acec ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");
|
|
};if _gac ==0{continue ;};for _fbc =0;_fbc < 8&&_gccd < _acfe ;_fbc ,_gccd =_fbc +1,_gccd +1{if _fee .GetPixel (_gccd ,_baba ){_bedf .X =_gccd ;_bedf .Y =_baba ;return _bedf ,true ,nil ;};};};};return _bedf ,false ,nil ;};type byWidth Bitmaps ;func (_agbb *Bitmap )GetByteIndex (x ,y int )int {return y *_agbb .RowStride +(x >>3)};
|
|
var (_agcb =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_dece =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_ecgge *Bitmaps )selectByIndicator (_gcbd *_d .NumSlice )(_gfaf *Bitmaps ,_ggbge error ){const _fcdd ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _ecgge ==nil {return nil ,_f .Error (_fcdd ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _gcbd ==nil {return nil ,_f .Error (_fcdd ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
|
|
};if len (_ecgge .Values )==0{return _ecgge ,nil ;};if len (*_gcbd )!=len (_ecgge .Values ){return nil ,_f .Errorf (_fcdd ,"\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 (*_gcbd ),len (_ecgge .Values ));
|
|
};var _gcdf ,_gfced ,_cfddb int ;for _gfced =0;_gfced < len (*_gcbd );_gfced ++{if _gcdf ,_ggbge =_gcbd .GetInt (_gfced );_ggbge !=nil {return nil ,_f .Wrap (_ggbge ,_fcdd ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _gcdf ==1{_cfddb ++;
|
|
};};if _cfddb ==len (_ecgge .Values ){return _ecgge ,nil ;};_gfaf =&Bitmaps {};_eebdd :=len (_ecgge .Values )==len (_ecgge .Boxes );for _gfced =0;_gfced < len (*_gcbd );_gfced ++{if _gcdf =int ((*_gcbd )[_gfced ]);_gcdf ==0{continue ;};_gfaf .Values =append (_gfaf .Values ,_ecgge .Values [_gfced ]);
|
|
if _eebdd {_gfaf .Boxes =append (_gfaf .Boxes ,_ecgge .Boxes [_gfced ]);};};return _gfaf ,nil ;};func TstWriteSymbols (t *_ee .T ,bms *Bitmaps ,src *Bitmap ){for _aaae :=0;_aaae < bms .Size ();_aaae ++{_afac :=bms .Values [_aaae ];_gdege :=bms .Boxes [_aaae ];
|
|
_faeg :=src .RasterOperation (_gdege .Min .X ,_gdege .Min .Y ,_afac .Width ,_afac .Height ,PixSrc ,_afac ,0,0);_c .NoError (t ,_faeg );};};func _egcg (_abafb ,_daef *Bitmap ,_ebef ,_fgea int )(_egcc error ){const _fgbe ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";
|
|
var (_bgbe ,_eeggd ,_cggf ,_caaf int ;_ggafc ,_bagaf ,_befa ,_agdde ,_ffcb ,_fcca ,_cagd byte ;);for _bgbe =0;_bgbe < _ebef ;_bgbe ++{_cggf =_bgbe *_abafb .RowStride ;_caaf =_bgbe *_daef .RowStride ;for _eeggd =0;_eeggd < _fgea ;_eeggd ++{_ggafc ,_egcc =_abafb .GetByte (_cggf +_eeggd );
|
|
if _egcc !=nil {return _f .Wrap (_egcc ,_fgbe ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_bagaf ,_egcc =_daef .GetByte (_caaf +_eeggd );if _egcc !=nil {return _f .Wrap (_egcc ,_fgbe ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");
|
|
};if _bgbe > 0{_befa ,_egcc =_abafb .GetByte (_cggf -_abafb .RowStride +_eeggd );if _egcc !=nil {return _f .Wrap (_egcc ,_fgbe ,"\u0069\u0020\u003e \u0030");};_ggafc |=_befa ;};if _eeggd > 0{_agdde ,_egcc =_abafb .GetByte (_cggf +_eeggd -1);if _egcc !=nil {return _f .Wrap (_egcc ,_fgbe ,"\u006a\u0020\u003e \u0030");
|
|
};_ggafc |=_agdde <<7;};_ggafc &=_bagaf ;if _ggafc ==0||(^_ggafc )==0{if _egcc =_abafb .SetByte (_cggf +_eeggd ,_ggafc );_egcc !=nil {return _f .Wrap (_egcc ,_fgbe ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");
|
|
};continue ;};for {_cagd =_ggafc ;_ggafc =(_ggafc |(_ggafc >>1)|(_ggafc <<1))&_bagaf ;if (_ggafc ^_cagd )==0{if _egcc =_abafb .SetByte (_cggf +_eeggd ,_ggafc );_egcc !=nil {return _f .Wrap (_egcc ,_fgbe ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
|
|
};break ;};};};};for _bgbe =_ebef -1;_bgbe >=0;_bgbe --{_cggf =_bgbe *_abafb .RowStride ;_caaf =_bgbe *_daef .RowStride ;for _eeggd =_fgea -1;_eeggd >=0;_eeggd --{if _ggafc ,_egcc =_abafb .GetByte (_cggf +_eeggd );_egcc !=nil {return _f .Wrap (_egcc ,_fgbe ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");
|
|
};if _bagaf ,_egcc =_daef .GetByte (_caaf +_eeggd );_egcc !=nil {return _f .Wrap (_egcc ,_fgbe ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _bgbe < _ebef -1{if _ffcb ,_egcc =_abafb .GetByte (_cggf +_abafb .RowStride +_eeggd );
|
|
_egcc !=nil {return _f .Wrap (_egcc ,_fgbe ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_ggafc |=_ffcb ;};if _eeggd < _fgea -1{if _fcca ,_egcc =_abafb .GetByte (_cggf +_eeggd +1);_egcc !=nil {return _f .Wrap (_egcc ,_fgbe ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");
|
|
};_ggafc |=_fcca >>7;};_ggafc &=_bagaf ;if _ggafc ==0||(^_ggafc )==0{if _egcc =_abafb .SetByte (_cggf +_eeggd ,_ggafc );_egcc !=nil {return _f .Wrap (_egcc ,_fgbe ,"\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 {_cagd =_ggafc ;_ggafc =(_ggafc |(_ggafc >>1)|(_ggafc <<1))&_bagaf ;if (_ggafc ^_cagd )==0{if _egcc =_abafb .SetByte (_cggf +_eeggd ,_ggafc );_egcc !=nil {return _f .Wrap (_egcc ,_fgbe ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
|
|
};break ;};};};};return nil ;};func (_fdg *ClassedPoints )Less (i ,j int )bool {return _fdg ._cbefc (i ,j )};func TstImageBitmapData ()[]byte {return _dbcd .Data };type SizeSelection int ;func (_eda *Bitmap )nextOnPixel (_afd ,_gbc int )(_bed _ac .Point ,_ecaf bool ,_fbd error ){const _befb ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";
|
|
_bed ,_ecaf ,_fbd =_eda .nextOnPixelLow (_eda .Width ,_eda .Height ,_eda .RowStride ,_afd ,_gbc );if _fbd !=nil {return _bed ,false ,_f .Wrap (_fbd ,_befb ,"");};return _bed ,_ecaf ,nil ;};func (_decf *byHeight )Swap (i ,j int ){_decf .Values [i ],_decf .Values [j ]=_decf .Values [j ],_decf .Values [i ];
|
|
if _decf .Boxes !=nil {_decf .Boxes [i ],_decf .Boxes [j ]=_decf .Boxes [j ],_decf .Boxes [i ];};};func NewClassedPoints (points *Points ,classes _d .IntSlice )(*ClassedPoints ,error ){const _ggbf ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
|
|
if points ==nil {return nil ,_f .Error (_ggbf ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_f .Error (_ggbf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
|
|
};_dacda :=&ClassedPoints {Points :points ,IntSlice :classes };if _faab :=_dacda .validateIntSlice ();_faab !=nil {return nil ,_f .Wrap (_faab ,_ggbf ,"");};return _dacda ,nil ;};func (_babf *ClassedPoints )SortByX (){_babf ._cbefc =_babf .xSortFunction ();
|
|
_fbe .Sort (_babf )};func _afffd (_gdgf *Bitmap ,_dgdbe ,_cfede ,_ggeg ,_ffca int ,_ceef RasterOperator ,_bgfa *Bitmap ,_fadf ,_facg int )error {const _dfeda ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";if _gdgf ==nil {return _f .Error (_dfeda ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");
|
|
};if _ceef ==PixDst {return nil ;};switch _ceef {case PixClr ,PixSet ,PixNotDst :_fddgg (_gdgf ,_dgdbe ,_cfede ,_ggeg ,_ffca ,_ceef );return nil ;};if _bgfa ==nil {_bc .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 _f .Error (_dfeda ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ffedd :=_cccb (_gdgf ,_dgdbe ,_cfede ,_ggeg ,_ffca ,_ceef ,_bgfa ,_fadf ,_facg );_ffedd !=nil {return _f .Wrap (_ffedd ,_dfeda ,"");
|
|
};return nil ;};func TstFrameBitmapData ()[]byte {return _cdbbf .Data };func _deagf (_bcgdg *Bitmap ,_gaed ,_dccg int ,_fgce ,_cafba int ,_bgdeb RasterOperator ){var (_afec int ;_eece byte ;_ffgg ,_dabac int ;_dccge int ;);_cfcg :=_fgce >>3;_aaab :=_fgce &7;
|
|
if _aaab > 0{_eece =_agcb [_aaab ];};_afec =_bcgdg .RowStride *_dccg +(_gaed >>3);switch _bgdeb {case PixClr :for _ffgg =0;_ffgg < _cafba ;_ffgg ++{_dccge =_afec +_ffgg *_bcgdg .RowStride ;for _dabac =0;_dabac < _cfcg ;_dabac ++{_bcgdg .Data [_dccge ]=0x0;
|
|
_dccge ++;};if _aaab > 0{_bcgdg .Data [_dccge ]=_faba (_bcgdg .Data [_dccge ],0x0,_eece );};};case PixSet :for _ffgg =0;_ffgg < _cafba ;_ffgg ++{_dccge =_afec +_ffgg *_bcgdg .RowStride ;for _dabac =0;_dabac < _cfcg ;_dabac ++{_bcgdg .Data [_dccge ]=0xff;
|
|
_dccge ++;};if _aaab > 0{_bcgdg .Data [_dccge ]=_faba (_bcgdg .Data [_dccge ],0xff,_eece );};};case PixNotDst :for _ffgg =0;_ffgg < _cafba ;_ffgg ++{_dccge =_afec +_ffgg *_bcgdg .RowStride ;for _dabac =0;_dabac < _cfcg ;_dabac ++{_bcgdg .Data [_dccge ]=^_bcgdg .Data [_dccge ];
|
|
_dccge ++;};if _aaab > 0{_bcgdg .Data [_dccge ]=_faba (_bcgdg .Data [_dccge ],^_bcgdg .Data [_dccge ],_eece );};};};};func _cccb (_bgefgb *Bitmap ,_cgde ,_bgdag int ,_dcaf ,_ddae int ,_bdad RasterOperator ,_geacb *Bitmap ,_cgca ,_cffdg int )error {var _fccf ,_agegc ,_dgbac ,_abaa int ;
|
|
if _cgde < 0{_cgca -=_cgde ;_dcaf +=_cgde ;_cgde =0;};if _cgca < 0{_cgde -=_cgca ;_dcaf +=_cgca ;_cgca =0;};_fccf =_cgde +_dcaf -_bgefgb .Width ;if _fccf > 0{_dcaf -=_fccf ;};_agegc =_cgca +_dcaf -_geacb .Width ;if _agegc > 0{_dcaf -=_agegc ;};if _bgdag < 0{_cffdg -=_bgdag ;
|
|
_ddae +=_bgdag ;_bgdag =0;};if _cffdg < 0{_bgdag -=_cffdg ;_ddae +=_cffdg ;_cffdg =0;};_dgbac =_bgdag +_ddae -_bgefgb .Height ;if _dgbac > 0{_ddae -=_dgbac ;};_abaa =_cffdg +_ddae -_geacb .Height ;if _abaa > 0{_ddae -=_abaa ;};if _dcaf <=0||_ddae <=0{return nil ;
|
|
};var _efdef error ;switch {case _cgde &7==0&&_cgca &7==0:_efdef =_cagf (_bgefgb ,_cgde ,_bgdag ,_dcaf ,_ddae ,_bdad ,_geacb ,_cgca ,_cffdg );case _cgde &7==_cgca &7:_efdef =_bcfdb (_bgefgb ,_cgde ,_bgdag ,_dcaf ,_ddae ,_bdad ,_geacb ,_cgca ,_cffdg );default:_efdef =_agdf (_bgefgb ,_cgde ,_bgdag ,_dcaf ,_ddae ,_bdad ,_geacb ,_cgca ,_cffdg );
|
|
};if _efdef !=nil {return _f .Wrap (_efdef ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func (_dedc *Boxes )makeSizeIndicator (_ffdg ,_gbdf int ,_dbff LocationFilter ,_dda SizeComparison )*_d .NumSlice {_eafg :=&_d .NumSlice {};
|
|
var _fgeb ,_fcd ,_fdca int ;for _ ,_dgdc :=range *_dedc {_fgeb =0;_fcd ,_fdca =_dgdc .Dx (),_dgdc .Dy ();switch _dbff {case LocSelectWidth :if (_dda ==SizeSelectIfLT &&_fcd < _ffdg )||(_dda ==SizeSelectIfGT &&_fcd > _ffdg )||(_dda ==SizeSelectIfLTE &&_fcd <=_ffdg )||(_dda ==SizeSelectIfGTE &&_fcd >=_ffdg ){_fgeb =1;
|
|
};case LocSelectHeight :if (_dda ==SizeSelectIfLT &&_fdca < _gbdf )||(_dda ==SizeSelectIfGT &&_fdca > _gbdf )||(_dda ==SizeSelectIfLTE &&_fdca <=_gbdf )||(_dda ==SizeSelectIfGTE &&_fdca >=_gbdf ){_fgeb =1;};case LocSelectIfEither :if (_dda ==SizeSelectIfLT &&(_fdca < _gbdf ||_fcd < _ffdg ))||(_dda ==SizeSelectIfGT &&(_fdca > _gbdf ||_fcd > _ffdg ))||(_dda ==SizeSelectIfLTE &&(_fdca <=_gbdf ||_fcd <=_ffdg ))||(_dda ==SizeSelectIfGTE &&(_fdca >=_gbdf ||_fcd >=_ffdg )){_fgeb =1;
|
|
};case LocSelectIfBoth :if (_dda ==SizeSelectIfLT &&(_fdca < _gbdf &&_fcd < _ffdg ))||(_dda ==SizeSelectIfGT &&(_fdca > _gbdf &&_fcd > _ffdg ))||(_dda ==SizeSelectIfLTE &&(_fdca <=_gbdf &&_fcd <=_ffdg ))||(_dda ==SizeSelectIfGTE &&(_fdca >=_gbdf &&_fcd >=_ffdg )){_fgeb =1;
|
|
};};_eafg .AddInt (_fgeb );};return _eafg ;};func (_fff *Bitmap )Equals (s *Bitmap )bool {if len (_fff .Data )!=len (s .Data )||_fff .Width !=s .Width ||_fff .Height !=s .Height {return false ;};for _fcg :=0;_fcg < _fff .Height ;_fcg ++{_ada :=_fcg *_fff .RowStride ;
|
|
for _bab :=0;_bab < _fff .RowStride ;_bab ++{if _fff .Data [_ada +_bab ]!=s .Data [_ada +_bab ]{return false ;};};};return true ;};func (_dcg *Bitmap )GetUnpaddedData ()([]byte ,error ){_dgcce :=uint (_dcg .Width &0x07);if _dgcce ==0{return _dcg .Data ,nil ;
|
|
};_ebg :=_dcg .Width *_dcg .Height ;if _ebg %8!=0{_ebg >>=3;_ebg ++;}else {_ebg >>=3;};_dacf :=make ([]byte ,_ebg );_eegc :=_ba .NewWriterMSB (_dacf );const _bca ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _dgba :=0;
|
|
_dgba < _dcg .Height ;_dgba ++{for _efad :=0;_efad < _dcg .RowStride ;_efad ++{_gcf :=_dcg .Data [_dgba *_dcg .RowStride +_efad ];if _efad !=_dcg .RowStride -1{_aebg :=_eegc .WriteByte (_gcf );if _aebg !=nil {return nil ,_f .Wrap (_aebg ,_bca ,"");};continue ;
|
|
};for _bdae :=uint (0);_bdae < _dgcce ;_bdae ++{_eec :=_eegc .WriteBit (int (_gcf >>(7-_bdae )&0x01));if _eec !=nil {return nil ,_f .Wrap (_eec ,_bca ,"");};};};};return _dacf ,nil ;};func (_fbgb CombinationOperator )String ()string {var _eaac string ;
|
|
switch _fbgb {case CmbOpOr :_eaac ="\u004f\u0052";case CmbOpAnd :_eaac ="\u0041\u004e\u0044";case CmbOpXor :_eaac ="\u0058\u004f\u0052";case CmbOpXNor :_eaac ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_eaac ="\u0052E\u0050\u004c\u0041\u0043\u0045";
|
|
case CmbOpNot :_eaac ="\u004e\u004f\u0054";};return _eaac ;};func (_fcbc *Boxes )Get (i int )(*_ac .Rectangle ,error ){const _acc ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _fcbc ==nil {return nil ,_f .Error (_acc ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if i > len (*_fcbc )-1{return nil ,_f .Errorf (_acc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_fcbc )[i ],nil ;};func (_cfc *Bitmap )addPadBits ()(_bgf error ){const _ecfc ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";
|
|
_daa :=_cfc .Width %8;if _daa ==0{return nil ;};_fgb :=_cfc .Width /8;_dgf :=_ba .NewReader (_cfc .Data );_dgbf :=make ([]byte ,_cfc .Height *_cfc .RowStride );_acf :=_ba .NewWriterMSB (_dgbf );_ddbf :=make ([]byte ,_fgb );var (_abcf int ;_dfbd uint64 ;
|
|
);for _abcf =0;_abcf < _cfc .Height ;_abcf ++{if _ ,_bgf =_dgf .Read (_ddbf );_bgf !=nil {return _f .Wrap (_bgf ,_ecfc ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_bgf =_acf .Write (_ddbf );_bgf !=nil {return _f .Wrap (_bgf ,_ecfc ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");
|
|
};if _dfbd ,_bgf =_dgf .ReadBits (byte (_daa ));_bgf !=nil {return _f .Wrap (_bgf ,_ecfc ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _bgf =_acf .WriteByte (byte (_dfbd )<<uint (8-_daa ));_bgf !=nil {return _f .Wrap (_bgf ,_ecfc ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");
|
|
};};_cfc .Data =_acf .Data ();return nil ;};func (_ccfb *Bitmap )setEightPartlyBytes (_cafd ,_fbefg int ,_fabb uint64 )(_gdg error ){var (_bfe byte ;_cdga int ;);const _efdeg ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";
|
|
for _dabf :=1;_dabf <=_fbefg ;_dabf ++{_cdga =64-_dabf *8;_bfe =byte (_fabb >>uint (_cdga )&0xff);_bc .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",_bfe ,_cafd ,_cafd +_dabf -1,_fbefg ,_cdga );
|
|
if _gdg =_ccfb .SetByte (_cafd +_dabf -1,_bfe );_gdg !=nil {return _f .Wrap (_gdg ,_efdeg ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_gbbc :=_ccfb .RowStride *8-_ccfb .Width ;if _gbbc ==0{return nil ;};_cdga -=8;_bfe =byte (_fabb >>uint (_cdga )&0xff)<<uint (_gbbc );
|
|
if _gdg =_ccfb .SetByte (_cafd +_fbefg ,_bfe );_gdg !=nil {return _f .Wrap (_gdg ,_efdeg ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func _gbdfg (_abcb *Bitmap ,_afcce *Bitmap ,_gfaa int )(_dgaf error ){const _cgdad ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";
|
|
_gafb :=_gfc (_abcb .Height ,_afcce .Height );_geae :=_gfc (_abcb .RowStride ,_afcce .RowStride );switch _gfaa {case 4:_dgaf =_egcg (_abcb ,_afcce ,_gafb ,_geae );case 8:_dgaf =_fggf (_abcb ,_afcce ,_gafb ,_geae );default:return _f .Errorf (_cgdad ,"\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",_gfaa );
|
|
};if _dgaf !=nil {return _f .Wrap (_dgaf ,_cgdad ,"");};return nil ;};func (_gbde MorphProcess )verify (_fbec int ,_ffff ,_deee *int )error {const _gbaa ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";
|
|
switch _gbde .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_gbde .Arguments )!=2{return _f .Error (_gbaa ,"\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");
|
|
};_aefc ,_gegd :=_gbde .getWidthHeight ();if _aefc <=0||_gegd <=0{return _f .Error (_gbaa ,"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 :_gggbc :=len (_gbde .Arguments );*_ffff +=_gggbc ;if _gggbc < 1||_gggbc > 4{return _f .Error (_gbaa ,"\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 _ffffd :=0;_ffffd < _gggbc ;_ffffd ++{if _gbde .Arguments [_ffffd ]< 1||_gbde .Arguments [_ffffd ]> 4{return _f .Error (_gbaa ,"\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 (_gbde .Arguments )==0{return _f .Error (_gbaa ,"\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");
|
|
};_ffea :=_gbde .Arguments [0];if _ffea !=2&&_ffea !=4&&_ffea !=8{return _f .Error (_gbaa ,"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");
|
|
};*_ffff -=_bagcc [_ffea /4];case MopAddBorder :if len (_gbde .Arguments )==0{return _f .Error (_gbaa ,"\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");
|
|
};_gdfc :=_gbde .Arguments [0];if _fbec > 0{return _f .Error (_gbaa ,"\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 _gdfc < 1{return _f .Error (_gbaa ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_deee =_gdfc ;};return nil ;};func _eeef (_eba ,_fggc *Bitmap ,_eca int ,_faf []byte ,_ecf int )(_cde error ){const _ebdd ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";
|
|
var (_bafb ,_gdd ,_abf ,_fbad ,_cfg ,_edba ,_de ,_cdgb int ;_bfb ,_gegf uint32 ;_dbd ,_dac byte ;_dfd uint16 ;);_ce :=make ([]byte ,4);_eeec :=make ([]byte ,4);for _abf =0;_abf < _eba .Height -1;_abf ,_fbad =_abf +2,_fbad +1{_bafb =_abf *_eba .RowStride ;
|
|
_gdd =_fbad *_fggc .RowStride ;for _cfg ,_edba =0,0;_cfg < _ecf ;_cfg ,_edba =_cfg +4,_edba +1{for _de =0;_de < 4;_de ++{_cdgb =_bafb +_cfg +_de ;if _cdgb <=len (_eba .Data )-1&&_cdgb < _bafb +_eba .RowStride {_ce [_de ]=_eba .Data [_cdgb ];}else {_ce [_de ]=0x00;
|
|
};_cdgb =_bafb +_eba .RowStride +_cfg +_de ;if _cdgb <=len (_eba .Data )-1&&_cdgb < _bafb +(2*_eba .RowStride ){_eeec [_de ]=_eba .Data [_cdgb ];}else {_eeec [_de ]=0x00;};};_bfb =_ae .BigEndian .Uint32 (_ce );_gegf =_ae .BigEndian .Uint32 (_eeec );_gegf &=_bfb ;
|
|
_gegf &=_gegf <<1;_gegf &=0xaaaaaaaa;_bfb =_gegf |(_gegf <<7);_dbd =byte (_bfb >>24);_dac =byte ((_bfb >>8)&0xff);_cdgb =_gdd +_edba ;if _cdgb +1==len (_fggc .Data )-1||_cdgb +1>=_gdd +_fggc .RowStride {_fggc .Data [_cdgb ]=_faf [_dbd ];if _cde =_fggc .SetByte (_cdgb ,_faf [_dbd ]);
|
|
_cde !=nil {return _f .Wrapf (_cde ,_ebdd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_cdgb );};}else {_dfd =(uint16 (_faf [_dbd ])<<8)|uint16 (_faf [_dac ]);if _cde =_fggc .setTwoBytes (_cdgb ,_dfd );_cde !=nil {return _f .Wrapf (_cde ,_ebdd ,"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",_cdgb );
|
|
};_edba ++;};};};return nil ;};func (_bfbc *Bitmaps )String ()string {_gfce :=_fb .Builder {};for _ ,_bgfd :=range _bfbc .Values {_gfce .WriteString (_bgfd .String ());_gfce .WriteRune ('\n');};return _gfce .String ();};func _bccb (_aace ,_gebg *Bitmap ,_cgbf ,_eeabg ,_agfc ,_eace ,_gcfbd ,_gbec ,_cgeg ,_gbf int ,_dddc CombinationOperator )error {var _deag int ;
|
|
_fge :=func (){_deag ++;_agfc +=_gebg .RowStride ;_eace +=_aace .RowStride ;_gcfbd +=_aace .RowStride };for _deag =_cgbf ;_deag < _eeabg ;_fge (){var _cfcc uint16 ;_fcbe :=_agfc ;for _cdcf :=_eace ;_cdcf <=_gcfbd ;_cdcf ++{_dgd ,_faad :=_gebg .GetByte (_fcbe );
|
|
if _faad !=nil {return _faad ;};_begfg ,_faad :=_aace .GetByte (_cdcf );if _faad !=nil {return _faad ;};_cfcc =(_cfcc |uint16 (_begfg ))<<uint (_gbf );_begfg =byte (_cfcc >>8);if _cdcf ==_gcfbd {_begfg =_aeae (uint (_gbec ),_begfg );};if _faad =_gebg .SetByte (_fcbe ,_ebec (_dgd ,_begfg ,_dddc ));
|
|
_faad !=nil {return _faad ;};_fcbe ++;_cfcc <<=uint (_cgeg );};};return nil ;};type Points []Point ;func _da (_fbef ,_ffe *Bitmap ,_efbg int ,_cca []byte ,_fba int )(_ead error ){const _efd ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";
|
|
var (_bdga ,_edb ,_egd ,_agbe ,_fag ,_bde ,_agf ,_cbeb int ;_bfa ,_bce ,_efae ,_ddf uint32 ;_dag ,_ebb byte ;_aad uint16 ;);_db :=make ([]byte ,4);_daf :=make ([]byte ,4);for _egd =0;_egd < _fbef .Height -1;_egd ,_agbe =_egd +2,_agbe +1{_bdga =_egd *_fbef .RowStride ;
|
|
_edb =_agbe *_ffe .RowStride ;for _fag ,_bde =0,0;_fag < _fba ;_fag ,_bde =_fag +4,_bde +1{for _agf =0;_agf < 4;_agf ++{_cbeb =_bdga +_fag +_agf ;if _cbeb <=len (_fbef .Data )-1&&_cbeb < _bdga +_fbef .RowStride {_db [_agf ]=_fbef .Data [_cbeb ];}else {_db [_agf ]=0x00;
|
|
};_cbeb =_bdga +_fbef .RowStride +_fag +_agf ;if _cbeb <=len (_fbef .Data )-1&&_cbeb < _bdga +(2*_fbef .RowStride ){_daf [_agf ]=_fbef .Data [_cbeb ];}else {_daf [_agf ]=0x00;};};_bfa =_ae .BigEndian .Uint32 (_db );_bce =_ae .BigEndian .Uint32 (_daf );
|
|
_efae =_bfa &_bce ;_efae |=_efae <<1;_ddf =_bfa |_bce ;_ddf &=_ddf <<1;_bce =_efae |_ddf ;_bce &=0xaaaaaaaa;_bfa =_bce |(_bce <<7);_dag =byte (_bfa >>24);_ebb =byte ((_bfa >>8)&0xff);_cbeb =_edb +_bde ;if _cbeb +1==len (_ffe .Data )-1||_cbeb +1>=_edb +_ffe .RowStride {if _ead =_ffe .SetByte (_cbeb ,_cca [_dag ]);
|
|
_ead !=nil {return _f .Wrapf (_ead ,_efd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_cbeb );};}else {_aad =(uint16 (_cca [_dag ])<<8)|uint16 (_cca [_ebb ]);if _ead =_ffe .setTwoBytes (_cbeb ,_aad );_ead !=nil {return _f .Wrapf (_ead ,_efd ,"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",_cbeb );
|
|
};_bde ++;};};};return nil ;};func (_bdec *byHeight )Len ()int {return len (_bdec .Values )};func (_ddac *Bitmap )centroid (_gbbd ,_fdcc []int )(Point ,error ){_cgegg :=Point {};_ddac .setPadBits (0);if len (_gbbd )==0{_gbbd =_gfa ();};if len (_fdcc )==0{_fdcc =_cega ();
|
|
};var _bdfg ,_aaaag ,_facf ,_fgae ,_dccd ,_cgdc int ;var _gbab byte ;for _dccd =0;_dccd < _ddac .Height ;_dccd ++{_ecgg :=_ddac .RowStride *_dccd ;_fgae =0;for _cgdc =0;_cgdc < _ddac .RowStride ;_cgdc ++{_gbab =_ddac .Data [_ecgg +_cgdc ];if _gbab !=0{_fgae +=_fdcc [_gbab ];
|
|
_bdfg +=_gbbd [_gbab ]+_cgdc *8*_fdcc [_gbab ];};};_facf +=_fgae ;_aaaag +=_fgae *_dccd ;};if _facf !=0{_cgegg .X =float32 (_bdfg )/float32 (_facf );_cgegg .Y =float32 (_aaaag )/float32 (_facf );};return _cgegg ,nil ;};func TstISymbol (t *_ee .T ,scale ...int )*Bitmap {_ggfb ,_fbcb :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});
|
|
_c .NoError (t ,_fbcb );return TstGetScaledSymbol (t ,_ggfb ,scale ...);};func _dcc (_gbd ,_gacge *Bitmap )(*Bitmap ,error ){if _gacge ==nil {return nil ,_f .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 _gacge ==_gbd {return _gbd ,nil ;};if _gbd ==nil {_gbd =_gacge .createTemplate ();copy (_gbd .Data ,_gacge .Data );return _gbd ,nil ;};_eecc :=_gbd .resizeImageData (_gacge );if _eecc !=nil {return nil ,_f .Wrap (_eecc ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
|
|
};_gbd .Text =_gacge .Text ;copy (_gbd .Data ,_gacge .Data );return _gbd ,nil ;};type fillSegment struct{_cegff int ;_cdcac int ;_fefg int ;_adca int ;};func _aa (_eggb *Bitmap ,_ebd ,_ge int )(*Bitmap ,error ){const _fde ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";
|
|
if _eggb ==nil {return nil ,_f .Error (_fde ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _ebd <=0||_ge <=0{return nil ,_f .Error (_fde ,"\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 _ebd ==_ge {if _ebd ==1{_gd ,_dfa :=_dcc (nil ,_eggb );if _dfa !=nil {return nil ,_f .Wrap (_dfa ,_fde ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _gd ,nil ;};if _ebd ==2||_ebd ==4||_ebd ==8{_aeb ,_af :=_bd (_eggb ,_ebd );
|
|
if _af !=nil {return nil ,_f .Wrap (_af ,_fde ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _aeb ,nil ;};};_efe :=_ebd *_eggb .Width ;_dgc :=_ge *_eggb .Height ;_eeab :=New (_efe ,_dgc );_agbc :=_eeab .RowStride ;
|
|
var (_cff ,_bdf ,_efa ,_fec ,_ddb int ;_cb byte ;_bf error ;);for _bdf =0;_bdf < _eggb .Height ;_bdf ++{_cff =_ge *_bdf *_agbc ;for _efa =0;_efa < _eggb .Width ;_efa ++{if _bbc :=_eggb .GetPixel (_efa ,_bdf );_bbc {_ddb =_ebd *_efa ;for _fec =0;_fec < _ebd ;
|
|
_fec ++{_eeab .setBit (_cff *8+_ddb +_fec );};};};for _fec =1;_fec < _ge ;_fec ++{_ged :=_cff +_fec *_agbc ;for _gde :=0;_gde < _agbc ;_gde ++{if _cb ,_bf =_eeab .GetByte (_cff +_gde );_bf !=nil {return nil ,_f .Wrapf (_bf ,_fde ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_fec );
|
|
};if _bf =_eeab .SetByte (_ged +_gde ,_cb );_bf !=nil {return nil ,_f .Wrap (_bf ,_fde ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _eeab ,nil ;};func _acab (_dfcf *Bitmap ,_egfcbf ...MorphProcess )(_gafc *Bitmap ,_dfag error ){const _dcfb ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";
|
|
if _dfcf ==nil {return nil ,_f .Error (_dcfb ,"\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 (_egfcbf )==0{return nil ,_f .Error (_dcfb ,"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 _dfag =_fdag (_egfcbf ...);
|
|
_dfag !=nil {return nil ,_f .Wrap (_dfag ,_dcfb ,"");};var _eebe ,_bebe ,_egaf int ;_gafc =_dfcf .Copy ();for _ ,_agab :=range _egfcbf {switch _agab .Operation {case MopDilation :_eebe ,_bebe =_agab .getWidthHeight ();_gafc ,_dfag =DilateBrick (nil ,_gafc ,_eebe ,_bebe );
|
|
if _dfag !=nil {return nil ,_f .Wrap (_dfag ,_dcfb ,"");};case MopErosion :_eebe ,_bebe =_agab .getWidthHeight ();_gafc ,_dfag =_dcf (nil ,_gafc ,_eebe ,_bebe );if _dfag !=nil {return nil ,_f .Wrap (_dfag ,_dcfb ,"");};case MopOpening :_eebe ,_bebe =_agab .getWidthHeight ();
|
|
_gafc ,_dfag =_dfdb (nil ,_gafc ,_eebe ,_bebe );if _dfag !=nil {return nil ,_f .Wrap (_dfag ,_dcfb ,"");};case MopClosing :_eebe ,_bebe =_agab .getWidthHeight ();_gafc ,_dfag =_gca (nil ,_gafc ,_eebe ,_bebe );if _dfag !=nil {return nil ,_f .Wrap (_dfag ,_dcfb ,"");
|
|
};case MopRankBinaryReduction :_gafc ,_dfag =_cfed (_gafc ,_agab .Arguments ...);if _dfag !=nil {return nil ,_f .Wrap (_dfag ,_dcfb ,"");};case MopReplicativeBinaryExpansion :_gafc ,_dfag =_degb (_gafc ,_agab .Arguments [0]);if _dfag !=nil {return nil ,_f .Wrap (_dfag ,_dcfb ,"");
|
|
};case MopAddBorder :_egaf =_agab .Arguments [0];_gafc ,_dfag =_gafc .AddBorder (_egaf ,0);if _dfag !=nil {return nil ,_f .Wrap (_dfag ,_dcfb ,"");};default:return nil ,_f .Error (_dcfb ,"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 _egaf > 0{_gafc ,_dfag =_gafc .RemoveBorder (_egaf );if _dfag !=nil {return nil ,_f .Wrap (_dfag ,_dcfb ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _gafc ,nil ;};func (_geaf *Bitmaps )AddBitmap (bm *Bitmap ){_geaf .Values =append (_geaf .Values ,bm )};
|
|
func _aefbe (_deda *_d .Stack ,_gaag ,_gcgbc ,_efadb ,_dcede ,_feed int ,_bbgc *_ac .Rectangle )(_fgff error ){const _ffffa ="\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 _deda ==nil {return _f .Error (_ffffa ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _bbgc ==nil {return _f .Error (_ffffa ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
|
|
};_bbgc .Min .X =_d .Min (_bbgc .Min .X ,_gaag );_bbgc .Max .X =_d .Max (_bbgc .Max .X ,_gcgbc );_bbgc .Min .Y =_d .Min (_bbgc .Min .Y ,_efadb );_bbgc .Max .Y =_d .Max (_bbgc .Max .Y ,_efadb );if !(_efadb +_dcede >=0&&_efadb +_dcede <=_feed ){return nil ;
|
|
};if _deda .Aux ==nil {return _f .Error (_ffffa ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _ggee *fillSegment ;_eeae ,_daag :=_deda .Aux .Pop ();if _daag {if _ggee ,_daag =_eeae .(*fillSegment );
|
|
!_daag {return _f .Error (_ffffa ,"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 {_ggee =&fillSegment {};
|
|
};_ggee ._cegff =_gaag ;_ggee ._cdcac =_gcgbc ;_ggee ._fefg =_efadb ;_ggee ._adca =_dcede ;_deda .Push (_ggee );return nil ;};func (_cffa *Bitmap )ClipRectangle (box *_ac .Rectangle )(_ege *Bitmap ,_faaa *_ac .Rectangle ,_ceaf error ){const _dffb ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
|
|
if box ==nil {return nil ,nil ,_f .Error (_dffb ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_aab ,_fgc :=_cffa .Width ,_cffa .Height ;_acg :=_ac .Rect (0,0,_aab ,_fgc );if !box .Overlaps (_acg ){return nil ,nil ,_f .Error (_dffb ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");
|
|
};_efde :=box .Intersect (_acg );_cdbg ,_baa :=_efde .Min .X ,_efde .Min .Y ;_cgb ,_eeg :=_efde .Dx (),_efde .Dy ();_ege =New (_cgb ,_eeg );_ege .Text =_cffa .Text ;if _ceaf =_ege .RasterOperation (0,0,_cgb ,_eeg ,PixSrc ,_cffa ,_cdbg ,_baa );_ceaf !=nil {return nil ,nil ,_f .Wrap (_ceaf ,_dffb ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
|
|
};_faaa =&_efde ;return _ege ,_faaa ,nil ;};type Point struct{X ,Y float32 ;};func _begf (_gce ,_fce *Bitmap ,_bag int ,_fac []byte ,_fgg int )(_efc error ){const _cdf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";
|
|
var (_ab ,_ea ,_faa ,_cdg ,_dfb ,_fcc ,_ec ,_ccd int ;_edc ,_cbb uint32 ;_aea ,_ccb byte ;_geg uint16 ;);_bda :=make ([]byte ,4);_eeb :=make ([]byte ,4);for _faa =0;_faa < _gce .Height -1;_faa ,_cdg =_faa +2,_cdg +1{_ab =_faa *_gce .RowStride ;_ea =_cdg *_fce .RowStride ;
|
|
for _dfb ,_fcc =0,0;_dfb < _fgg ;_dfb ,_fcc =_dfb +4,_fcc +1{for _ec =0;_ec < 4;_ec ++{_ccd =_ab +_dfb +_ec ;if _ccd <=len (_gce .Data )-1&&_ccd < _ab +_gce .RowStride {_bda [_ec ]=_gce .Data [_ccd ];}else {_bda [_ec ]=0x00;};_ccd =_ab +_gce .RowStride +_dfb +_ec ;
|
|
if _ccd <=len (_gce .Data )-1&&_ccd < _ab +(2*_gce .RowStride ){_eeb [_ec ]=_gce .Data [_ccd ];}else {_eeb [_ec ]=0x00;};};_edc =_ae .BigEndian .Uint32 (_bda );_cbb =_ae .BigEndian .Uint32 (_eeb );_cbb |=_edc ;_cbb |=_cbb <<1;_cbb &=0xaaaaaaaa;_edc =_cbb |(_cbb <<7);
|
|
_aea =byte (_edc >>24);_ccb =byte ((_edc >>8)&0xff);_ccd =_ea +_fcc ;if _ccd +1==len (_fce .Data )-1||_ccd +1>=_ea +_fce .RowStride {_fce .Data [_ccd ]=_fac [_aea ];}else {_geg =(uint16 (_fac [_aea ])<<8)|uint16 (_fac [_ccb ]);if _efc =_fce .setTwoBytes (_ccd ,_geg );
|
|
_efc !=nil {return _f .Wrapf (_efc ,_cdf ,"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",_ccd );};_fcc ++;};};};
|
|
return nil ;};func (_bbf *Bitmap )GetPixel (x ,y int )bool {_dgg :=_bbf .GetByteIndex (x ,y );_fae :=_bbf .GetBitOffset (x );_gdc :=uint (7-_fae );if _dgg > len (_bbf .Data )-1{_bc .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 ,_bbf );
|
|
return false ;};if (_bbf .Data [_dgg ]>>_gdc )&0x01>=1{return true ;};return false ;};func _faba (_acge ,_ddegf ,_ddcfc byte )byte {return (_acge &^(_ddcfc ))|(_ddegf &_ddcfc )};func (_dgag Points )Size ()int {return len (_dgag )};func TstWordBitmap (t *_ee .T ,scale ...int )*Bitmap {_fcfb :=1;
|
|
if len (scale )> 0{_fcfb =scale [0];};_agege :=3;_gcdcc :=9+7+15+2*_agege ;_accg :=5+_agege +5;_ddgd :=New (_gcdcc *_fcfb ,_accg *_fcfb );_bedd :=&Bitmaps {};var _dbbfa *int ;_agege *=_fcfb ;_dcga :=0;_dbbfa =&_dcga ;_defc :=0;_gddg :=TstDSymbol (t ,scale ...);
|
|
TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,1*_fcfb );_gddg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,_agege );_gddg =TstISymbol (t ,scale ...);TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,1*_fcfb );_gddg =TstTSymbol (t ,scale ...);
|
|
TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,_agege );_gddg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,1*_fcfb );_gddg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,1*_fcfb );_gddg =TstWSymbol (t ,scale ...);
|
|
TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,0);*_dbbfa =0;_defc =5*_fcfb +_agege ;_gddg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,1*_fcfb );_gddg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,_agege );
|
|
_gddg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,1*_fcfb );_gddg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,1*_fcfb );_gddg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,1*_fcfb );
|
|
_gddg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,1*_fcfb );_gddg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bedd ,_gddg ,_dbbfa ,_defc ,0);TstWriteSymbols (t ,_bedd ,_ddgd );return _ddgd ;};func (_bff *Bitmap )removeBorderGeneral (_fcbf ,_gacg ,_caf ,_dacg int )(*Bitmap ,error ){const _dea ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
|
|
if _fcbf < 0||_gacg < 0||_caf < 0||_dacg < 0{return nil ,_f .Error (_dea ,"\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");};_afc ,_ece :=_bff .Width ,_bff .Height ;
|
|
_efab :=_afc -_fcbf -_gacg ;_eeabe :=_ece -_caf -_dacg ;if _efab <=0{return nil ,_f .Errorf (_dea ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_efab );};if _eeabe <=0{return nil ,_f .Errorf (_dea ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_eeabe );
|
|
};_efeg :=New (_efab ,_eeabe );_efeg .Color =_bff .Color ;_ggge :=_efeg .RasterOperation (0,0,_efab ,_eeabe ,PixSrc ,_bff ,_fcbf ,_caf );if _ggge !=nil {return nil ,_f .Wrap (_ggge ,_dea ,"");};return _efeg ,nil ;};func _gca (_bcad ,_aaba *Bitmap ,_fbfc ,_cdec int )(*Bitmap ,error ){const _gcdd ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";
|
|
if _aaba ==nil {return nil ,_f .Error (_gcdd ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _fbfc < 1||_cdec < 1{return nil ,_f .Error (_gcdd ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
|
|
};if _fbfc ==1&&_cdec ==1{return _dcc (_bcad ,_aaba );};if MorphBC ==SymmetricMorphBC {_gae ,_cfcba :=_ccaf (_bcad ,_aaba ,_fbfc ,_cdec );if _cfcba !=nil {return nil ,_f .Wrap (_cfcba ,_gcdd ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");
|
|
};return _gae ,nil ;};_cbbf :=_egaa (_fbfc /2,_cdec /2);_bfdd :=8*((_cbbf +7)/8);_daba ,_eeag :=_aaba .AddBorder (_bfdd ,0);if _eeag !=nil {return nil ,_f .Wrapf (_eeag ,_gcdd ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_bfdd );
|
|
};var _efgd ,_fdfaf *Bitmap ;if _fbfc ==1||_cdec ==1{_cdbaf :=SelCreateBrick (_cdec ,_fbfc ,_cdec /2,_fbfc /2,SelHit );_efgd ,_eeag =_eeaba (nil ,_daba ,_cdbaf );if _eeag !=nil {return nil ,_f .Wrap (_eeag ,_gcdd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};}else {_cgc :=SelCreateBrick (1,_fbfc ,0,_fbfc /2,SelHit );_eefa ,_gffb :=_gcgb (nil ,_daba ,_cgc );if _gffb !=nil {return nil ,_f .Wrap (_gffb ,_gcdd ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");
|
|
};_cffe :=SelCreateBrick (_cdec ,1,_cdec /2,0,SelHit );_efgd ,_gffb =_gcgb (nil ,_eefa ,_cffe );if _gffb !=nil {return nil ,_f .Wrap (_gffb ,_gcdd ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};if _ ,_gffb =_ffded (_eefa ,_efgd ,_cgc );_gffb !=nil {return nil ,_f .Wrap (_gffb ,_gcdd ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_gffb =_ffded (_efgd ,_eefa ,_cffe );_gffb !=nil {return nil ,_f .Wrap (_gffb ,_gcdd ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
|
|
};};if _fdfaf ,_eeag =_efgd .RemoveBorder (_bfdd );_eeag !=nil {return nil ,_f .Wrap (_eeag ,_gcdd ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _bcad ==nil {return _fdfaf ,nil ;};if _ ,_eeag =_dcc (_bcad ,_fdfaf );_eeag !=nil {return nil ,_eeag ;};return _bcad ,nil ;
|
|
};func (_fdaf *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _fdaf .Copy (),nil ;};_adag ,_ceg :=_fdaf .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _ceg !=nil {return nil ,_f .Wrap (_ceg ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");
|
|
};return _adag ,nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _eabb ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_aacea ,_agcg :=p1 .Width ,p1 .Height ;_ggea ,_ceb :=p3 .Width ,p3 .Height ;
|
|
if _d .Abs (_aacea -_ggea )> maxDiffW {return false ,nil ;};if _d .Abs (_agcg -_ceb )> maxDiffH {return false ,nil ;};_eefb :=int (delX +_d .Sign (delX )*0.5);_bcdb :=int (delY +_d .Sign (delY )*0.5);var _dcba error ;_bfcf :=p1 .CreateTemplate ();if _dcba =_bfcf .RasterOperation (0,0,_aacea ,_agcg ,PixSrc ,p1 ,0,0);
|
|
_dcba !=nil {return false ,_f .Wrap (_dcba ,_eabb ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _dcba =_bfcf .RasterOperation (_eefb ,_bcdb ,_aacea ,_agcg ,PixNotSrcAndDst ,p4 ,0,0);_dcba !=nil {return false ,_f .Wrap (_dcba ,_eabb ,"\u0021p\u0034\u0020\u0026\u0020\u0074");
|
|
};if _bfcf .Zero (){return false ,nil ;};if _dcba =_bfcf .RasterOperation (_eefb ,_bcdb ,_ggea ,_ceb ,PixSrc ,p3 ,0,0);_dcba !=nil {return false ,_f .Wrap (_dcba ,_eabb ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _dcba =_bfcf .RasterOperation (0,0,_ggea ,_ceb ,PixNotSrcAndDst ,p2 ,0,0);
|
|
_dcba !=nil {return false ,_f .Wrap (_dcba ,_eabb ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _bfcf .Zero (),nil ;};func (_ddef *Bitmap )connComponentsBB (_fagf int )(_gef *Boxes ,_afa error ){const _bcdf ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";
|
|
if _fagf !=4&&_fagf !=8{return nil ,_f .Error (_bcdf ,"\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 _ddef .Zero (){return &Boxes {},nil ;
|
|
};_ddef .setPadBits (0);_dbab ,_afa :=_dcc (nil ,_ddef );if _afa !=nil {return nil ,_f .Wrap (_afa ,_bcdf ,"\u0062\u006d\u0031");};_efdd :=&_d .Stack {};_efdd .Aux =&_d .Stack {};_gef =&Boxes {};var (_aggg ,_ageg int ;_eega _ac .Point ;_ccce bool ;_deaee *_ac .Rectangle ;
|
|
);for {if _eega ,_ccce ,_afa =_dbab .nextOnPixel (_ageg ,_aggg );_afa !=nil {return nil ,_f .Wrap (_afa ,_bcdf ,"");};if !_ccce {break ;};if _deaee ,_afa =_dcbf (_dbab ,_efdd ,_eega .X ,_eega .Y ,_fagf );_afa !=nil {return nil ,_f .Wrap (_afa ,_bcdf ,"");
|
|
};if _afa =_gef .Add (_deaee );_afa !=nil {return nil ,_f .Wrap (_afa ,_bcdf ,"");};_ageg =_eega .X ;_aggg =_eega .Y ;};return _gef ,nil ;};func _beg (_ggaf *Bitmap ,_cbe int ,_gbe []byte )(_bcgd *Bitmap ,_baf error ){const _bdg ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";
|
|
if _ggaf ==nil {return nil ,_f .Error (_bdg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _cbe < 1||_cbe > 4{return nil ,_f .Error (_bdg ,"\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 _ggaf .Height <=1{return nil ,_f .Errorf (_bdg ,"\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",_ggaf .Height );
|
|
};_bcgd =New (_ggaf .Width /2,_ggaf .Height /2);if _gbe ==nil {_gbe =_dfad ();};_dgcc :=_gfc (_ggaf .RowStride ,2*_bcgd .RowStride );switch _cbe {case 1:_baf =_begf (_ggaf ,_bcgd ,_cbe ,_gbe ,_dgcc );case 2:_baf =_da (_ggaf ,_bcgd ,_cbe ,_gbe ,_dgcc );
|
|
case 3:_baf =_gbb (_ggaf ,_bcgd ,_cbe ,_gbe ,_dgcc );case 4:_baf =_eeef (_ggaf ,_bcgd ,_cbe ,_gbe ,_dgcc );};if _baf !=nil {return nil ,_baf ;};return _bcgd ,nil ;};func _dcf (_gaa ,_caeb *Bitmap ,_ebfc ,_ebgd int )(*Bitmap ,error ){const _bcfd ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";
|
|
if _caeb ==nil {return nil ,_f .Error (_bcfd ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _ebfc < 1||_ebgd < 1{return nil ,_f .Error (_bcfd ,"\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 _ebfc ==1&&_ebgd ==1{_cbfc ,_cfgaa :=_dcc (_gaa ,_caeb );if _cfgaa !=nil {return nil ,_f .Wrap (_cfgaa ,_bcfd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _cbfc ,nil ;};if _ebfc ==1||_ebgd ==1{_gdda :=SelCreateBrick (_ebgd ,_ebfc ,_ebgd /2,_ebfc /2,SelHit );_dgbc ,_egadd :=_ffded (_gaa ,_caeb ,_gdda );if _egadd !=nil {return nil ,_f .Wrap (_egadd ,_bcfd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _dgbc ,nil ;};_fcbgg :=SelCreateBrick (1,_ebfc ,0,_ebfc /2,SelHit );_gabf :=SelCreateBrick (_ebgd ,1,_ebgd /2,0,SelHit );_bfba ,_cdacd :=_ffded (nil ,_caeb ,_fcbgg );if _cdacd !=nil {return nil ,_f .Wrap (_cdacd ,_bcfd ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};_gaa ,_cdacd =_ffded (_gaa ,_bfba ,_gabf );if _cdacd !=nil {return nil ,_f .Wrap (_cdacd ,_bcfd ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _gaa ,nil ;};func (_cfa *Bitmap )GetVanillaData ()[]byte {if _cfa .Color ==Chocolate {_cfa .inverseData ();
|
|
};return _cfa .Data ;};type MorphOperation int ;func (_aac *Bitmap )SizesEqual (s *Bitmap )bool {if _aac ==s {return true ;};if _aac .Width !=s .Width ||_aac .Height !=s .Height {return false ;};return true ;};func (_agcf *ClassedPoints )Len ()int {return _agcf .IntSlice .Size ()};
|
|
func MakePixelCentroidTab8 ()[]int {return _gfa ()};func (_deb *Bitmap )String ()string {var _ggf ="\u000a";for _eegd :=0;_eegd < _deb .Height ;_eegd ++{var _gdcf string ;for _bcd :=0;_bcd < _deb .Width ;_bcd ++{_aeab :=_deb .GetPixel (_bcd ,_eegd );if _aeab {_gdcf +="\u0031";
|
|
}else {_gdcf +="\u0030";};};_ggf +=_gdcf +"\u000a";};return _ggf ;};func (_gced *ClassedPoints )XAtIndex (i int )float32 {return (*_gced .Points )[_gced .IntSlice [i ]].X };const (_bbaf shift =iota ;_gbee ;);func _cc (_bcc ,_ad *Bitmap )(_g error ){const _fd ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";
|
|
_ace :=_ad .RowStride ;_df :=_bcc .RowStride ;var (_ff byte ;_dfg uint16 ;_gb ,_eg ,_ag ,_dg ,_ccg int ;);for _ag =0;_ag < _ad .Height ;_ag ++{_gb =_ag *_ace ;_eg =2*_ag *_df ;for _dg =0;_dg < _ace ;_dg ++{_ff =_ad .Data [_gb +_dg ];_dfg =_bbga [_ff ];
|
|
_ccg =_eg +_dg *2;if _bcc .RowStride !=_ad .RowStride *2&&(_dg +1)*2> _bcc .RowStride {_g =_bcc .SetByte (_ccg ,byte (_dfg >>8));}else {_g =_bcc .setTwoBytes (_ccg ,_dfg );};if _g !=nil {return _f .Wrap (_g ,_fd ,"");};};for _dg =0;_dg < _df ;_dg ++{_ccg =_eg +_df +_dg ;
|
|
_ff =_bcc .Data [_eg +_dg ];if _g =_bcc .SetByte (_ccg ,_ff );_g !=nil {return _f .Wrapf (_g ,_fd ,"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",_eg +_dg ,_eg +_df +_dg );
|
|
};};};return nil ;};func (_gabe *Bitmap )thresholdPixelSum (_ccdg int )bool {var (_bee int ;_bccc uint8 ;_cef byte ;_caba int ;);_bgef :=_gabe .RowStride ;_dffc :=uint (_gabe .Width &0x07);if _dffc !=0{_bccc =uint8 ((0xff<<(8-_dffc ))&0xff);_bgef --;};
|
|
for _ceae :=0;_ceae < _gabe .Height ;_ceae ++{for _caba =0;_caba < _bgef ;_caba ++{_cef =_gabe .Data [_ceae *_gabe .RowStride +_caba ];_bee +=int (_fggb [_cef ]);};if _dffc !=0{_cef =_gabe .Data [_ceae *_gabe .RowStride +_caba ]&_bccc ;_bee +=int (_fggb [_cef ]);
|
|
};if _bee > _ccdg {return true ;};};return false ;};func _ggae (_ebbeb *_d .Stack )(_fdge *fillSegment ,_acde error ){const _fbcc ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _ebbeb ==nil {return nil ,_f .Error (_fbcc ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
|
|
};if _ebbeb .Aux ==nil {return nil ,_f .Error (_fbcc ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_eacd ,_ffdb :=_ebbeb .Pop ();if !_ffdb {return nil ,nil ;};_bbeae ,_ffdb :=_eacd .(*fillSegment );
|
|
if !_ffdb {return nil ,_f .Error (_fbcc ,"\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");};_fdge =&fillSegment {_bbeae ._cegff ,_bbeae ._cdcac ,_bbeae ._fefg +_bbeae ._adca ,_bbeae ._adca };
|
|
_ebbeb .Aux .Push (_bbeae );return _fdge ,nil ;};func _dgb ()(_aff [256]uint32 ){for _bad :=0;_bad < 256;_bad ++{if _bad &0x01!=0{_aff [_bad ]|=0xf;};if _bad &0x02!=0{_aff [_bad ]|=0xf0;};if _bad &0x04!=0{_aff [_bad ]|=0xf00;};if _bad &0x08!=0{_aff [_bad ]|=0xf000;
|
|
};if _bad &0x10!=0{_aff [_bad ]|=0xf0000;};if _bad &0x20!=0{_aff [_bad ]|=0xf00000;};if _bad &0x40!=0{_aff [_bad ]|=0xf000000;};if _bad &0x80!=0{_aff [_bad ]|=0xf0000000;};};return _aff ;};type ClassedPoints struct{*Points ;_d .IntSlice ;_cbefc func (_cee ,_eeca int )bool ;
|
|
};func TstGetScaledSymbol (t *_ee .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_dadf ,_ecag :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_c .NoError (t ,_ecag );
|
|
return _dadf ;};func (_bdag *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_ffae *Bitmaps ,_acbd *Boxes ,_ggef error ){const _adga ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
|
|
if _bdag ==nil {return nil ,nil ,_f .Error (_adga ,"\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 ,_f .Error (_adga ,"\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 _bdag .Zero (){_acbd =&Boxes {};_ffae =&Bitmaps {};return _ffae ,_acbd ,nil ;};switch components {case ComponentConn :_ffae =&Bitmaps {};if _acbd ,_ggef =_bdag .ConnComponents (_ffae ,8);_ggef !=nil {return nil ,nil ,_f .Wrap (_ggef ,_adga ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};case ComponentCharacters :_bgege ,_bbfa :=MorphSequence (_bdag ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _bbfa !=nil {return nil ,nil ,_f .Wrap (_bbfa ,_adga ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};if _bc .Log .IsLogLevel (_bc .LogLevelTrace ){_bc .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",_bgege .String ());
|
|
};_badc :=&Bitmaps {};_acbd ,_bbfa =_bgege .ConnComponents (_badc ,8);if _bbfa !=nil {return nil ,nil ,_f .Wrap (_bbfa ,_adga ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};if _bc .Log .IsLogLevel (_bc .LogLevelTrace ){_bc .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",_badc .String ());
|
|
};if _ffae ,_bbfa =_badc .ClipToBitmap (_bdag );_bbfa !=nil {return nil ,nil ,_f .Wrap (_bbfa ,_adga ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_abfe :=1;
|
|
var _eceg *Bitmap ;switch {case _bdag .XResolution <=200:_eceg =_bdag ;case _bdag .XResolution <=400:_abfe =2;_eceg ,_ggef =_cfed (_bdag ,1,0,0,0);if _ggef !=nil {return nil ,nil ,_f .Wrap (_ggef ,_adga ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
|
|
};default:_abfe =4;_eceg ,_ggef =_cfed (_bdag ,1,1,0,0);if _ggef !=nil {return nil ,nil ,_f .Wrap (_ggef ,_adga ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
|
|
};};_adeb ,_ ,_bffa :=_eada (_eceg );if _bffa !=nil {return nil ,nil ,_f .Wrap (_bffa ,_adga ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_gggb ,_bffa :=_degb (_adeb ,_abfe );if _bffa !=nil {return nil ,nil ,_f .Wrap (_bffa ,_adga ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
|
|
};_ebf :=&Bitmaps {};if _acbd ,_bffa =_gggb .ConnComponents (_ebf ,4);_bffa !=nil {return nil ,nil ,_f .Wrap (_bffa ,_adga ,"\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 _ffae ,_bffa =_ebf .ClipToBitmap (_bdag );_bffa !=nil {return nil ,nil ,_f .Wrap (_bffa ,_adga ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_ffae ,_ggef =_ffae .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
|
|
if _ggef !=nil {return nil ,nil ,_f .Wrap (_ggef ,_adga ,"");};_acbd ,_ggef =_acbd .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _ggef !=nil {return nil ,nil ,_f .Wrap (_ggef ,_adga ,"");};return _ffae ,_acbd ,nil ;};func (_afbd *Bitmap )setTwoBytes (_dacc int ,_acfc uint16 )error {if _dacc +1> len (_afbd .Data )-1{return _f .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",_dacc );
|
|
};_afbd .Data [_dacc ]=byte ((_acfc &0xff00)>>8);_afbd .Data [_dacc +1]=byte (_acfc &0xff);return nil ;};func _ef (_gg ,_bcg *Bitmap )(_agb error ){const _efb ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";
|
|
_cd :=_bcg .RowStride ;_fg :=_gg .RowStride ;_dd :=_bcg .RowStride *4-_gg .RowStride ;var (_eb ,_bg byte ;_bcf uint32 ;_gf ,_dde ,_egg ,_fc ,_agc ,_ed ,_cdb int ;);for _egg =0;_egg < _bcg .Height ;_egg ++{_gf =_egg *_cd ;_dde =4*_egg *_fg ;for _fc =0;_fc < _cd ;
|
|
_fc ++{_eb =_bcg .Data [_gf +_fc ];_bcf =_bggbd [_eb ];_ed =_dde +_fc *4;if _dd !=0&&(_fc +1)*4> _gg .RowStride {for _agc =_dd ;_agc > 0;_agc --{_bg =byte ((_bcf >>uint (_agc *8))&0xff);_cdb =_ed +(_dd -_agc );if _agb =_gg .SetByte (_cdb ,_bg );_agb !=nil {return _f .Wrapf (_agb ,_efb ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_agc );
|
|
};};}else if _agb =_gg .setFourBytes (_ed ,_bcf );_agb !=nil {return _f .Wrap (_agb ,_efb ,"");};if _agb =_gg .setFourBytes (_dde +_fc *4,_bggbd [_bcg .Data [_gf +_fc ]]);_agb !=nil {return _f .Wrap (_agb ,_efb ,"");};};for _agc =1;_agc < 4;_agc ++{for _fc =0;
|
|
_fc < _fg ;_fc ++{if _agb =_gg .SetByte (_dde +_agc *_fg +_fc ,_gg .Data [_dde +_fc ]);_agb !=nil {return _f .Wrapf (_agb ,_efb ,"\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",_agc ,_fc );
|
|
};};};};return nil ;};func (_dbfg *Selection )setOrigin (_afca ,_cgfg int ){_dbfg .Cy ,_dbfg .Cx =_afca ,_cgfg };func TstFrameBitmap ()*Bitmap {return _cdbbf .Copy ()};func (_cgg *Bitmap )SetByte (index int ,v byte )error {if index > len (_cgg .Data )-1||index < 0{return _f .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 );
|
|
};_cgg .Data [index ]=v ;return nil ;};func New (width ,height int )*Bitmap {_dc :=_bbg (width ,height );_dc .Data =make ([]byte ,height *_dc .RowStride );return _dc ;};func (_dge *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _dge .addBorderGeneral (left ,right ,top ,bot ,val );
|
|
};var (_bbga =_fecc ();_bggbd =_dgb ();_deeee =_be (););var _ddfg =[]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 _dffg (_fbag ,_dagg ,_ggbe *Bitmap )(*Bitmap ,error ){const _efgg ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _dagg ==nil {return nil ,_f .Error (_efgg ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ggbe ==nil {return nil ,_f .Error (_efgg ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
|
|
};if _fbag ==_ggbe {return nil ,_f .Error (_efgg ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_dagg .SizesEqual (_ggbe ){_bc .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",_efgg );
|
|
};var _bagg error ;if _fbag ,_bagg =_dcc (_fbag ,_dagg );_bagg !=nil {return nil ,_f .Wrap (_bagg ,_efgg ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _bagg =_fbag .RasterOperation (0,0,_fbag .Width ,_fbag .Height ,PixSrcXorDst ,_ggbe ,0,0);
|
|
_bagg !=nil {return nil ,_f .Wrap (_bagg ,_efgg ,"");};return _fbag ,nil ;};func Extract (roi _ac .Rectangle ,src *Bitmap )(*Bitmap ,error ){_adaf :=New (roi .Dx (),roi .Dy ());_fcfd :=roi .Min .X &0x07;_ebeg :=8-_fcfd ;_eegg :=uint (8-_adaf .Width &0x07);
|
|
_dgeb :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_eeeff :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_bfde :=_adaf .RowStride ==_eeeff +1-_dgeb ;var _dffd int ;for _gaca :=roi .Min .Y ;_gaca < roi .Max .Y ;_gaca ++{_fdb :=_dgeb ;_badd :=_dffd ;
|
|
switch {case _dgeb ==_eeeff :_eggef ,_gggef :=src .GetByte (_fdb );if _gggef !=nil {return nil ,_gggef ;};_eggef <<=uint (_fcfd );_gggef =_adaf .SetByte (_badd ,_aeae (_eegg ,_eggef ));if _gggef !=nil {return nil ,_gggef ;};case _fcfd ==0:for _gbfd :=_dgeb ;
|
|
_gbfd <=_eeeff ;_gbfd ++{_feff ,_bcfbf :=src .GetByte (_fdb );if _bcfbf !=nil {return nil ,_bcfbf ;};_fdb ++;if _gbfd ==_eeeff &&_bfde {_feff =_aeae (_eegg ,_feff );};_bcfbf =_adaf .SetByte (_badd ,_feff );if _bcfbf !=nil {return nil ,_bcfbf ;};_badd ++;
|
|
};default:_cedg :=_gedd (src ,_adaf ,uint (_fcfd ),uint (_ebeg ),_eegg ,_dgeb ,_eeeff ,_bfde ,_fdb ,_badd );if _cedg !=nil {return nil ,_cedg ;};};_dgeb +=src .RowStride ;_eeeff +=src .RowStride ;_dffd +=_adaf .RowStride ;};return _adaf ,nil ;};func _bdcd (_fcaf ,_ccae int ,_fbdf string )*Selection {_edef :=&Selection {Height :_fcaf ,Width :_ccae ,Name :_fbdf };
|
|
_edef .Data =make ([][]SelectionValue ,_fcaf );for _cfece :=0;_cfece < _fcaf ;_cfece ++{_edef .Data [_cfece ]=make ([]SelectionValue ,_ccae );};return _edef ;};type shift int ;var (_cdbbf *Bitmap ;_dbcd *Bitmap ;);func _dfdb (_ddba ,_geef *Bitmap ,_fcbcd ,_ffda int )(*Bitmap ,error ){const _abac ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";
|
|
if _geef ==nil {return nil ,_f .Error (_abac ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _fcbcd < 1&&_ffda < 1{return nil ,_f .Error (_abac ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");
|
|
};if _fcbcd ==1&&_ffda ==1{return _geef .Copy (),nil ;};if _fcbcd ==1||_ffda ==1{var _bccg error ;_dgda :=SelCreateBrick (_ffda ,_fcbcd ,_ffda /2,_fcbcd /2,SelHit );_ddba ,_bccg =_cdda (_ddba ,_geef ,_dgda );if _bccg !=nil {return nil ,_f .Wrap (_bccg ,_abac ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _ddba ,nil ;};_bdcc :=SelCreateBrick (1,_fcbcd ,0,_fcbcd /2,SelHit );_ecb :=SelCreateBrick (_ffda ,1,_ffda /2,0,SelHit );_afaa ,_gcfg :=_ffded (nil ,_geef ,_bdcc );if _gcfg !=nil {return nil ,_f .Wrap (_gcfg ,_abac ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};_ddba ,_gcfg =_ffded (_ddba ,_afaa ,_ecb );if _gcfg !=nil {return nil ,_f .Wrap (_gcfg ,_abac ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_gcfg =_gcgb (_afaa ,_ddba ,_bdcc );if _gcfg !=nil {return nil ,_f .Wrap (_gcfg ,_abac ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};_ ,_gcfg =_gcgb (_ddba ,_afaa ,_ecb );if _gcfg !=nil {return nil ,_f .Wrap (_gcfg ,_abac ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _ddba ,nil ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _gcgb (d ,s ,sel )};
|
|
func (_fbed Points )XSorter ()func (_bbadd ,_bedfg int )bool {return func (_bagbe ,_fbfda int )bool {return _fbed [_bagbe ].X < _fbed [_fbfda ].X };};func (_bea *Bitmap )connComponentsBitmapsBB (_cdgbe *Bitmaps ,_fdcd int )(_dgdca *Boxes ,_bfdfd error ){const _gec ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";
|
|
if _fdcd !=4&&_fdcd !=8{return nil ,_f .Error (_gec ,"\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 _cdgbe ==nil {return nil ,_f .Error (_gec ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
|
|
};if len (_cdgbe .Values )> 0{return nil ,_f .Error (_gec ,"\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 _bea .Zero (){return &Boxes {},nil ;};
|
|
var (_cecc ,_cbca ,_fdcb ,_fbfd *Bitmap ;);_bea .setPadBits (0);if _cecc ,_bfdfd =_dcc (nil ,_bea );_bfdfd !=nil {return nil ,_f .Wrap (_bfdfd ,_gec ,"\u0062\u006d\u0031");};if _cbca ,_bfdfd =_dcc (nil ,_bea );_bfdfd !=nil {return nil ,_f .Wrap (_bfdfd ,_gec ,"\u0062\u006d\u0032");
|
|
};_ageba :=&_d .Stack {};_ageba .Aux =&_d .Stack {};_dgdca =&Boxes {};var (_dbb ,_bdcabf int ;_adba _ac .Point ;_cdac bool ;_efcb *_ac .Rectangle ;);for {if _adba ,_cdac ,_bfdfd =_cecc .nextOnPixel (_dbb ,_bdcabf );_bfdfd !=nil {return nil ,_f .Wrap (_bfdfd ,_gec ,"");
|
|
};if !_cdac {break ;};if _efcb ,_bfdfd =_dcbf (_cecc ,_ageba ,_adba .X ,_adba .Y ,_fdcd );_bfdfd !=nil {return nil ,_f .Wrap (_bfdfd ,_gec ,"");};if _bfdfd =_dgdca .Add (_efcb );_bfdfd !=nil {return nil ,_f .Wrap (_bfdfd ,_gec ,"");};if _fdcb ,_bfdfd =_cecc .clipRectangle (_efcb ,nil );
|
|
_bfdfd !=nil {return nil ,_f .Wrap (_bfdfd ,_gec ,"\u0062\u006d\u0033");};if _fbfd ,_bfdfd =_cbca .clipRectangle (_efcb ,nil );_bfdfd !=nil {return nil ,_f .Wrap (_bfdfd ,_gec ,"\u0062\u006d\u0034");};if _ ,_bfdfd =_dffg (_fdcb ,_fdcb ,_fbfd );_bfdfd !=nil {return nil ,_f .Wrap (_bfdfd ,_gec ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");
|
|
};if _bfdfd =_cbca .RasterOperation (_efcb .Min .X ,_efcb .Min .Y ,_efcb .Dx (),_efcb .Dy (),PixSrcXorDst ,_fdcb ,0,0);_bfdfd !=nil {return nil ,_f .Wrap (_bfdfd ,_gec ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");
|
|
};_cdgbe .AddBitmap (_fdcb );_dbb =_adba .X ;_bdcabf =_adba .Y ;};_cdgbe .Boxes =*_dgdca ;return _dgdca ,nil ;};func (_dgca *Selection )findMaxTranslations ()(_cagff ,_ffeag ,_dfaeg ,_abb int ){for _cdcc :=0;_cdcc < _dgca .Height ;_cdcc ++{for _gaebg :=0;
|
|
_gaebg < _dgca .Width ;_gaebg ++{if _dgca .Data [_cdcc ][_gaebg ]==SelHit {_cagff =_egaa (_cagff ,_dgca .Cx -_gaebg );_ffeag =_egaa (_ffeag ,_dgca .Cy -_cdcc );_dfaeg =_egaa (_dfaeg ,_gaebg -_dgca .Cx );_abb =_egaa (_abb ,_cdcc -_dgca .Cy );};};};return _cagff ,_ffeag ,_dfaeg ,_abb ;
|
|
};func (_gbgd *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _afffd (_gbgd ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func TstRSymbol (t *_ee .T ,scale ...int )*Bitmap {_fdfg ,_gdegd :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});
|
|
_c .NoError (t ,_gdegd );return TstGetScaledSymbol (t ,_fdfg ,scale ...);};func _gfc (_daec ,_dege int )int {if _daec < _dege {return _daec ;};return _dege ;};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _afffd (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
|
|
};func (_aeff *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_bfd bool ,_dcd error ){const _dee ="\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 =_cega ();
|
|
};_fdd :=_aeff .Width >>3;_gdec :=_aeff .Width &7;_cag :=byte (0xff<<uint (8-_gdec ));var (_gcfb ,_dcda ,_fedc ,_fga int ;_bcfb byte ;);for _gcfb =0;_gcfb < _aeff .Height ;_gcfb ++{_fedc =_aeff .RowStride *_gcfb ;for _dcda =0;_dcda < _fdd ;_dcda ++{_bcfb ,_dcd =_aeff .GetByte (_fedc +_dcda );
|
|
if _dcd !=nil {return false ,_f .Wrap (_dcd ,_dee ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_fga +=tab8 [_bcfb ];};if _gdec !=0{_bcfb ,_dcd =_aeff .GetByte (_fedc +_dcda );if _dcd !=nil {return false ,_f .Wrap (_dcd ,_dee ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");
|
|
};_bcfb &=_cag ;_fga +=tab8 [_bcfb ];};if _fga > thresh {return true ,nil ;};};return _bfd ,nil ;};func (_gbed *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _bgde ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";
|
|
if _cgba :=_gbed .validateIntSlice ();_cgba !=nil {return nil ,_f .Wrap (_cgba ,_bgde ,"");};if _gbed .IntSlice .Size ()==0{return nil ,_f .Error (_bgde ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");
|
|
};_gbed .SortByY ();var (_ddgea []*ClassedPoints ;_cafb int ;);_gcee :=-1;var _baeac *ClassedPoints ;for _aebd :=0;_aebd < len (_gbed .IntSlice );_aebd ++{_cafb =int (_gbed .YAtIndex (_aebd ));if _cafb !=_gcee {_baeac =&ClassedPoints {Points :_gbed .Points };
|
|
_gcee =_cafb ;_ddgea =append (_ddgea ,_baeac );};_baeac .IntSlice =append (_baeac .IntSlice ,_gbed .IntSlice [_aebd ]);};for _ ,_bdfc :=range _ddgea {_bdfc .SortByX ();};return _ddgea ,nil ;};func _ffccf (_fdccf ,_cbcg ,_bdce *Bitmap ,_fdcdf int )(*Bitmap ,error ){const _gccc ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";
|
|
if _cbcg ==nil {return nil ,_f .Error (_gccc ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _bdce ==nil {return nil ,_f .Error (_gccc ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
|
|
};if _fdcdf !=4&&_fdcdf !=8{return nil ,_f .Error (_gccc ,"\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 _bgcdcf error ;
|
|
_fdccf ,_bgcdcf =_dcc (_fdccf ,_cbcg );if _bgcdcf !=nil {return nil ,_f .Wrap (_bgcdcf ,_gccc ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_dbec :=_cbcg .createTemplate ();_bdce .setPadBits (0);for _bccad :=0;
|
|
_bccad < _fdefa ;_bccad ++{_dbec ,_bgcdcf =_dcc (_dbec ,_fdccf );if _bgcdcf !=nil {return nil ,_f .Wrapf (_bgcdcf ,_gccc ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_bccad );};if _bgcdcf =_gbdfg (_fdccf ,_bdce ,_fdcdf );
|
|
_bgcdcf !=nil {return nil ,_f .Wrapf (_bgcdcf ,_gccc ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_bccad );};if _dbec .Equals (_fdccf ){break ;};};return _fdccf ,nil ;};func (_bcgg *Bitmaps )SortByWidth (){_dbbfb :=(*byWidth )(_bcgg );
|
|
_fbe .Sort (_dbbfb )};func (_abd *Bitmap )clipRectangle (_abe ,_geed *_ac .Rectangle )(_fccg *Bitmap ,_egfc error ){const _ddd ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _abe ==nil {return nil ,_f .Error (_ddd ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");
|
|
};_dgcf ,_aece :=_abd .Width ,_abd .Height ;_bagc ,_egfc :=ClipBoxToRectangle (_abe ,_dgcf ,_aece );if _egfc !=nil {_bc .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",_egfc );
|
|
return nil ,nil ;};_eade ,_ggc :=_bagc .Min .X ,_bagc .Min .Y ;_gcfbb ,_gge :=_bagc .Max .X -_bagc .Min .X ,_bagc .Max .Y -_bagc .Min .Y ;_fccg =New (_gcfbb ,_gge );_fccg .Text =_abd .Text ;if _egfc =_fccg .RasterOperation (0,0,_gcfbb ,_gge ,PixSrc ,_abd ,_eade ,_ggc );
|
|
_egfc !=nil {return nil ,_f .Wrap (_egfc ,_ddd ,"");};if _geed !=nil {*_geed =*_bagc ;};return _fccg ,nil ;};func TstWordBitmapWithSpaces (t *_ee .T ,scale ...int )*Bitmap {_gcfd :=1;if len (scale )> 0{_gcfd =scale [0];};_bcdeb :=3;_afcb :=9+7+15+2*_bcdeb +2*_bcdeb ;
|
|
_dbed :=5+_bcdeb +5+2*_bcdeb ;_ebegg :=New (_afcb *_gcfd ,_dbed *_gcfd );_ebcgb :=&Bitmaps {};var _fedcc *int ;_bcdeb *=_gcfd ;_dcece :=_bcdeb ;_fedcc =&_dcece ;_cddg :=_bcdeb ;_afccc :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,1*_gcfd );
|
|
_afccc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,_bcdeb );_afccc =TstISymbol (t ,scale ...);TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,1*_gcfd );_afccc =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,_bcdeb );
|
|
_afccc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,1*_gcfd );_afccc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,1*_gcfd );_afccc =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,0);
|
|
*_fedcc =_bcdeb ;_cddg =5*_gcfd +_bcdeb ;_afccc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,1*_gcfd );_afccc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,_bcdeb );_afccc =TstNSymbol (t ,scale ...);
|
|
TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,1*_gcfd );_afccc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,1*_gcfd );_afccc =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,1*_gcfd );_afccc =TstESymbol (t ,scale ...);
|
|
TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,1*_gcfd );_afccc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ebcgb ,_afccc ,_fedcc ,_cddg ,0);TstWriteSymbols (t ,_ebcgb ,_ebegg );return _ebegg ;};func (_fgeeb *BitmapsArray )AddBitmaps (bm *Bitmaps ){_fgeeb .Values =append (_fgeeb .Values ,bm )};
|
|
func _ddea (_dgef ,_effc *Bitmap ,_gcef ,_ggadf int )(*Bitmap ,error ){const _ffde ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _effc ==nil {_bc .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 ,_f .Error (_ffde ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _gcef < 1||_ggadf < 1{return nil ,_f .Error (_ffde ,"\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 _gcef ==1&&_ggadf ==1{_gdgg ,_fdbd :=_dcc (_dgef ,_effc );if _fdbd !=nil {return nil ,_f .Wrap (_fdbd ,_ffde ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _gdgg ,nil ;};if _gcef ==1||_ggadf ==1{_fbfgg :=SelCreateBrick (_ggadf ,_gcef ,_ggadf /2,_gcef /2,SelHit );_adef ,_bceg :=_gcgb (_dgef ,_effc ,_fbfgg );if _bceg !=nil {return nil ,_f .Wrap (_bceg ,_ffde ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _adef ,nil ;};_bfad :=SelCreateBrick (1,_gcef ,0,_gcef /2,SelHit );_fgdf :=SelCreateBrick (_ggadf ,1,_ggadf /2,0,SelHit );_ffeg ,_dabb :=_gcgb (nil ,_effc ,_bfad );if _dabb !=nil {return nil ,_f .Wrap (_dabb ,_ffde ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};_dgef ,_dabb =_gcgb (_dgef ,_ffeg ,_fgdf );if _dabb !=nil {return nil ,_f .Wrap (_dabb ,_ffde ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _dgef ,nil ;};func TstPSymbol (t *_ee .T )*Bitmap {t .Helper ();_bafbf :=New (5,8);
|
|
_c .NoError (t ,_bafbf .SetPixel (0,0,1));_c .NoError (t ,_bafbf .SetPixel (1,0,1));_c .NoError (t ,_bafbf .SetPixel (2,0,1));_c .NoError (t ,_bafbf .SetPixel (3,0,1));_c .NoError (t ,_bafbf .SetPixel (4,1,1));_c .NoError (t ,_bafbf .SetPixel (0,1,1));
|
|
_c .NoError (t ,_bafbf .SetPixel (4,2,1));_c .NoError (t ,_bafbf .SetPixel (0,2,1));_c .NoError (t ,_bafbf .SetPixel (4,3,1));_c .NoError (t ,_bafbf .SetPixel (0,3,1));_c .NoError (t ,_bafbf .SetPixel (0,4,1));_c .NoError (t ,_bafbf .SetPixel (1,4,1));
|
|
_c .NoError (t ,_bafbf .SetPixel (2,4,1));_c .NoError (t ,_bafbf .SetPixel (3,4,1));_c .NoError (t ,_bafbf .SetPixel (0,5,1));_c .NoError (t ,_bafbf .SetPixel (0,6,1));_c .NoError (t ,_bafbf .SetPixel (0,7,1));return _bafbf ;};func TstImageBitmap ()*Bitmap {return _dbcd .Copy ()};
|
|
type SelectionValue int ;func Centroids (bms []*Bitmap )(*Points ,error ){_gbeg :=make ([]Point ,len (bms ));_ccdag :=_gfa ();_geba :=_cega ();var _dgdb error ;for _abgg ,_daaa :=range bms {_gbeg [_abgg ],_dgdb =_daaa .centroid (_ccdag ,_geba );if _dgdb !=nil {return nil ,_dgdb ;
|
|
};};_bfcb :=Points (_gbeg );return &_bfcb ,nil ;};var _bagcc =[5]int {1,2,3,0,4};var _ _fbe .Interface =&ClassedPoints {};const _fdefa =5000;func _bbg (_fafc ,_ddbg int )*Bitmap {return &Bitmap {Width :_fafc ,Height :_ddbg ,RowStride :(_fafc +7)>>3};};
|
|
func (_ebgc *Bitmap )SetDefaultPixel (){for _cba :=range _ebgc .Data {_ebgc .Data [_cba ]=byte (0xff);};};func Rect (x ,y ,w ,h int )(*_ac .Rectangle ,error ){const _dfbf ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;
|
|
x =0;if w <=0{return nil ,_f .Errorf (_dfbf ,"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 ,_f .Error (_dfbf ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");
|
|
};};_gccg :=_ac .Rect (x ,y ,x +w ,y +h );return &_gccg ,nil ;};func (_gab *Bitmap )SetPadBits (value int ){_gab .setPadBits (value )};func (_dafd *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _aaebc ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";
|
|
if _dafd ==nil {return nil ,_f .Error (_aaebc ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_f .Error (_aaebc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
|
|
};_ecef :=len (_dafd .Values );_gbdg :=&Bitmaps {Values :make ([]*Bitmap ,_ecef ),Boxes :make ([]*_ac .Rectangle ,_ecef )};var (_edbc ,_begbg *Bitmap ;_deff *_ac .Rectangle ;_dgcb error ;);for _cbbe :=0;_cbbe < _ecef ;_cbbe ++{if _edbc ,_dgcb =_dafd .GetBitmap (_cbbe );
|
|
_dgcb !=nil {return nil ,_f .Wrap (_dgcb ,_aaebc ,"");};if _deff ,_dgcb =_dafd .GetBox (_cbbe );_dgcb !=nil {return nil ,_f .Wrap (_dgcb ,_aaebc ,"");};if _begbg ,_dgcb =s .clipRectangle (_deff ,nil );_dgcb !=nil {return nil ,_f .Wrap (_dgcb ,_aaebc ,"");
|
|
};if _begbg ,_dgcb =_begbg .And (_edbc );_dgcb !=nil {return nil ,_f .Wrap (_dgcb ,_aaebc ,"");};_gbdg .Values [_cbbe ]=_begbg ;_gbdg .Boxes [_cbbe ]=_deff ;};return _gbdg ,nil ;};func (_cbcf *Bitmap )Copy ()*Bitmap {_dad :=make ([]byte ,len (_cbcf .Data ));
|
|
copy (_dad ,_cbcf .Data );return &Bitmap {Width :_cbcf .Width ,Height :_cbcf .Height ,RowStride :_cbcf .RowStride ,Data :_dad ,Color :_cbcf .Color ,Text :_cbcf .Text ,BitmapNumber :_cbcf .BitmapNumber ,Special :_cbcf .Special };};func _afga (_dgad int )int {if _dgad < 0{return -_dgad ;
|
|
};return _dgad ;};func TstOSymbol (t *_ee .T ,scale ...int )*Bitmap {_fffd ,_agga :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_c .NoError (t ,_agga );return TstGetScaledSymbol (t ,_fffd ,scale ...);};type SizeComparison int ;func _cgda (_bffg ,_bdgd *Bitmap ,_acca CombinationOperator )*Bitmap {_afde :=New (_bffg .Width ,_bffg .Height );
|
|
for _ccbf :=0;_ccbf < len (_afde .Data );_ccbf ++{_afde .Data [_ccbf ]=_ebec (_bffg .Data [_ccbf ],_bdgd .Data [_ccbf ],_acca );};return _afde ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _ddea (d ,s ,hSize ,vSize )};func _bcfdb (_dfae *Bitmap ,_ecaff ,_cece ,_gfgbc ,_bdea int ,_gbade RasterOperator ,_eeeg *Bitmap ,_cafdb ,_bac int )error {var (_fgef bool ;
|
|
_aecb bool ;_fgee int ;_eecb int ;_gbadf int ;_fegc bool ;_beda byte ;_cbcd int ;_cddc int ;_eefe int ;_ebea ,_cebc int ;);_fdfff :=8-(_ecaff &7);_fgda :=_dece [_fdfff ];_acfg :=_dfae .RowStride *_cece +(_ecaff >>3);_ceccg :=_eeeg .RowStride *_bac +(_cafdb >>3);
|
|
if _gfgbc < _fdfff {_fgef =true ;_fgda &=_agcb [8-_fdfff +_gfgbc ];};if !_fgef {_fgee =(_gfgbc -_fdfff )>>3;if _fgee > 0{_aecb =true ;_eecb =_acfg +1;_gbadf =_ceccg +1;};};_cbcd =(_ecaff +_gfgbc )&7;if !(_fgef ||_cbcd ==0){_fegc =true ;_beda =_agcb [_cbcd ];
|
|
_cddc =_acfg +1+_fgee ;_eefe =_ceccg +1+_fgee ;};switch _gbade {case PixSrc :for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_acfg ]=_faba (_dfae .Data [_acfg ],_eeeg .Data [_ceccg ],_fgda );_acfg +=_dfae .RowStride ;_ceccg +=_eeeg .RowStride ;};if _aecb {for _ebea =0;
|
|
_ebea < _bdea ;_ebea ++{for _cebc =0;_cebc < _fgee ;_cebc ++{_dfae .Data [_eecb +_cebc ]=_eeeg .Data [_gbadf +_cebc ];};_eecb +=_dfae .RowStride ;_gbadf +=_eeeg .RowStride ;};};if _fegc {for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_cddc ]=_faba (_dfae .Data [_cddc ],_eeeg .Data [_eefe ],_beda );
|
|
_cddc +=_dfae .RowStride ;_eefe +=_eeeg .RowStride ;};};case PixNotSrc :for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_acfg ]=_faba (_dfae .Data [_acfg ],^_eeeg .Data [_ceccg ],_fgda );_acfg +=_dfae .RowStride ;_ceccg +=_eeeg .RowStride ;};if _aecb {for _ebea =0;
|
|
_ebea < _bdea ;_ebea ++{for _cebc =0;_cebc < _fgee ;_cebc ++{_dfae .Data [_eecb +_cebc ]=^_eeeg .Data [_gbadf +_cebc ];};_eecb +=_dfae .RowStride ;_gbadf +=_eeeg .RowStride ;};};if _fegc {for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_cddc ]=_faba (_dfae .Data [_cddc ],^_eeeg .Data [_eefe ],_beda );
|
|
_cddc +=_dfae .RowStride ;_eefe +=_eeeg .RowStride ;};};case PixSrcOrDst :for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_acfg ]=_faba (_dfae .Data [_acfg ],_eeeg .Data [_ceccg ]|_dfae .Data [_acfg ],_fgda );_acfg +=_dfae .RowStride ;_ceccg +=_eeeg .RowStride ;
|
|
};if _aecb {for _ebea =0;_ebea < _bdea ;_ebea ++{for _cebc =0;_cebc < _fgee ;_cebc ++{_dfae .Data [_eecb +_cebc ]|=_eeeg .Data [_gbadf +_cebc ];};_eecb +=_dfae .RowStride ;_gbadf +=_eeeg .RowStride ;};};if _fegc {for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_cddc ]=_faba (_dfae .Data [_cddc ],_eeeg .Data [_eefe ]|_dfae .Data [_cddc ],_beda );
|
|
_cddc +=_dfae .RowStride ;_eefe +=_eeeg .RowStride ;};};case PixSrcAndDst :for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_acfg ]=_faba (_dfae .Data [_acfg ],_eeeg .Data [_ceccg ]&_dfae .Data [_acfg ],_fgda );_acfg +=_dfae .RowStride ;_ceccg +=_eeeg .RowStride ;
|
|
};if _aecb {for _ebea =0;_ebea < _bdea ;_ebea ++{for _cebc =0;_cebc < _fgee ;_cebc ++{_dfae .Data [_eecb +_cebc ]&=_eeeg .Data [_gbadf +_cebc ];};_eecb +=_dfae .RowStride ;_gbadf +=_eeeg .RowStride ;};};if _fegc {for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_cddc ]=_faba (_dfae .Data [_cddc ],_eeeg .Data [_eefe ]&_dfae .Data [_cddc ],_beda );
|
|
_cddc +=_dfae .RowStride ;_eefe +=_eeeg .RowStride ;};};case PixSrcXorDst :for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_acfg ]=_faba (_dfae .Data [_acfg ],_eeeg .Data [_ceccg ]^_dfae .Data [_acfg ],_fgda );_acfg +=_dfae .RowStride ;_ceccg +=_eeeg .RowStride ;
|
|
};if _aecb {for _ebea =0;_ebea < _bdea ;_ebea ++{for _cebc =0;_cebc < _fgee ;_cebc ++{_dfae .Data [_eecb +_cebc ]^=_eeeg .Data [_gbadf +_cebc ];};_eecb +=_dfae .RowStride ;_gbadf +=_eeeg .RowStride ;};};if _fegc {for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_cddc ]=_faba (_dfae .Data [_cddc ],_eeeg .Data [_eefe ]^_dfae .Data [_cddc ],_beda );
|
|
_cddc +=_dfae .RowStride ;_eefe +=_eeeg .RowStride ;};};case PixNotSrcOrDst :for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_acfg ]=_faba (_dfae .Data [_acfg ],^(_eeeg .Data [_ceccg ])|_dfae .Data [_acfg ],_fgda );_acfg +=_dfae .RowStride ;_ceccg +=_eeeg .RowStride ;
|
|
};if _aecb {for _ebea =0;_ebea < _bdea ;_ebea ++{for _cebc =0;_cebc < _fgee ;_cebc ++{_dfae .Data [_eecb +_cebc ]|=^(_eeeg .Data [_gbadf +_cebc ]);};_eecb +=_dfae .RowStride ;_gbadf +=_eeeg .RowStride ;};};if _fegc {for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_cddc ]=_faba (_dfae .Data [_cddc ],^(_eeeg .Data [_eefe ])|_dfae .Data [_cddc ],_beda );
|
|
_cddc +=_dfae .RowStride ;_eefe +=_eeeg .RowStride ;};};case PixNotSrcAndDst :for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_acfg ]=_faba (_dfae .Data [_acfg ],^(_eeeg .Data [_ceccg ])&_dfae .Data [_acfg ],_fgda );_acfg +=_dfae .RowStride ;_ceccg +=_eeeg .RowStride ;
|
|
};if _aecb {for _ebea =0;_ebea < _bdea ;_ebea ++{for _cebc =0;_cebc < _fgee ;_cebc ++{_dfae .Data [_eecb +_cebc ]&=^_eeeg .Data [_gbadf +_cebc ];};_eecb +=_dfae .RowStride ;_gbadf +=_eeeg .RowStride ;};};if _fegc {for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_cddc ]=_faba (_dfae .Data [_cddc ],^(_eeeg .Data [_eefe ])&_dfae .Data [_cddc ],_beda );
|
|
_cddc +=_dfae .RowStride ;_eefe +=_eeeg .RowStride ;};};case PixSrcOrNotDst :for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_acfg ]=_faba (_dfae .Data [_acfg ],_eeeg .Data [_ceccg ]|^(_dfae .Data [_acfg ]),_fgda );_acfg +=_dfae .RowStride ;_ceccg +=_eeeg .RowStride ;
|
|
};if _aecb {for _ebea =0;_ebea < _bdea ;_ebea ++{for _cebc =0;_cebc < _fgee ;_cebc ++{_dfae .Data [_eecb +_cebc ]=_eeeg .Data [_gbadf +_cebc ]|^(_dfae .Data [_eecb +_cebc ]);};_eecb +=_dfae .RowStride ;_gbadf +=_eeeg .RowStride ;};};if _fegc {for _ebea =0;
|
|
_ebea < _bdea ;_ebea ++{_dfae .Data [_cddc ]=_faba (_dfae .Data [_cddc ],_eeeg .Data [_eefe ]|^(_dfae .Data [_cddc ]),_beda );_cddc +=_dfae .RowStride ;_eefe +=_eeeg .RowStride ;};};case PixSrcAndNotDst :for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_acfg ]=_faba (_dfae .Data [_acfg ],_eeeg .Data [_ceccg ]&^(_dfae .Data [_acfg ]),_fgda );
|
|
_acfg +=_dfae .RowStride ;_ceccg +=_eeeg .RowStride ;};if _aecb {for _ebea =0;_ebea < _bdea ;_ebea ++{for _cebc =0;_cebc < _fgee ;_cebc ++{_dfae .Data [_eecb +_cebc ]=_eeeg .Data [_gbadf +_cebc ]&^(_dfae .Data [_eecb +_cebc ]);};_eecb +=_dfae .RowStride ;
|
|
_gbadf +=_eeeg .RowStride ;};};if _fegc {for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_cddc ]=_faba (_dfae .Data [_cddc ],_eeeg .Data [_eefe ]&^(_dfae .Data [_cddc ]),_beda );_cddc +=_dfae .RowStride ;_eefe +=_eeeg .RowStride ;};};case PixNotPixSrcOrDst :for _ebea =0;
|
|
_ebea < _bdea ;_ebea ++{_dfae .Data [_acfg ]=_faba (_dfae .Data [_acfg ],^(_eeeg .Data [_ceccg ]|_dfae .Data [_acfg ]),_fgda );_acfg +=_dfae .RowStride ;_ceccg +=_eeeg .RowStride ;};if _aecb {for _ebea =0;_ebea < _bdea ;_ebea ++{for _cebc =0;_cebc < _fgee ;
|
|
_cebc ++{_dfae .Data [_eecb +_cebc ]=^(_eeeg .Data [_gbadf +_cebc ]|_dfae .Data [_eecb +_cebc ]);};_eecb +=_dfae .RowStride ;_gbadf +=_eeeg .RowStride ;};};if _fegc {for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_cddc ]=_faba (_dfae .Data [_cddc ],^(_eeeg .Data [_eefe ]|_dfae .Data [_cddc ]),_beda );
|
|
_cddc +=_dfae .RowStride ;_eefe +=_eeeg .RowStride ;};};case PixNotPixSrcAndDst :for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_acfg ]=_faba (_dfae .Data [_acfg ],^(_eeeg .Data [_ceccg ]&_dfae .Data [_acfg ]),_fgda );_acfg +=_dfae .RowStride ;_ceccg +=_eeeg .RowStride ;
|
|
};if _aecb {for _ebea =0;_ebea < _bdea ;_ebea ++{for _cebc =0;_cebc < _fgee ;_cebc ++{_dfae .Data [_eecb +_cebc ]=^(_eeeg .Data [_gbadf +_cebc ]&_dfae .Data [_eecb +_cebc ]);};_eecb +=_dfae .RowStride ;_gbadf +=_eeeg .RowStride ;};};if _fegc {for _ebea =0;
|
|
_ebea < _bdea ;_ebea ++{_dfae .Data [_cddc ]=_faba (_dfae .Data [_cddc ],^(_eeeg .Data [_eefe ]&_dfae .Data [_cddc ]),_beda );_cddc +=_dfae .RowStride ;_eefe +=_eeeg .RowStride ;};};case PixNotPixSrcXorDst :for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_acfg ]=_faba (_dfae .Data [_acfg ],^(_eeeg .Data [_ceccg ]^_dfae .Data [_acfg ]),_fgda );
|
|
_acfg +=_dfae .RowStride ;_ceccg +=_eeeg .RowStride ;};if _aecb {for _ebea =0;_ebea < _bdea ;_ebea ++{for _cebc =0;_cebc < _fgee ;_cebc ++{_dfae .Data [_eecb +_cebc ]=^(_eeeg .Data [_gbadf +_cebc ]^_dfae .Data [_eecb +_cebc ]);};_eecb +=_dfae .RowStride ;
|
|
_gbadf +=_eeeg .RowStride ;};};if _fegc {for _ebea =0;_ebea < _bdea ;_ebea ++{_dfae .Data [_cddc ]=_faba (_dfae .Data [_cddc ],^(_eeeg .Data [_eefe ]^_dfae .Data [_cddc ]),_beda );_cddc +=_dfae .RowStride ;_eefe +=_eeeg .RowStride ;};};default:_bc .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",_gbade );
|
|
return _f .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0056\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004c\u006f\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
|
|
};return nil ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_ebbc float64 ,_dded error ){const _beea ="\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 _ebbc ,_f .Error (_beea ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _ebbc ,_f .Error (_beea ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if area1 ==0||area2 ==0{return _ebbc ,_f .Error (_beea ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_acag ,_bcfc :=bm1 .Width ,bm1 .Height ;_eacc ,_bbcg :=bm2 .Width ,bm2 .Height ;
|
|
if _afga (_acag -_eacc )> maxDiffW {return 0,nil ;};if _afga (_bcfc -_bbcg )> maxDiffH {return 0,nil ;};var _facab ,_feea int ;if delX >=0{_facab =int (delX +0.5);}else {_facab =int (delX -0.5);};if delY >=0{_feea =int (delY +0.5);}else {_feea =int (delY -0.5);
|
|
};_afff :=bm1 .createTemplate ();if _dded =_afff .RasterOperation (_facab ,_feea ,_eacc ,_bbcg ,PixSrc ,bm2 ,0,0);_dded !=nil {return _ebbc ,_f .Wrap (_dded ,_beea ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _dded =_afff .RasterOperation (0,0,_acag ,_bcfc ,PixSrcAndDst ,bm1 ,0,0);
|
|
_dded !=nil {return _ebbc ,_f .Wrap (_dded ,_beea ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_cffg :=_afff .countPixels ();_ebbc =float64 (_cffg )*float64 (_cffg )/(float64 (area1 )*float64 (area2 ));return _ebbc ,nil ;};const (SelDontCare SelectionValue =iota ;
|
|
SelHit ;SelMiss ;);func (_dceg *ClassedPoints )validateIntSlice ()error {const _acdf ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_ffc :=range _dceg .IntSlice {if _ffc >=(_dceg .Points .Size ()){return _f .Errorf (_acdf ,"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",_ffc ,_dceg .Points .Size ());
|
|
};};return nil ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _ebec (oldByte ,newByte ,op );};func TstWSymbol (t *_ee .T ,scale ...int )*Bitmap {_cgfa ,_fbbd :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_c .NoError (t ,_fbbd );
|
|
return TstGetScaledSymbol (t ,_cgfa ,scale ...);};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func (_bdgc *Bitmaps )selectByIndexes (_facgg []int )(*Bitmaps ,error ){_ebce :=&Bitmaps {};for _ ,_eacg :=range _facgg {_gfeb ,_cdgbef :=_bdgc .GetBitmap (_eacg );
|
|
if _cdgbef !=nil {return nil ,_f .Wrap (_cdgbef ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_ebce .AddBitmap (_gfeb );};return _ebce ,nil ;};func (_dfed *Points )AddPoint (x ,y float32 ){*_dfed =append (*_dfed ,Point {x ,y })};
|
|
func _dede (_ggeb *Bitmap ,_cfgd ,_fdgg int ,_ffdgf ,_cccea int ,_fcec RasterOperator ){var (_beaab bool ;_agce bool ;_ggec int ;_cgf int ;_gebgb int ;_dgce int ;_fddgf bool ;_cegfc byte ;);_ecab :=8-(_cfgd &7);_fgge :=_dece [_ecab ];_cdfd :=_ggeb .RowStride *_fdgg +(_cfgd >>3);
|
|
if _ffdgf < _ecab {_beaab =true ;_fgge &=_agcb [8-_ecab +_ffdgf ];};if !_beaab {_ggec =(_ffdgf -_ecab )>>3;if _ggec !=0{_agce =true ;_cgf =_cdfd +1;};};_gebgb =(_cfgd +_ffdgf )&7;if !(_beaab ||_gebgb ==0){_fddgf =true ;_cegfc =_agcb [_gebgb ];_dgce =_cdfd +1+_ggec ;
|
|
};var _adfg ,_edge int ;switch _fcec {case PixClr :for _adfg =0;_adfg < _cccea ;_adfg ++{_ggeb .Data [_cdfd ]=_faba (_ggeb .Data [_cdfd ],0x0,_fgge );_cdfd +=_ggeb .RowStride ;};if _agce {for _adfg =0;_adfg < _cccea ;_adfg ++{for _edge =0;_edge < _ggec ;
|
|
_edge ++{_ggeb .Data [_cgf +_edge ]=0x0;};_cgf +=_ggeb .RowStride ;};};if _fddgf {for _adfg =0;_adfg < _cccea ;_adfg ++{_ggeb .Data [_dgce ]=_faba (_ggeb .Data [_dgce ],0x0,_cegfc );_dgce +=_ggeb .RowStride ;};};case PixSet :for _adfg =0;_adfg < _cccea ;
|
|
_adfg ++{_ggeb .Data [_cdfd ]=_faba (_ggeb .Data [_cdfd ],0xff,_fgge );_cdfd +=_ggeb .RowStride ;};if _agce {for _adfg =0;_adfg < _cccea ;_adfg ++{for _edge =0;_edge < _ggec ;_edge ++{_ggeb .Data [_cgf +_edge ]=0xff;};_cgf +=_ggeb .RowStride ;};};if _fddgf {for _adfg =0;
|
|
_adfg < _cccea ;_adfg ++{_ggeb .Data [_dgce ]=_faba (_ggeb .Data [_dgce ],0xff,_cegfc );_dgce +=_ggeb .RowStride ;};};case PixNotDst :for _adfg =0;_adfg < _cccea ;_adfg ++{_ggeb .Data [_cdfd ]=_faba (_ggeb .Data [_cdfd ],^_ggeb .Data [_cdfd ],_fgge );_cdfd +=_ggeb .RowStride ;
|
|
};if _agce {for _adfg =0;_adfg < _cccea ;_adfg ++{for _edge =0;_edge < _ggec ;_edge ++{_ggeb .Data [_cgf +_edge ]=^(_ggeb .Data [_cgf +_edge ]);};_cgf +=_ggeb .RowStride ;};};if _fddgf {for _adfg =0;_adfg < _cccea ;_adfg ++{_ggeb .Data [_dgce ]=_faba (_ggeb .Data [_dgce ],^_ggeb .Data [_dgce ],_cegfc );
|
|
_dgce +=_ggeb .RowStride ;};};};};func (_aec *Bitmap )And (s *Bitmap )(_cbg *Bitmap ,_fceg error ){const _gfe ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _aec ==nil {return nil ,_f .Error (_gfe ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");
|
|
};if s ==nil {return nil ,_f .Error (_gfe ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_aec .SizesEqual (s ){_bc .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",_gfe );
|
|
};if _cbg ,_fceg =_dcc (_cbg ,_aec );_fceg !=nil {return nil ,_f .Wrap (_fceg ,_gfe ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _fceg =_cbg .RasterOperation (0,0,_cbg .Width ,_cbg .Height ,PixSrcAndDst ,s ,0,0);
|
|
_fceg !=nil {return nil ,_f .Wrap (_fceg ,_gfe ,"");};return _cbg ,nil ;};func (_cfb *Bitmap )clearAll ()error {return _cfb .RasterOperation (0,0,_cfb .Width ,_cfb .Height ,PixClr ,nil ,0,0);};func _abggb (_gdgb *Bitmap ,_agdd *Bitmap ,_efdcg *Selection ,_cacd **Bitmap )(*Bitmap ,error ){const _ccdgb ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";
|
|
if _agdd ==nil {return nil ,_f .Error (_ccdgb ,"\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 _efdcg ==nil {return nil ,_f .Error (_ccdgb ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");
|
|
};_eeggb ,_bfag :=_efdcg .Height ,_efdcg .Width ;if _eeggb ==0||_bfag ==0{return nil ,_f .Error (_ccdgb ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _gdgb ==nil {_gdgb =_agdd .createTemplate ();
|
|
*_cacd =_agdd ;return _gdgb ,nil ;};_gdgb .Width =_agdd .Width ;_gdgb .Height =_agdd .Height ;_gdgb .RowStride =_agdd .RowStride ;_gdgb .Color =_agdd .Color ;_gdgb .Data =make ([]byte ,_agdd .RowStride *_agdd .Height );if _gdgb ==_agdd {*_cacd =_agdd .Copy ();
|
|
}else {*_cacd =_agdd ;};return _gdgb ,nil ;};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 (_gggea *byWidth )Len ()int {return len (_gggea .Values )};func _gfea (_fdeg ,_egbc *Bitmap ,_cfec *Selection )(*Bitmap ,error ){const _eeaag ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";
|
|
var _acaa ,_bbde int ;if _egbc ==nil {return nil ,_f .Error (_eeaag ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _cfec ==nil {return nil ,_f .Error (_eeaag ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};_acaa =_cfec .Width ;_bbde =_cfec .Height ;if _acaa ==0||_bbde ==0{return nil ,_f .Error (_eeaag ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _fdeg ==nil {return _egbc .createTemplate (),nil ;};if _begd :=_fdeg .resizeImageData (_egbc );
|
|
_begd !=nil {return nil ,_begd ;};return _fdeg ,nil ;};func TstASymbol (t *_ee .T )*Bitmap {t .Helper ();_edadg :=New (6,6);_c .NoError (t ,_edadg .SetPixel (1,0,1));_c .NoError (t ,_edadg .SetPixel (2,0,1));_c .NoError (t ,_edadg .SetPixel (3,0,1));_c .NoError (t ,_edadg .SetPixel (4,0,1));
|
|
_c .NoError (t ,_edadg .SetPixel (5,1,1));_c .NoError (t ,_edadg .SetPixel (1,2,1));_c .NoError (t ,_edadg .SetPixel (2,2,1));_c .NoError (t ,_edadg .SetPixel (3,2,1));_c .NoError (t ,_edadg .SetPixel (4,2,1));_c .NoError (t ,_edadg .SetPixel (5,2,1));
|
|
_c .NoError (t ,_edadg .SetPixel (0,3,1));_c .NoError (t ,_edadg .SetPixel (5,3,1));_c .NoError (t ,_edadg .SetPixel (0,4,1));_c .NoError (t ,_edadg .SetPixel (5,4,1));_c .NoError (t ,_edadg .SetPixel (1,5,1));_c .NoError (t ,_edadg .SetPixel (2,5,1));
|
|
_c .NoError (t ,_edadg .SetPixel (3,5,1));_c .NoError (t ,_edadg .SetPixel (4,5,1));_c .NoError (t ,_edadg .SetPixel (5,5,1));return _edadg ;};func (_geb *Bitmap )setFourBytes (_fbb int ,_adcb uint32 )error {if _fbb +3> len (_geb .Data )-1{return _f .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",_fbb );
|
|
};_geb .Data [_fbb ]=byte ((_adcb &0xff000000)>>24);_geb .Data [_fbb +1]=byte ((_adcb &0xff0000)>>16);_geb .Data [_fbb +2]=byte ((_adcb &0xff00)>>8);_geb .Data [_fbb +3]=byte (_adcb &0xff);return nil ;};func TstImageBitmapInverseData ()[]byte {_fcdb :=_dbcd .Copy ();
|
|
_fcdb .InverseData ();return _fcdb .Data ;};func _ccaf (_bdfa ,_bdfe *Bitmap ,_fadg ,_abdeg int )(*Bitmap ,error ){const _bggdd ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _bdfe ==nil {return nil ,_f .Error (_bggdd ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _fadg < 1||_abdeg < 1{return nil ,_f .Error (_bggdd ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _fadg ==1&&_abdeg ==1{return _bdfe .Copy (),nil ;};
|
|
if _fadg ==1||_abdeg ==1{_afee :=SelCreateBrick (_abdeg ,_fadg ,_abdeg /2,_fadg /2,SelHit );var _gafe error ;_bdfa ,_gafe =_eeaba (_bdfa ,_bdfe ,_afee );if _gafe !=nil {return nil ,_f .Wrap (_gafe ,_bggdd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _bdfa ,nil ;};_deea :=SelCreateBrick (1,_fadg ,0,_fadg /2,SelHit );_afeg :=SelCreateBrick (_abdeg ,1,_abdeg /2,0,SelHit );_gdbcd ,_debge :=_gcgb (nil ,_bdfe ,_deea );if _debge !=nil {return nil ,_f .Wrap (_debge ,_bggdd ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};if _bdfa ,_debge =_gcgb (_bdfa ,_gdbcd ,_afeg );_debge !=nil {return nil ,_f .Wrap (_debge ,_bggdd ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_debge =_ffded (_gdbcd ,_bdfa ,_deea );_debge !=nil {return nil ,_f .Wrap (_debge ,_bggdd ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};if _ ,_debge =_ffded (_bdfa ,_gdbcd ,_afeg );_debge !=nil {return nil ,_f .Wrap (_debge ,_bggdd ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _bdfa ,nil ;};func _degb (_gdce *Bitmap ,_badg int )(*Bitmap ,error ){const _ceaed ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";
|
|
if _gdce ==nil {return nil ,_f .Error (_ceaed ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _badg <=0{return nil ,_f .Error (_ceaed ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");
|
|
};if _badg ==1{_agbg ,_eaeff :=_dcc (nil ,_gdce );if _eaeff !=nil {return nil ,_f .Wrap (_eaeff ,_ceaed ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _agbg ,nil ;};_aebb ,_bgcd :=_aa (_gdce ,_badg ,_badg );if _bgcd !=nil {return nil ,_f .Wrap (_bgcd ,_ceaed ,"");
|
|
};return _aebb ,nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_ac .Rectangle ;};func _eee (_egf ,_eea *Bitmap )(_fa error ){const _aef ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_gga :=_eea .RowStride ;
|
|
_gc :=_egf .RowStride ;var _bgc ,_cf ,_eed ,_cg ,_fe int ;for _eed =0;_eed < _eea .Height ;_eed ++{_bgc =_eed *_gga ;_cf =8*_eed *_gc ;for _cg =0;_cg < _gga ;_cg ++{if _fa =_egf .setEightBytes (_cf +_cg *8,_deeee [_eea .Data [_bgc +_cg ]]);_fa !=nil {return _f .Wrap (_fa ,_aef ,"");
|
|
};};for _fe =1;_fe < 8;_fe ++{for _cg =0;_cg < _gc ;_cg ++{if _fa =_egf .SetByte (_cf +_fe *_gc +_cg ,_egf .Data [_cf +_cg ]);_fa !=nil {return _f .Wrap (_fa ,_aef ,"");};};};};return nil ;};func (_ffed *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _ffed .Copy (),nil ;
|
|
};_ebag ,_fbf :=_ffed .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _fbf !=nil {return nil ,_f .Wrap (_fbf ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _ebag ,nil ;};func TstTSymbol (t *_ee .T ,scale ...int )*Bitmap {_degdg ,_egbaf :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});
|
|
_c .NoError (t ,_egbaf );return TstGetScaledSymbol (t ,_degdg ,scale ...);};func TstCSymbol (t *_ee .T )*Bitmap {t .Helper ();_aaad :=New (6,6);_c .NoError (t ,_aaad .SetPixel (1,0,1));_c .NoError (t ,_aaad .SetPixel (2,0,1));_c .NoError (t ,_aaad .SetPixel (3,0,1));
|
|
_c .NoError (t ,_aaad .SetPixel (4,0,1));_c .NoError (t ,_aaad .SetPixel (0,1,1));_c .NoError (t ,_aaad .SetPixel (5,1,1));_c .NoError (t ,_aaad .SetPixel (0,2,1));_c .NoError (t ,_aaad .SetPixel (0,3,1));_c .NoError (t ,_aaad .SetPixel (0,4,1));_c .NoError (t ,_aaad .SetPixel (5,4,1));
|
|
_c .NoError (t ,_aaad .SetPixel (1,5,1));_c .NoError (t ,_aaad .SetPixel (2,5,1));_c .NoError (t ,_aaad .SetPixel (3,5,1));_c .NoError (t ,_aaad .SetPixel (4,5,1));return _aaad ;};func TstNSymbol (t *_ee .T ,scale ...int )*Bitmap {_dbadd ,_bfadd :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});
|
|
_c .NoError (t ,_bfadd );return TstGetScaledSymbol (t ,_dbadd ,scale ...);};func (_cdecg Points )YSorter ()func (_afbdg ,_fcgb int )bool {return func (_aaeb ,_aadb int )bool {return _cdecg [_aaeb ].Y < _cdecg [_aadb ].Y };};func _eada (_adgaf *Bitmap )(_bggd *Bitmap ,_aae int ,_fedf error ){const _ddgf ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
|
|
if _adgaf ==nil {return nil ,0,_f .Errorf (_ddgf ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _baga ,_bdaa *Bitmap ;if _baga ,_fedf =_dcc (nil ,_adgaf );_fedf !=nil {return nil ,0,_f .Wrap (_fedf ,_ddgf ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
|
|
};var (_adfe [13]int ;_aed ,_abaf int ;);_bedc :=12;_cbfd :=_d .NewNumSlice (_bedc +1);_gaba :=_d .NewNumSlice (_bedc +1);var _ebee *Boxes ;for _aag :=0;_aag <=_bedc ;_aag ++{if _aag ==0{if _bdaa ,_fedf =_dcc (nil ,_baga );_fedf !=nil {return nil ,0,_f .Wrap (_fedf ,_ddgf ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
|
|
};}else {if _bdaa ,_fedf =_acab (_baga ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_fedf !=nil {return nil ,0,_f .Wrap (_fedf ,_ddgf ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _ebee ,_fedf =_bdaa .connComponentsBB (4);
|
|
_fedf !=nil {return nil ,0,_f .Wrap (_fedf ,_ddgf ,"");};_adfe [_aag ]=len (*_ebee );_cbfd .AddInt (_adfe [_aag ]);switch _aag {case 0:_aed =_adfe [0];default:_abaf =_adfe [_aag -1]-_adfe [_aag ];_gaba .AddInt (_abaf );};_baga =_bdaa ;};_gebc :=true ;_agaa :=2;
|
|
var _abg ,_eaff int ;for _dcab :=1;_dcab < len (*_gaba );_dcab ++{if _abg ,_fedf =_cbfd .GetInt (_dcab );_fedf !=nil {return nil ,0,_f .Wrap (_fedf ,_ddgf ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
|
|
};if _gebc &&_abg < int (0.3*float32 (_aed )){_agaa =_dcab +1;_gebc =false ;};if _abaf ,_fedf =_gaba .GetInt (_dcab );_fedf !=nil {return nil ,0,_f .Wrap (_fedf ,_ddgf ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
|
|
};if _abaf > _eaff {_eaff =_abaf ;};};_agde :=_adgaf .XResolution ;if _agde ==0{_agde =150;};if _agde > 110{_agaa ++;};if _agaa < 2{_bc .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");
|
|
_agaa =2;};_aae =_agaa +1;if _bggd ,_fedf =_ccaf (nil ,_adgaf ,_agaa +1,1);_fedf !=nil {return nil ,0,_f .Wrap (_fedf ,_ddgf ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _bggd ,_aae ,nil ;
|
|
};func _egaa (_afgaf ,_ebcd int )int {if _afgaf > _ebcd {return _afgaf ;};return _ebcd ;};func (_agfbac *byWidth )Swap (i ,j int ){_agfbac .Values [i ],_agfbac .Values [j ]=_agfbac .Values [j ],_agfbac .Values [i ];if _agfbac .Boxes !=nil {_agfbac .Boxes [i ],_agfbac .Boxes [j ]=_agfbac .Boxes [j ],_agfbac .Boxes [i ];
|
|
};};func (_dgcd *Bitmap )GetByte (index int )(byte ,error ){if index > len (_dgcd .Data )-1||index < 0{return 0,_f .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 _dgcd .Data [index ],nil ;};func (_edca *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _ebgbc ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _edca ==nil {return nil ,_f .Error (_ebgbc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
|
|
};if i > len (_edca .Values )-1{return nil ,_f .Errorf (_ebgbc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _edca .Values [i ],nil ;};func (_ga *Bitmap )GetChocolateData ()[]byte {if _ga .Color ==Vanilla {_ga .inverseData ();
|
|
};return _ga .Data ;};func (_gbbg *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_gbbg .Width ,Height :_gbbg .Height ,RowStride :_gbbg .RowStride ,Color :_gbbg .Color ,Text :_gbbg .Text ,BitmapNumber :_gbbg .BitmapNumber ,Special :_gbbg .Special ,Data :make ([]byte ,len (_gbbg .Data ))};
|
|
};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_ccdf float64 ,_ede error ){const _dcec ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";if bm1 ==nil ||bm2 ==nil {return 0,_f .Error (_dcec ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");
|
|
};if tab ==nil {return 0,_f .Error (_dcec ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if area1 <=0||area2 <=0{return 0,_f .Error (_dcec ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");
|
|
};_faea ,_ddeb :=bm1 .Width ,bm1 .Height ;_cfcb ,_add :=bm2 .Width ,bm2 .Height ;_fdbf :=_afga (_faea -_cfcb );if _fdbf > maxDiffW {return 0,nil ;};_dcaeg :=_afga (_ddeb -_add );if _dcaeg > maxDiffH {return 0,nil ;};var _fffe ,_ecege int ;if delX >=0{_fffe =int (delX +0.5);
|
|
}else {_fffe =int (delX -0.5);};if delY >=0{_ecege =int (delY +0.5);}else {_ecege =int (delY -0.5);};_cgdaa :=_egaa (_ecege ,0);_bgea :=_gfc (_add +_ecege ,_ddeb );_bbad :=bm1 .RowStride *_cgdaa ;_aeffe :=bm2 .RowStride *(_cgdaa -_ecege );_edg :=_egaa (_fffe ,0);
|
|
_bagb :=_gfc (_cfcb +_fffe ,_faea );_gdbc :=bm2 .RowStride ;var _dadb ,_cegfg int ;if _fffe >=8{_dadb =_fffe >>3;_bbad +=_dadb ;_edg -=_dadb <<3;_bagb -=_dadb <<3;_fffe &=7;}else if _fffe <=-8{_cegfg =-((_fffe +7)>>3);_aeffe +=_cegfg ;_gdbc -=_cegfg ;_fffe +=_cegfg <<3;
|
|
};if _edg >=_bagb ||_cgdaa >=_bgea {return 0,nil ;};_gdcd :=(_bagb +7)>>3;var (_dfbc ,_bgefg ,_gefg byte ;_dfe ,_ceag ,_fbg int ;);switch {case _fffe ==0:for _fbg =_cgdaa ;_fbg < _bgea ;_fbg ,_bbad ,_aeffe =_fbg +1,_bbad +bm1 .RowStride ,_aeffe +bm2 .RowStride {for _ceag =0;
|
|
_ceag < _gdcd ;_ceag ++{_gefg =bm1 .Data [_bbad +_ceag ]&bm2 .Data [_aeffe +_ceag ];_dfe +=tab [_gefg ];};};case _fffe > 0:if _gdbc < _gdcd {for _fbg =_cgdaa ;_fbg < _bgea ;_fbg ,_bbad ,_aeffe =_fbg +1,_bbad +bm1 .RowStride ,_aeffe +bm2 .RowStride {_dfbc ,_bgefg =bm1 .Data [_bbad ],bm2 .Data [_aeffe ]>>uint (_fffe );
|
|
_gefg =_dfbc &_bgefg ;_dfe +=tab [_gefg ];for _ceag =1;_ceag < _gdbc ;_ceag ++{_dfbc ,_bgefg =bm1 .Data [_bbad +_ceag ],(bm2 .Data [_aeffe +_ceag ]>>uint (_fffe ))|(bm2 .Data [_aeffe +_ceag -1]<<uint (8-_fffe ));_gefg =_dfbc &_bgefg ;_dfe +=tab [_gefg ];
|
|
};_dfbc =bm1 .Data [_bbad +_ceag ];_bgefg =bm2 .Data [_aeffe +_ceag -1]<<uint (8-_fffe );_gefg =_dfbc &_bgefg ;_dfe +=tab [_gefg ];};}else {for _fbg =_cgdaa ;_fbg < _bgea ;_fbg ,_bbad ,_aeffe =_fbg +1,_bbad +bm1 .RowStride ,_aeffe +bm2 .RowStride {_dfbc ,_bgefg =bm1 .Data [_bbad ],bm2 .Data [_aeffe ]>>uint (_fffe );
|
|
_gefg =_dfbc &_bgefg ;_dfe +=tab [_gefg ];for _ceag =1;_ceag < _gdcd ;_ceag ++{_dfbc =bm1 .Data [_bbad +_ceag ];_bgefg =(bm2 .Data [_aeffe +_ceag ]>>uint (_fffe ))|(bm2 .Data [_aeffe +_ceag -1]<<uint (8-_fffe ));_gefg =_dfbc &_bgefg ;_dfe +=tab [_gefg ];
|
|
};};};default:if _gdcd < _gdbc {for _fbg =_cgdaa ;_fbg < _bgea ;_fbg ,_bbad ,_aeffe =_fbg +1,_bbad +bm1 .RowStride ,_aeffe +bm2 .RowStride {for _ceag =0;_ceag < _gdcd ;_ceag ++{_dfbc =bm1 .Data [_bbad +_ceag ];_bgefg =bm2 .Data [_aeffe +_ceag ]<<uint (-_fffe );
|
|
_bgefg |=bm2 .Data [_aeffe +_ceag +1]>>uint (8+_fffe );_gefg =_dfbc &_bgefg ;_dfe +=tab [_gefg ];};};}else {for _fbg =_cgdaa ;_fbg < _bgea ;_fbg ,_bbad ,_aeffe =_fbg +1,_bbad +bm1 .RowStride ,_aeffe +bm2 .RowStride {for _ceag =0;_ceag < _gdcd -1;_ceag ++{_dfbc =bm1 .Data [_bbad +_ceag ];
|
|
_bgefg =bm2 .Data [_aeffe +_ceag ]<<uint (-_fffe );_bgefg |=bm2 .Data [_aeffe +_ceag +1]>>uint (8+_fffe );_gefg =_dfbc &_bgefg ;_dfe +=tab [_gefg ];};_dfbc =bm1 .Data [_bbad +_ceag ];_bgefg =bm2 .Data [_aeffe +_ceag ]<<uint (-_fffe );_gefg =_dfbc &_bgefg ;
|
|
_dfe +=tab [_gefg ];};};};_ccdf =float64 (_dfe )*float64 (_dfe )/(float64 (area1 )*float64 (area2 ));return _ccdf ,nil ;};type BoundaryCondition int ;type byHeight Bitmaps ;func _fcb (_ccf *Bitmap ,_fdc *Bitmap ,_acd int )(_cda error ){const _ddg ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";
|
|
switch _acd {case 2:_cda =_cc (_ccf ,_fdc );case 4:_cda =_ef (_ccf ,_fdc );case 8:_cda =_eee (_ccf ,_fdc );default:return _f .Error (_ddg ,"\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 _cda !=nil {_cda =_f .Wrap (_cda ,_ddg ,"");};return _cda ;};func (_dcae *Bitmap )setPadBits (_bdee int ){_gfgb :=8-_dcae .Width %8;if _gfgb ==8{return ;};_cec :=_dcae .Width /8;_deg :=_dece [_gfgb ];if _bdee ==0{_deg ^=_deg ;};var _agbf int ;for _egag :=0;
|
|
_egag < _dcae .Height ;_egag ++{_agbf =_egag *_dcae .RowStride +_cec ;if _bdee ==0{_dcae .Data [_agbf ]&=_deg ;}else {_dcae .Data [_agbf ]|=_deg ;};};};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;
|
|
MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_eage *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_afab *Bitmaps ,_gfed error ){const _fgbf ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
|
|
if _eage ==nil {return nil ,_f .Error (_fgbf ,"\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 ,_f .Errorf (_fgbf ,"\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 ,_f .Errorf (_fgbf ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
|
|
};_aacc ,_gfed :=_eage .makeSizeIndicator (width ,height ,tp ,relation );if _gfed !=nil {return nil ,_f .Wrap (_gfed ,_fgbf ,"");};_afab ,_gfed =_eage .selectByIndicator (_aacc );if _gfed !=nil {return nil ,_f .Wrap (_gfed ,_fgbf ,"");};return _afab ,nil ;
|
|
};func TstESymbol (t *_ee .T ,scale ...int )*Bitmap {_cgdeg ,_ddcae :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_c .NoError (t ,_ddcae );return TstGetScaledSymbol (t ,_cgdeg ,scale ...);};func (_dcb *Bitmap )countPixels ()int {var (_cbd int ;
|
|
_cdbc uint8 ;_aaa byte ;_cfad int ;);_aaf :=_dcb .RowStride ;_cdc :=uint (_dcb .Width &0x07);if _cdc !=0{_cdbc =uint8 ((0xff<<(8-_cdc ))&0xff);_aaf --;};for _adc :=0;_adc < _dcb .Height ;_adc ++{for _cfad =0;_cfad < _aaf ;_cfad ++{_aaa =_dcb .Data [_adc *_dcb .RowStride +_cfad ];
|
|
_cbd +=int (_fggb [_aaa ]);};if _cdc !=0{_cbd +=int (_fggb [_dcb .Data [_adc *_dcb .RowStride +_cfad ]&_cdbc ]);};};return _cbd ;};const (Vanilla Color =iota ;Chocolate ;);func (_ded *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _ded .removeBorderGeneral (left ,right ,top ,bot );
|
|
};func _deeb (_beed ,_cad *Bitmap ,_gdea ,_fbcdd ,_ddce ,_bbb ,_dgae ,_gfcd ,_ggce ,_fbfg int ,_cabd CombinationOperator ,_bdbf int )error {var _febc int ;_dbg :=func (){_febc ++;_ddce +=_cad .RowStride ;_bbb +=_beed .RowStride ;_dgae +=_beed .RowStride };
|
|
for _febc =_gdea ;_febc < _fbcdd ;_dbg (){var _aeaa uint16 ;_gdca :=_ddce ;for _bcgfa :=_bbb ;_bcgfa <=_dgae ;_bcgfa ++{_adf ,_egad :=_cad .GetByte (_gdca );if _egad !=nil {return _egad ;};_cdge ,_egad :=_beed .GetByte (_bcgfa );if _egad !=nil {return _egad ;
|
|
};_aeaa =(_aeaa |(uint16 (_cdge )&0xff))<<uint (_fbfg );_cdge =byte (_aeaa >>8);if _egad =_cad .SetByte (_gdca ,_ebec (_adf ,_cdge ,_cabd ));_egad !=nil {return _egad ;};_gdca ++;_aeaa <<=uint (_ggce );if _bcgfa ==_dgae {_cdge =byte (_aeaa >>(8-uint8 (_fbfg )));
|
|
if _bdbf !=0{_cdge =_aeae (uint (8+_gfcd ),_cdge );};_adf ,_egad =_cad .GetByte (_gdca );if _egad !=nil {return _egad ;};if _egad =_cad .SetByte (_gdca ,_ebec (_adf ,_cdge ,_cabd ));_egad !=nil {return _egad ;};};};};return nil ;};func (_dca *Bitmap )resizeImageData (_dab *Bitmap )error {if _dab ==nil {return _f .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 _dca .SizesEqual (_dab ){return nil ;};_dca .Data =make ([]byte ,len (_dab .Data ));_dca .Width =_dab .Width ;_dca .Height =_dab .Height ;_dca .RowStride =_dab .RowStride ;return nil ;};func _cagf (_gcb *Bitmap ,_cegaa ,_bcca ,_bgb ,_fddg int ,_debgf RasterOperator ,_baad *Bitmap ,_agcc ,_fdgd int )error {var (_dccf byte ;
|
|
_ffdgb int ;_ffcc int ;_cacgb ,_gcfgc int ;_feab ,_gedf int ;);_bgab :=_bgb >>3;_dddd :=_bgb &7;if _dddd > 0{_dccf =_agcb [_dddd ];};_ffdgb =_baad .RowStride *_fdgd +(_agcc >>3);_ffcc =_gcb .RowStride *_bcca +(_cegaa >>3);switch _debgf {case PixSrc :for _feab =0;
|
|
_feab < _fddg ;_feab ++{_cacgb =_ffdgb +_feab *_baad .RowStride ;_gcfgc =_ffcc +_feab *_gcb .RowStride ;for _gedf =0;_gedf < _bgab ;_gedf ++{_gcb .Data [_gcfgc ]=_baad .Data [_cacgb ];_gcfgc ++;_cacgb ++;};if _dddd > 0{_gcb .Data [_gcfgc ]=_faba (_gcb .Data [_gcfgc ],_baad .Data [_cacgb ],_dccf );
|
|
};};case PixNotSrc :for _feab =0;_feab < _fddg ;_feab ++{_cacgb =_ffdgb +_feab *_baad .RowStride ;_gcfgc =_ffcc +_feab *_gcb .RowStride ;for _gedf =0;_gedf < _bgab ;_gedf ++{_gcb .Data [_gcfgc ]=^(_baad .Data [_cacgb ]);_gcfgc ++;_cacgb ++;};if _dddd > 0{_gcb .Data [_gcfgc ]=_faba (_gcb .Data [_gcfgc ],^_baad .Data [_cacgb ],_dccf );
|
|
};};case PixSrcOrDst :for _feab =0;_feab < _fddg ;_feab ++{_cacgb =_ffdgb +_feab *_baad .RowStride ;_gcfgc =_ffcc +_feab *_gcb .RowStride ;for _gedf =0;_gedf < _bgab ;_gedf ++{_gcb .Data [_gcfgc ]|=_baad .Data [_cacgb ];_gcfgc ++;_cacgb ++;};if _dddd > 0{_gcb .Data [_gcfgc ]=_faba (_gcb .Data [_gcfgc ],_baad .Data [_cacgb ]|_gcb .Data [_gcfgc ],_dccf );
|
|
};};case PixSrcAndDst :for _feab =0;_feab < _fddg ;_feab ++{_cacgb =_ffdgb +_feab *_baad .RowStride ;_gcfgc =_ffcc +_feab *_gcb .RowStride ;for _gedf =0;_gedf < _bgab ;_gedf ++{_gcb .Data [_gcfgc ]&=_baad .Data [_cacgb ];_gcfgc ++;_cacgb ++;};if _dddd > 0{_gcb .Data [_gcfgc ]=_faba (_gcb .Data [_gcfgc ],_baad .Data [_cacgb ]&_gcb .Data [_gcfgc ],_dccf );
|
|
};};case PixSrcXorDst :for _feab =0;_feab < _fddg ;_feab ++{_cacgb =_ffdgb +_feab *_baad .RowStride ;_gcfgc =_ffcc +_feab *_gcb .RowStride ;for _gedf =0;_gedf < _bgab ;_gedf ++{_gcb .Data [_gcfgc ]^=_baad .Data [_cacgb ];_gcfgc ++;_cacgb ++;};if _dddd > 0{_gcb .Data [_gcfgc ]=_faba (_gcb .Data [_gcfgc ],_baad .Data [_cacgb ]^_gcb .Data [_gcfgc ],_dccf );
|
|
};};case PixNotSrcOrDst :for _feab =0;_feab < _fddg ;_feab ++{_cacgb =_ffdgb +_feab *_baad .RowStride ;_gcfgc =_ffcc +_feab *_gcb .RowStride ;for _gedf =0;_gedf < _bgab ;_gedf ++{_gcb .Data [_gcfgc ]|=^(_baad .Data [_cacgb ]);_gcfgc ++;_cacgb ++;};if _dddd > 0{_gcb .Data [_gcfgc ]=_faba (_gcb .Data [_gcfgc ],^(_baad .Data [_cacgb ])|_gcb .Data [_gcfgc ],_dccf );
|
|
};};case PixNotSrcAndDst :for _feab =0;_feab < _fddg ;_feab ++{_cacgb =_ffdgb +_feab *_baad .RowStride ;_gcfgc =_ffcc +_feab *_gcb .RowStride ;for _gedf =0;_gedf < _bgab ;_gedf ++{_gcb .Data [_gcfgc ]&=^(_baad .Data [_cacgb ]);_gcfgc ++;_cacgb ++;};if _dddd > 0{_gcb .Data [_gcfgc ]=_faba (_gcb .Data [_gcfgc ],^(_baad .Data [_cacgb ])&_gcb .Data [_gcfgc ],_dccf );
|
|
};};case PixSrcOrNotDst :for _feab =0;_feab < _fddg ;_feab ++{_cacgb =_ffdgb +_feab *_baad .RowStride ;_gcfgc =_ffcc +_feab *_gcb .RowStride ;for _gedf =0;_gedf < _bgab ;_gedf ++{_gcb .Data [_gcfgc ]=_baad .Data [_cacgb ]|^(_gcb .Data [_gcfgc ]);_gcfgc ++;
|
|
_cacgb ++;};if _dddd > 0{_gcb .Data [_gcfgc ]=_faba (_gcb .Data [_gcfgc ],_baad .Data [_cacgb ]|^(_gcb .Data [_gcfgc ]),_dccf );};};case PixSrcAndNotDst :for _feab =0;_feab < _fddg ;_feab ++{_cacgb =_ffdgb +_feab *_baad .RowStride ;_gcfgc =_ffcc +_feab *_gcb .RowStride ;
|
|
for _gedf =0;_gedf < _bgab ;_gedf ++{_gcb .Data [_gcfgc ]=_baad .Data [_cacgb ]&^(_gcb .Data [_gcfgc ]);_gcfgc ++;_cacgb ++;};if _dddd > 0{_gcb .Data [_gcfgc ]=_faba (_gcb .Data [_gcfgc ],_baad .Data [_cacgb ]&^(_gcb .Data [_gcfgc ]),_dccf );};};case PixNotPixSrcOrDst :for _feab =0;
|
|
_feab < _fddg ;_feab ++{_cacgb =_ffdgb +_feab *_baad .RowStride ;_gcfgc =_ffcc +_feab *_gcb .RowStride ;for _gedf =0;_gedf < _bgab ;_gedf ++{_gcb .Data [_gcfgc ]=^(_baad .Data [_cacgb ]|_gcb .Data [_gcfgc ]);_gcfgc ++;_cacgb ++;};if _dddd > 0{_gcb .Data [_gcfgc ]=_faba (_gcb .Data [_gcfgc ],^(_baad .Data [_cacgb ]|_gcb .Data [_gcfgc ]),_dccf );
|
|
};};case PixNotPixSrcAndDst :for _feab =0;_feab < _fddg ;_feab ++{_cacgb =_ffdgb +_feab *_baad .RowStride ;_gcfgc =_ffcc +_feab *_gcb .RowStride ;for _gedf =0;_gedf < _bgab ;_gedf ++{_gcb .Data [_gcfgc ]=^(_baad .Data [_cacgb ]&_gcb .Data [_gcfgc ]);_gcfgc ++;
|
|
_cacgb ++;};if _dddd > 0{_gcb .Data [_gcfgc ]=_faba (_gcb .Data [_gcfgc ],^(_baad .Data [_cacgb ]&_gcb .Data [_gcfgc ]),_dccf );};};case PixNotPixSrcXorDst :for _feab =0;_feab < _fddg ;_feab ++{_cacgb =_ffdgb +_feab *_baad .RowStride ;_gcfgc =_ffcc +_feab *_gcb .RowStride ;
|
|
for _gedf =0;_gedf < _bgab ;_gedf ++{_gcb .Data [_gcfgc ]=^(_baad .Data [_cacgb ]^_gcb .Data [_gcfgc ]);_gcfgc ++;_cacgb ++;};if _dddd > 0{_gcb .Data [_gcfgc ]=_faba (_gcb .Data [_gcfgc ],^(_baad .Data [_cacgb ]^_gcb .Data [_gcfgc ]),_dccf );};};default:_bc .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",_debgf );
|
|
return _f .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004co\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
|
|
};return nil ;};func TstAddSymbol (t *_ee .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_gcba :=_ac .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_gcba );*x +=sym .Width +space ;};func init (){const _cdcfd ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";
|
|
_cdbbf =New (50,40);var _feeb error ;_cdbbf ,_feeb =_cdbbf .AddBorder (2,1);if _feeb !=nil {panic (_f .Wrap (_feeb ,_cdcfd ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_dbcd ,_feeb =NewWithData (50,22,_ddfg );if _feeb !=nil {panic (_f .Wrap (_feeb ,_cdcfd ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
|
|
};};func (_ddc *Bitmap )Equivalent (s *Bitmap )bool {return _ddc .equivalent (s )};func _gfa ()[]int {_dfda :=make ([]int ,256);_dfda [0]=0;_dfda [1]=7;var _cdcd int ;for _cdcd =2;_cdcd < 4;_cdcd ++{_dfda [_cdcd ]=_dfda [_cdcd -2]+6;};for _cdcd =4;_cdcd < 8;
|
|
_cdcd ++{_dfda [_cdcd ]=_dfda [_cdcd -4]+5;};for _cdcd =8;_cdcd < 16;_cdcd ++{_dfda [_cdcd ]=_dfda [_cdcd -8]+4;};for _cdcd =16;_cdcd < 32;_cdcd ++{_dfda [_cdcd ]=_dfda [_cdcd -16]+3;};for _cdcd =32;_cdcd < 64;_cdcd ++{_dfda [_cdcd ]=_dfda [_cdcd -32]+2;
|
|
};for _cdcd =64;_cdcd < 128;_cdcd ++{_dfda [_cdcd ]=_dfda [_cdcd -64]+1;};for _cdcd =128;_cdcd < 256;_cdcd ++{_dfda [_cdcd ]=_dfda [_cdcd -128];};return _dfda ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _gff ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
|
|
_egff :=_bbg (width ,height );_egff .Data =data ;if _beb :=((width *height )+7)>>3;len (data )< _beb {return nil ,_f .Errorf (_gff ,"\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 ),_beb );
|
|
};if _cacg :=_egff .addPadBits ();_cacg !=nil {return nil ,_f .Wrap (_cacg ,_gff ,"");};return _egff ,nil ;};func (_gggd *Bitmap )addBorderGeneral (_gdb ,_gbae ,_dcdd ,_bdcab int ,_fcgd int )(*Bitmap ,error ){const _edf ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
|
|
if _gdb < 0||_gbae < 0||_dcdd < 0||_bdcab < 0{return nil ,_f .Error (_edf ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_bae ,_ggff :=_gggd .Width ,_gggd .Height ;_dbf :=_bae +_gdb +_gbae ;_eac :=_ggff +_dcdd +_bdcab ;
|
|
_bgda :=New (_dbf ,_eac );_bgda .Color =_gggd .Color ;_cddb :=PixClr ;if _fcgd > 0{_cddb =PixSet ;};_cge :=_bgda .RasterOperation (0,0,_gdb ,_eac ,_cddb ,nil ,0,0);if _cge !=nil {return nil ,_f .Wrap (_cge ,_edf ,"\u006c\u0065\u0066\u0074");};_cge =_bgda .RasterOperation (_dbf -_gbae ,0,_gbae ,_eac ,_cddb ,nil ,0,0);
|
|
if _cge !=nil {return nil ,_f .Wrap (_cge ,_edf ,"\u0072\u0069\u0067h\u0074");};_cge =_bgda .RasterOperation (0,0,_dbf ,_dcdd ,_cddb ,nil ,0,0);if _cge !=nil {return nil ,_f .Wrap (_cge ,_edf ,"\u0074\u006f\u0070");};_cge =_bgda .RasterOperation (0,_eac -_bdcab ,_dbf ,_bdcab ,_cddb ,nil ,0,0);
|
|
if _cge !=nil {return nil ,_f .Wrap (_cge ,_edf ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_cge =_bgda .RasterOperation (_gdb ,_dcdd ,_bae ,_ggff ,PixSrc ,_gggd ,0,0);if _cge !=nil {return nil ,_f .Wrap (_cge ,_edf ,"\u0063\u006f\u0070\u0079");};return _bgda ,nil ;
|
|
};func (_gbfa *ClassedPoints )YAtIndex (i int )float32 {return (*_gbfa .Points )[_gbfa .IntSlice [i ]].Y };func _gbb (_fbea ,_ebe *Bitmap ,_afg int ,_bef []byte ,_fdef int )(_fca error ){const _acae ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";
|
|
var (_adg ,_ebc ,_gbg ,_ca ,_cgd ,_ffa ,_dff ,_bgca int ;_abc ,_affa ,_fggg ,_cac uint32 ;_dae ,_fgd byte ;_bgd uint16 ;);_gba :=make ([]byte ,4);_afb :=make ([]byte ,4);for _gbg =0;_gbg < _fbea .Height -1;_gbg ,_ca =_gbg +2,_ca +1{_adg =_gbg *_fbea .RowStride ;
|
|
_ebc =_ca *_ebe .RowStride ;for _cgd ,_ffa =0,0;_cgd < _fdef ;_cgd ,_ffa =_cgd +4,_ffa +1{for _dff =0;_dff < 4;_dff ++{_bgca =_adg +_cgd +_dff ;if _bgca <=len (_fbea .Data )-1&&_bgca < _adg +_fbea .RowStride {_gba [_dff ]=_fbea .Data [_bgca ];}else {_gba [_dff ]=0x00;
|
|
};_bgca =_adg +_fbea .RowStride +_cgd +_dff ;if _bgca <=len (_fbea .Data )-1&&_bgca < _adg +(2*_fbea .RowStride ){_afb [_dff ]=_fbea .Data [_bgca ];}else {_afb [_dff ]=0x00;};};_abc =_ae .BigEndian .Uint32 (_gba );_affa =_ae .BigEndian .Uint32 (_afb );
|
|
_fggg =_abc &_affa ;_fggg |=_fggg <<1;_cac =_abc |_affa ;_cac &=_cac <<1;_affa =_fggg &_cac ;_affa &=0xaaaaaaaa;_abc =_affa |(_affa <<7);_dae =byte (_abc >>24);_fgd =byte ((_abc >>8)&0xff);_bgca =_ebc +_ffa ;if _bgca +1==len (_ebe .Data )-1||_bgca +1>=_ebc +_ebe .RowStride {if _fca =_ebe .SetByte (_bgca ,_bef [_dae ]);
|
|
_fca !=nil {return _f .Wrapf (_fca ,_acae ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bgca );};}else {_bgd =(uint16 (_bef [_dae ])<<8)|uint16 (_bef [_fgd ]);if _fca =_ebe .setTwoBytes (_bgca ,_bgd );_fca !=nil {return _f .Wrapf (_fca ,_acae ,"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",_bgca );
|
|
};_ffa ++;};};};return nil ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func _gbdd (_fea ,_fage ,_aafa *Bitmap )(*Bitmap ,error ){const _fgcf ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";
|
|
if _fage ==nil {return nil ,_f .Error (_fgcf ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _aafa ==nil {return nil ,_f .Error (_fgcf ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _bafg error ;switch {case _fea ==_fage :if _bafg =_fea .RasterOperation (0,0,_fage .Width ,_fage .Height ,PixNotSrcAndDst ,_aafa ,0,0);
|
|
_bafg !=nil {return nil ,_f .Wrap (_bafg ,_fgcf ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _fea ==_aafa :if _bafg =_fea .RasterOperation (0,0,_fage .Width ,_fage .Height ,PixNotSrcAndDst ,_fage ,0,0);_bafg !=nil {return nil ,_f .Wrap (_bafg ,_fgcf ,"\u0064 \u003d\u003d\u0020\u0073\u0032");
|
|
};default:_fea ,_bafg =_dcc (_fea ,_fage );if _bafg !=nil {return nil ,_f .Wrap (_bafg ,_fgcf ,"");};if _bafg =_fea .RasterOperation (0,0,_fage .Width ,_fage .Height ,PixNotSrcAndDst ,_aafa ,0,0);_bafg !=nil {return nil ,_f .Wrap (_bafg ,_fgcf ,"\u0064e\u0066\u0061\u0075\u006c\u0074");
|
|
};};return _fea ,nil ;};func (_fgggc *Bitmaps )Size ()int {return len (_fgggc .Values )};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func (_cgebd *Bitmaps )makeSizeIndicator (_bdd ,_gdcc int ,_cbea LocationFilter ,_acgf SizeComparison )(_bbece *_d .NumSlice ,_cfgc error ){const _afffb ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _cgebd ==nil {return nil ,_f .Error (_afffb ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _cbea {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_afffb ,"\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",_cbea );
|
|
};switch _acgf {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_f .Errorf (_afffb ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_acgf );
|
|
};_bbece =&_d .NumSlice {};var (_dabbg ,_eaee ,_cbde int ;_adabf *Bitmap ;);for _ ,_adabf =range _cgebd .Values {_dabbg =0;_eaee ,_cbde =_adabf .Width ,_adabf .Height ;switch _cbea {case LocSelectWidth :if (_acgf ==SizeSelectIfLT &&_eaee < _bdd )||(_acgf ==SizeSelectIfGT &&_eaee > _bdd )||(_acgf ==SizeSelectIfLTE &&_eaee <=_bdd )||(_acgf ==SizeSelectIfGTE &&_eaee >=_bdd )||(_acgf ==SizeSelectIfEQ &&_eaee ==_bdd ){_dabbg =1;
|
|
};case LocSelectHeight :if (_acgf ==SizeSelectIfLT &&_cbde < _gdcc )||(_acgf ==SizeSelectIfGT &&_cbde > _gdcc )||(_acgf ==SizeSelectIfLTE &&_cbde <=_gdcc )||(_acgf ==SizeSelectIfGTE &&_cbde >=_gdcc )||(_acgf ==SizeSelectIfEQ &&_cbde ==_gdcc ){_dabbg =1;
|
|
};case LocSelectIfEither :if (_acgf ==SizeSelectIfLT &&(_eaee < _bdd ||_cbde < _gdcc ))||(_acgf ==SizeSelectIfGT &&(_eaee > _bdd ||_cbde > _gdcc ))||(_acgf ==SizeSelectIfLTE &&(_eaee <=_bdd ||_cbde <=_gdcc ))||(_acgf ==SizeSelectIfGTE &&(_eaee >=_bdd ||_cbde >=_gdcc ))||(_acgf ==SizeSelectIfEQ &&(_eaee ==_bdd ||_cbde ==_gdcc )){_dabbg =1;
|
|
};case LocSelectIfBoth :if (_acgf ==SizeSelectIfLT &&(_eaee < _bdd &&_cbde < _gdcc ))||(_acgf ==SizeSelectIfGT &&(_eaee > _bdd &&_cbde > _gdcc ))||(_acgf ==SizeSelectIfLTE &&(_eaee <=_bdd &&_cbde <=_gdcc ))||(_acgf ==SizeSelectIfGTE &&(_eaee >=_bdd &&_cbde >=_gdcc ))||(_acgf ==SizeSelectIfEQ &&(_eaee ==_bdd &&_cbde ==_gdcc )){_dabbg =1;
|
|
};};_bbece .AddInt (_dabbg );};return _bbece ,nil ;};type Component int ;const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func (_ffag *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_adb *Boxes ,_gbad error ){const _gcg ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
|
|
if _ffag ==nil {return nil ,_f .Error (_gcg ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_ffag )==0{return _ffag ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_gcg ,"\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 ,_f .Errorf (_gcg ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
|
|
};_ebba :=_ffag .makeSizeIndicator (width ,height ,tp ,relation );_aaaa ,_gbad :=_ffag .selectWithIndicator (_ebba );if _gbad !=nil {return nil ,_f .Wrap (_gbad ,_gcg ,"");};return _aaaa ,nil ;};func (_fdab *Bitmaps )GetBox (i int )(*_ac .Rectangle ,error ){const _gccce ="\u0047\u0065\u0074\u0042\u006f\u0078";
|
|
if _fdab ==nil {return nil ,_f .Error (_gccce ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_fdab .Boxes )-1{return nil ,_f .Errorf (_gccce ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return _fdab .Boxes [i ],nil ;};func (_gaeb *ClassedPoints )ySortFunction ()func (_edbde int ,_fccb int )bool {return func (_bga ,_agad int )bool {return _gaeb .YAtIndex (_bga )< _gaeb .YAtIndex (_agad )};};func (_fcgc *ClassedPoints )SortByY (){_fcgc ._cbefc =_fcgc .ySortFunction ();
|
|
_fbe .Sort (_fcgc )};var _fggb [256]uint8 ;type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_ac .Rectangle ;};func (_efaeg *Bitmap )CreateTemplate ()*Bitmap {return _efaeg .createTemplate ()};func (_eafb MorphProcess )getWidthHeight ()(_ebac ,_dcee int ){return _eafb .Arguments [0],_eafb .Arguments [1];
|
|
};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;); |