mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-01 22:17:29 +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 (_ac "encoding/binary";_fg "github.com/stretchr/testify/require";_eb "github.com/unidoc/unipdf/v3/common";_bd "github.com/unidoc/unipdf/v3/internal/bitwise";_a "github.com/unidoc/unipdf/v3/internal/imageutil";_e "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
|
|
_g "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_c "image";_ff "math";_fe "sort";_fd "strings";_b "testing";);func (_bgaf *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_abggc *Boxes ,_ebdfc error ){const _gcd ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
|
|
if _bgaf ==nil {return nil ,_g .Error (_gcd ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_bgaf )==0{return _bgaf ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_g .Errorf (_gcd ,"\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 ,_g .Errorf (_gcd ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
|
|
};_gabd :=_bgaf .makeSizeIndicator (width ,height ,tp ,relation );_ffea ,_ebdfc :=_bgaf .selectWithIndicator (_gabd );if _ebdfc !=nil {return nil ,_g .Wrap (_ebdfc ,_gcd ,"");};return _ffea ,nil ;};func (_ggb *Bitmap )GetVanillaData ()[]byte {if _ggb .Color ==Chocolate {_ggb .inverseData ();
|
|
};return _ggb .Data ;};func TstCSymbol (t *_b .T )*Bitmap {t .Helper ();_cfge :=New (6,6);_fg .NoError (t ,_cfge .SetPixel (1,0,1));_fg .NoError (t ,_cfge .SetPixel (2,0,1));_fg .NoError (t ,_cfge .SetPixel (3,0,1));_fg .NoError (t ,_cfge .SetPixel (4,0,1));
|
|
_fg .NoError (t ,_cfge .SetPixel (0,1,1));_fg .NoError (t ,_cfge .SetPixel (5,1,1));_fg .NoError (t ,_cfge .SetPixel (0,2,1));_fg .NoError (t ,_cfge .SetPixel (0,3,1));_fg .NoError (t ,_cfge .SetPixel (0,4,1));_fg .NoError (t ,_cfge .SetPixel (5,4,1));
|
|
_fg .NoError (t ,_cfge .SetPixel (1,5,1));_fg .NoError (t ,_cfge .SetPixel (2,5,1));_fg .NoError (t ,_cfge .SetPixel (3,5,1));_fg .NoError (t ,_cfge .SetPixel (4,5,1));return _cfge ;};func TstImageBitmapData ()[]byte {return _ddcfc .Data };func (_egae *Bitmaps )CountPixels ()*_e .NumSlice {_fbdfg :=&_e .NumSlice {};
|
|
for _ ,_aafg :=range _egae .Values {_fbdfg .AddInt (_aafg .CountPixels ());};return _fbdfg ;};func NewClassedPoints (points *Points ,classes _e .IntSlice )(*ClassedPoints ,error ){const _fgea ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
|
|
if points ==nil {return nil ,_g .Error (_fgea ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_g .Error (_fgea ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
|
|
};_dcfge :=&ClassedPoints {Points :points ,IntSlice :classes };if _ecbc :=_dcfge .validateIntSlice ();_ecbc !=nil {return nil ,_g .Wrap (_ecbc ,_fgea ,"");};return _dcfge ,nil ;};func _cagcf (_eebc ,_ddcc *Bitmap ,_ccab ,_bbfb int )(*Bitmap ,error ){const _acba ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";
|
|
if _ddcc ==nil {return nil ,_g .Error (_acba ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _ccab < 1||_bbfb < 1{return nil ,_g .Error (_acba ,"\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 _ccab ==1&&_bbfb ==1{_facc ,_bfegc :=_adfb (_eebc ,_ddcc );if _bfegc !=nil {return nil ,_g .Wrap (_bfegc ,_acba ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _facc ,nil ;};if _ccab ==1||_bbfb ==1{_gbec :=SelCreateBrick (_bbfb ,_ccab ,_bbfb /2,_ccab /2,SelHit );_dcgc ,_afad :=_dcab (_eebc ,_ddcc ,_gbec );if _afad !=nil {return nil ,_g .Wrap (_afad ,_acba ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _dcgc ,nil ;};_gfcd :=SelCreateBrick (1,_ccab ,0,_ccab /2,SelHit );_aaef :=SelCreateBrick (_bbfb ,1,_bbfb /2,0,SelHit );_acbb ,_bafa :=_dcab (nil ,_ddcc ,_gfcd );if _bafa !=nil {return nil ,_g .Wrap (_bafa ,_acba ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};_eebc ,_bafa =_dcab (_eebc ,_acbb ,_aaef );if _bafa !=nil {return nil ,_g .Wrap (_bafa ,_acba ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _eebc ,nil ;};func (_defad *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _dfce ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";
|
|
if len (_defad .Values )==0{return nil ,_g .Error (_dfce ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_fbcb :=&BitmapsArray {};_defad .SortByHeight ();_aced :=-1;_ebeed :=-1;for _fadg :=0;_fadg < len (_defad .Values );
|
|
_fadg ++{_abcd :=_defad .Values [_fadg ].Height ;if _abcd > _aced {_aced =_abcd ;_ebeed ++;_fbcb .Values =append (_fbcb .Values ,&Bitmaps {});};_fbcb .Values [_ebeed ].AddBitmap (_defad .Values [_fadg ]);};return _fbcb ,nil ;};var (_ddcf =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};
|
|
_becb =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_gfb *Boxes )Add (box *_c .Rectangle )error {if _gfb ==nil {return _g .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");
|
|
};*_gfb =append (*_gfb ,box );return nil ;};func (_fee *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _fee .Copy (),nil ;};_dfbb ,_gdbc :=_fee .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );
|
|
if _gdbc !=nil {return nil ,_g .Wrap (_gdbc ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _dfbb ,nil ;};var (_baab *Bitmap ;_ddcfc *Bitmap ;);func (_ceccg Points )GetIntX (i int )(int ,error ){if i >=len (_ceccg ){return 0,_g .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 (_ceccg [i ].X ),nil ;};type Points []Point ;func _dcab (_afdg ,_cfce *Bitmap ,_bgeg *Selection )(*Bitmap ,error ){const _gaddg ="\u0065\u0072\u006fd\u0065";var (_bgac error ;_dedgg *Bitmap ;);_afdg ,_bgac =_dbbgf (_afdg ,_cfce ,_bgeg ,&_dedgg );
|
|
if _bgac !=nil {return nil ,_g .Wrap (_bgac ,_gaddg ,"");};if _bgac =_afdg .setAll ();_bgac !=nil {return nil ,_g .Wrap (_bgac ,_gaddg ,"");};var _abgf SelectionValue ;for _aac :=0;_aac < _bgeg .Height ;_aac ++{for _fdac :=0;_fdac < _bgeg .Width ;_fdac ++{_abgf =_bgeg .Data [_aac ][_fdac ];
|
|
if _abgf ==SelHit {_bgac =_agedf (_afdg ,_bgeg .Cx -_fdac ,_bgeg .Cy -_aac ,_cfce .Width ,_cfce .Height ,PixSrcAndDst ,_dedgg ,0,0);if _bgac !=nil {return nil ,_g .Wrap (_bgac ,_gaddg ,"");};};};};if MorphBC ==SymmetricMorphBC {return _afdg ,nil ;};_cbgb ,_eagbf ,_bbdc ,_ecb :=_bgeg .findMaxTranslations ();
|
|
if _cbgb > 0{if _bgac =_afdg .RasterOperation (0,0,_cbgb ,_cfce .Height ,PixClr ,nil ,0,0);_bgac !=nil {return nil ,_g .Wrap (_bgac ,_gaddg ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _bbdc > 0{if _bgac =_afdg .RasterOperation (_cfce .Width -_bbdc ,0,_bbdc ,_cfce .Height ,PixClr ,nil ,0,0);
|
|
_bgac !=nil {return nil ,_g .Wrap (_bgac ,_gaddg ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _eagbf > 0{if _bgac =_afdg .RasterOperation (0,0,_cfce .Width ,_eagbf ,PixClr ,nil ,0,0);_bgac !=nil {return nil ,_g .Wrap (_bgac ,_gaddg ,"\u0079\u0070\u0020\u003e\u0020\u0030");
|
|
};};if _ecb > 0{if _bgac =_afdg .RasterOperation (0,_cfce .Height -_ecb ,_cfce .Width ,_ecb ,PixClr ,nil ,0,0);_bgac !=nil {return nil ,_g .Wrap (_bgac ,_gaddg ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _afdg ,nil ;};func _beca (_ggce *Bitmap ,_acdce *_e .Stack ,_fgcad ,_cdfg int )(_dgc *_c .Rectangle ,_gbga error ){const _fgag ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
|
|
if _ggce ==nil {return nil ,_g .Error (_fgag ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _acdce ==nil {return nil ,_g .Error (_fgag ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
|
|
};_gfeec ,_afbee :=_ggce .Width ,_ggce .Height ;_ceaea :=_gfeec -1;_dcac :=_afbee -1;if _fgcad < 0||_fgcad > _ceaea ||_cdfg < 0||_cdfg > _dcac ||!_ggce .GetPixel (_fgcad ,_cdfg ){return nil ,nil ;};_gafd :=_c .Rect (100000,100000,0,0);if _gbga =_cdfd (_acdce ,_fgcad ,_fgcad ,_cdfg ,1,_dcac ,&_gafd );
|
|
_gbga !=nil {return nil ,_g .Wrap (_gbga ,_fgag ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gbga =_cdfd (_acdce ,_fgcad ,_fgcad ,_cdfg +1,-1,_dcac ,&_gafd );_gbga !=nil {return nil ,_g .Wrap (_gbga ,_fgag ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
|
|
};_gafd .Min .X ,_gafd .Max .X =_fgcad ,_fgcad ;_gafd .Min .Y ,_gafd .Max .Y =_cdfg ,_cdfg ;var (_eabf *fillSegment ;_dfcd int ;);for _acdce .Len ()> 0{if _eabf ,_gbga =_feef (_acdce );_gbga !=nil {return nil ,_g .Wrap (_gbga ,_fgag ,"");};_cdfg =_eabf ._ggcec ;
|
|
for _fgcad =_eabf ._agede -1;_fgcad >=0&&_ggce .GetPixel (_fgcad ,_cdfg );_fgcad --{if _gbga =_ggce .SetPixel (_fgcad ,_cdfg ,0);_gbga !=nil {return nil ,_g .Wrap (_gbga ,_fgag ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _fgcad >=_eabf ._agede -1{for {for _fgcad ++;
|
|
_fgcad <=_eabf ._cfcfb +1&&_fgcad <=_ceaea &&!_ggce .GetPixel (_fgcad ,_cdfg );_fgcad ++{};_dfcd =_fgcad ;if !(_fgcad <=_eabf ._cfcfb +1&&_fgcad <=_ceaea ){break ;};for ;_fgcad <=_ceaea &&_ggce .GetPixel (_fgcad ,_cdfg );_fgcad ++{if _gbga =_ggce .SetPixel (_fgcad ,_cdfg ,0);
|
|
_gbga !=nil {return nil ,_g .Wrap (_gbga ,_fgag ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gbga =_cdfd (_acdce ,_dfcd ,_fgcad -1,_eabf ._ggcec ,_eabf ._cbcag ,_dcac ,&_gafd );_gbga !=nil {return nil ,_g .Wrap (_gbga ,_fgag ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
|
|
};if _fgcad > _eabf ._cfcfb {if _gbga =_cdfd (_acdce ,_eabf ._cfcfb +1,_fgcad -1,_eabf ._ggcec ,-_eabf ._cbcag ,_dcac ,&_gafd );_gbga !=nil {return nil ,_g .Wrap (_gbga ,_fgag ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};};continue ;};_dfcd =_fgcad +1;if _dfcd < _eabf ._agede {if _gbga =_cdfd (_acdce ,_dfcd ,_eabf ._agede -1,_eabf ._ggcec ,-_eabf ._cbcag ,_dcac ,&_gafd );_gbga !=nil {return nil ,_g .Wrap (_gbga ,_fgag ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
|
|
};};_fgcad =_eabf ._agede ;for {for ;_fgcad <=_ceaea &&_ggce .GetPixel (_fgcad ,_cdfg );_fgcad ++{if _gbga =_ggce .SetPixel (_fgcad ,_cdfg ,0);_gbga !=nil {return nil ,_g .Wrap (_gbga ,_fgag ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gbga =_cdfd (_acdce ,_dfcd ,_fgcad -1,_eabf ._ggcec ,_eabf ._cbcag ,_dcac ,&_gafd );
|
|
_gbga !=nil {return nil ,_g .Wrap (_gbga ,_fgag ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fgcad > _eabf ._cfcfb {if _gbga =_cdfd (_acdce ,_eabf ._cfcfb +1,_fgcad -1,_eabf ._ggcec ,-_eabf ._cbcag ,_dcac ,&_gafd );_gbga !=nil {return nil ,_g .Wrap (_gbga ,_fgag ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};for _fgcad ++;_fgcad <=_eabf ._cfcfb +1&&_fgcad <=_ceaea &&!_ggce .GetPixel (_fgcad ,_cdfg );_fgcad ++{};_dfcd =_fgcad ;if !(_fgcad <=_eabf ._cfcfb +1&&_fgcad <=_ceaea ){break ;};};};_gafd .Max .X ++;_gafd .Max .Y ++;return &_gafd ,nil ;};func TstFrameBitmapData ()[]byte {return _baab .Data };
|
|
func init (){for _eff :=0;_eff < 256;_eff ++{_feg [_eff ]=uint8 (_eff &0x1)+(uint8 (_eff >>1)&0x1)+(uint8 (_eff >>2)&0x1)+(uint8 (_eff >>3)&0x1)+(uint8 (_eff >>4)&0x1)+(uint8 (_eff >>5)&0x1)+(uint8 (_eff >>6)&0x1)+(uint8 (_eff >>7)&0x1);};};type Selection struct{Height ,Width int ;
|
|
Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _decf ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_ceec ,_bbd :=p1 .Width ,p1 .Height ;_gbee ,_egad :=p3 .Width ,p3 .Height ;
|
|
if _e .Abs (_ceec -_gbee )> maxDiffW {return false ,nil ;};if _e .Abs (_bbd -_egad )> maxDiffH {return false ,nil ;};_gagc :=int (delX +_e .Sign (delX )*0.5);_fbg :=int (delY +_e .Sign (delY )*0.5);var _gafa error ;_ddec :=p1 .CreateTemplate ();if _gafa =_ddec .RasterOperation (0,0,_ceec ,_bbd ,PixSrc ,p1 ,0,0);
|
|
_gafa !=nil {return false ,_g .Wrap (_gafa ,_decf ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gafa =_ddec .RasterOperation (_gagc ,_fbg ,_ceec ,_bbd ,PixNotSrcAndDst ,p4 ,0,0);_gafa !=nil {return false ,_g .Wrap (_gafa ,_decf ,"\u0021p\u0034\u0020\u0026\u0020\u0074");
|
|
};if _ddec .Zero (){return false ,nil ;};if _gafa =_ddec .RasterOperation (_gagc ,_fbg ,_gbee ,_egad ,PixSrc ,p3 ,0,0);_gafa !=nil {return false ,_g .Wrap (_gafa ,_decf ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gafa =_ddec .RasterOperation (0,0,_gbee ,_egad ,PixNotSrcAndDst ,p2 ,0,0);
|
|
_gafa !=nil {return false ,_g .Wrap (_gafa ,_decf ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _ddec .Zero (),nil ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _fede (d ,s ,hSize ,vSize )};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _gcgd (src ,sequence ...);
|
|
};func (_aaag *Bitmap )removeBorderGeneral (_feagg ,_gega ,_dgga ,_cabc int )(*Bitmap ,error ){const _aeda ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _feagg < 0||_gega < 0||_dgga < 0||_cabc < 0{return nil ,_g .Error (_aeda ,"\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");
|
|
};_ceea ,_egb :=_aaag .Width ,_aaag .Height ;_effda :=_ceea -_feagg -_gega ;_dcgb :=_egb -_dgga -_cabc ;if _effda <=0{return nil ,_g .Errorf (_aeda ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_effda );
|
|
};if _dcgb <=0{return nil ,_g .Errorf (_aeda ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_dcgb );};_bee :=New (_effda ,_dcgb );_bee .Color =_aaag .Color ;_gfec :=_bee .RasterOperation (0,0,_effda ,_dcgb ,PixSrc ,_aaag ,_feagg ,_dgga );
|
|
if _gfec !=nil {return nil ,_g .Wrap (_gfec ,_aeda ,"");};return _bee ,nil ;};type Getter interface{GetBitmap ()*Bitmap ;};func (_ddaa *Bitmap )ToImage ()_c .Image {_cdd ,_aef :=_a .NewImage (_ddaa .Width ,_ddaa .Height ,1,1,_ddaa .Data ,nil ,nil );if _aef !=nil {_eb .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",_aef );
|
|
};return _cdd ;};func (_cge *Bitmap )Equivalent (s *Bitmap )bool {return _cge .equivalent (s )};func (_fffce *Bitmaps )selectByIndexes (_edcgb []int )(*Bitmaps ,error ){_gaaga :=&Bitmaps {};for _ ,_cdcd :=range _edcgb {_fafbge ,_gecb :=_fffce .GetBitmap (_cdcd );
|
|
if _gecb !=nil {return nil ,_g .Wrap (_gecb ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_gaaga .AddBitmap (_fafbge );};return _gaaga ,nil ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;
|
|
);func (_babg *Bitmap )connComponentsBitmapsBB (_agdc *Bitmaps ,_fgbf int )(_bbce *Boxes ,_cbbg error ){const _dbbdd ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";if _fgbf !=4&&_fgbf !=8{return nil ,_g .Error (_dbbdd ,"\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 _agdc ==nil {return nil ,_g .Error (_dbbdd ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if len (_agdc .Values )> 0{return nil ,_g .Error (_dbbdd ,"\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 _babg .Zero (){return &Boxes {},nil ;};var (_ecaf ,_gegc ,_gbcd ,_edea *Bitmap ;);_babg .setPadBits (0);if _ecaf ,_cbbg =_adfb (nil ,_babg );_cbbg !=nil {return nil ,_g .Wrap (_cbbg ,_dbbdd ,"\u0062\u006d\u0031");};if _gegc ,_cbbg =_adfb (nil ,_babg );
|
|
_cbbg !=nil {return nil ,_g .Wrap (_cbbg ,_dbbdd ,"\u0062\u006d\u0032");};_ggae :=&_e .Stack {};_ggae .Aux =&_e .Stack {};_bbce =&Boxes {};var (_fdd ,_agaag int ;_ddb _c .Point ;_gee bool ;_egff *_c .Rectangle ;);for {if _ddb ,_gee ,_cbbg =_ecaf .nextOnPixel (_fdd ,_agaag );
|
|
_cbbg !=nil {return nil ,_g .Wrap (_cbbg ,_dbbdd ,"");};if !_gee {break ;};if _egff ,_cbbg =_fgdd (_ecaf ,_ggae ,_ddb .X ,_ddb .Y ,_fgbf );_cbbg !=nil {return nil ,_g .Wrap (_cbbg ,_dbbdd ,"");};if _cbbg =_bbce .Add (_egff );_cbbg !=nil {return nil ,_g .Wrap (_cbbg ,_dbbdd ,"");
|
|
};if _gbcd ,_cbbg =_ecaf .clipRectangle (_egff ,nil );_cbbg !=nil {return nil ,_g .Wrap (_cbbg ,_dbbdd ,"\u0062\u006d\u0033");};if _edea ,_cbbg =_gegc .clipRectangle (_egff ,nil );_cbbg !=nil {return nil ,_g .Wrap (_cbbg ,_dbbdd ,"\u0062\u006d\u0034");
|
|
};if _ ,_cbbg =_efge (_gbcd ,_gbcd ,_edea );_cbbg !=nil {return nil ,_g .Wrap (_cbbg ,_dbbdd ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");};if _cbbg =_gegc .RasterOperation (_egff .Min .X ,_egff .Min .Y ,_egff .Dx (),_egff .Dy (),PixSrcXorDst ,_gbcd ,0,0);
|
|
_cbbg !=nil {return nil ,_g .Wrap (_cbbg ,_dbbdd ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_agdc .AddBitmap (_gbcd );_fdd =_ddb .X ;_agaag =_ddb .Y ;};_agdc .Boxes =*_bbce ;return _bbce ,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 _ebe (_efe ,_cbf *Bitmap ,_dbb int ,_dgg []byte ,_bfc int )(_cbdc error ){const _gfea ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_gaf ,_fcb ,_bef ,_eeg ,_add ,_eec ,_gdb ,_cgb int ;
|
|
_dca ,_gdd uint32 ;_aaa ,_abb byte ;_ggg uint16 ;);_aba :=make ([]byte ,4);_dee :=make ([]byte ,4);for _bef =0;_bef < _efe .Height -1;_bef ,_eeg =_bef +2,_eeg +1{_gaf =_bef *_efe .RowStride ;_fcb =_eeg *_cbf .RowStride ;for _add ,_eec =0,0;_add < _bfc ;
|
|
_add ,_eec =_add +4,_eec +1{for _gdb =0;_gdb < 4;_gdb ++{_cgb =_gaf +_add +_gdb ;if _cgb <=len (_efe .Data )-1&&_cgb < _gaf +_efe .RowStride {_aba [_gdb ]=_efe .Data [_cgb ];}else {_aba [_gdb ]=0x00;};_cgb =_gaf +_efe .RowStride +_add +_gdb ;if _cgb <=len (_efe .Data )-1&&_cgb < _gaf +(2*_efe .RowStride ){_dee [_gdb ]=_efe .Data [_cgb ];
|
|
}else {_dee [_gdb ]=0x00;};};_dca =_ac .BigEndian .Uint32 (_aba );_gdd =_ac .BigEndian .Uint32 (_dee );_gdd |=_dca ;_gdd |=_gdd <<1;_gdd &=0xaaaaaaaa;_dca =_gdd |(_gdd <<7);_aaa =byte (_dca >>24);_abb =byte ((_dca >>8)&0xff);_cgb =_fcb +_eec ;if _cgb +1==len (_cbf .Data )-1||_cgb +1>=_fcb +_cbf .RowStride {_cbf .Data [_cgb ]=_dgg [_aaa ];
|
|
}else {_ggg =(uint16 (_dgg [_aaa ])<<8)|uint16 (_dgg [_abb ]);if _cbdc =_cbf .setTwoBytes (_cgb ,_ggg );_cbdc !=nil {return _g .Wrapf (_cbdc ,_gfea ,"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",_cgb );
|
|
};_eec ++;};};};return nil ;};type MorphOperation int ;func _fbd ()(_ea [256]uint64 ){for _daca :=0;_daca < 256;_daca ++{if _daca &0x01!=0{_ea [_daca ]|=0xff;};if _daca &0x02!=0{_ea [_daca ]|=0xff00;};if _daca &0x04!=0{_ea [_daca ]|=0xff0000;};if _daca &0x08!=0{_ea [_daca ]|=0xff000000;
|
|
};if _daca &0x10!=0{_ea [_daca ]|=0xff00000000;};if _daca &0x20!=0{_ea [_daca ]|=0xff0000000000;};if _daca &0x40!=0{_ea [_daca ]|=0xff000000000000;};if _daca &0x80!=0{_ea [_daca ]|=0xff00000000000000;};};return _ea ;};const (_gcfc shift =iota ;_gedaa ;
|
|
);func _efdc (_bbeg ,_afgag *Bitmap ,_efged ,_aaeb ,_fbae ,_dfed ,_bfeb int ,_gbbf CombinationOperator )error {var _egf int ;_bfec :=func (){_egf ++;_fbae +=_afgag .RowStride ;_dfed +=_bbeg .RowStride ;_bfeb +=_bbeg .RowStride };for _egf =_efged ;_egf < _aaeb ;
|
|
_bfec (){_ffcde :=_fbae ;for _bgce :=_dfed ;_bgce <=_bfeb ;_bgce ++{_dfc ,_dbad :=_afgag .GetByte (_ffcde );if _dbad !=nil {return _dbad ;};_aagf ,_dbad :=_bbeg .GetByte (_bgce );if _dbad !=nil {return _dbad ;};if _dbad =_afgag .SetByte (_ffcde ,_eegfa (_dfc ,_aagf ,_gbbf ));
|
|
_dbad !=nil {return _dbad ;};_ffcde ++;};};return nil ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _ccc ,_aae int ;_gdg :=src .RowStride -1;if x < 0{_aae =-x ;x =0;}else if x +src .Width > dst .Width {_gdg -=src .Width +x -dst .Width ;
|
|
};if y < 0{_ccc =-y ;y =0;_aae +=src .RowStride ;_gdg +=src .RowStride ;}else if y +src .Height > dst .Height {_ccc =src .Height +y -dst .Height ;};var (_bedfc int ;_gafb error ;);_bdab :=x &0x07;_bfb :=8-_bdab ;_fbff :=src .Width &0x07;_ceeg :=_bfb -_fbff ;
|
|
_dfbg :=_bfb &0x07!=0;_fcea :=src .Width <=((_gdg -_aae )<<3)+_bfb ;_gafc :=dst .GetByteIndex (x ,y );_ccf :=_ccc +dst .Height ;if src .Height > _ccf {_bedfc =_ccf ;}else {_bedfc =src .Height ;};switch {case !_dfbg :_gafb =_efdc (src ,dst ,_ccc ,_bedfc ,_gafc ,_aae ,_gdg ,op );
|
|
case _fcea :_gafb =_eced (src ,dst ,_ccc ,_bedfc ,_gafc ,_aae ,_gdg ,_ceeg ,_bdab ,_bfb ,op );default:_gafb =_bgf (src ,dst ,_ccc ,_bedfc ,_gafc ,_aae ,_gdg ,_ceeg ,_bdab ,_bfb ,op ,_fbff );};return _gafb ;};func (_efg *Bitmap )setEightFullBytes (_faba int ,_ebef uint64 )error {if _faba +7> len (_efg .Data )-1{return _g .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");
|
|
};_efg .Data [_faba ]=byte ((_ebef &0xff00000000000000)>>56);_efg .Data [_faba +1]=byte ((_ebef &0xff000000000000)>>48);_efg .Data [_faba +2]=byte ((_ebef &0xff0000000000)>>40);_efg .Data [_faba +3]=byte ((_ebef &0xff00000000)>>32);_efg .Data [_faba +4]=byte ((_ebef &0xff000000)>>24);
|
|
_efg .Data [_faba +5]=byte ((_ebef &0xff0000)>>16);_efg .Data [_faba +6]=byte ((_ebef &0xff00)>>8);_efg .Data [_faba +7]=byte (_ebef &0xff);return nil ;};func (_effgc *Bitmaps )SortByWidth (){_gggb :=(*byWidth )(_effgc );_fe .Sort (_gggb )};func (_eebb *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_ebgf *Bitmaps ,_aegg *Boxes ,_cbcc error ){const _effde ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
|
|
if _eebb ==nil {return nil ,nil ,_g .Error (_effde ,"\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 ,_g .Error (_effde ,"\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 _eebb .Zero (){_aegg =&Boxes {};_ebgf =&Bitmaps {};return _ebgf ,_aegg ,nil ;};switch components {case ComponentConn :_ebgf =&Bitmaps {};if _aegg ,_cbcc =_eebb .ConnComponents (_ebgf ,8);_cbcc !=nil {return nil ,nil ,_g .Wrap (_cbcc ,_effde ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};case ComponentCharacters :_edb ,_gbda :=MorphSequence (_eebb ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _gbda !=nil {return nil ,nil ,_g .Wrap (_gbda ,_effde ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};if _eb .Log .IsLogLevel (_eb .LogLevelTrace ){_eb .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",_edb .String ());
|
|
};_ffbg :=&Bitmaps {};_aegg ,_gbda =_edb .ConnComponents (_ffbg ,8);if _gbda !=nil {return nil ,nil ,_g .Wrap (_gbda ,_effde ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};if _eb .Log .IsLogLevel (_eb .LogLevelTrace ){_eb .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",_ffbg .String ());
|
|
};if _ebgf ,_gbda =_ffbg .ClipToBitmap (_eebb );_gbda !=nil {return nil ,nil ,_g .Wrap (_gbda ,_effde ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_aadb :=1;
|
|
var _geda *Bitmap ;switch {case _eebb .XResolution <=200:_geda =_eebb ;case _eebb .XResolution <=400:_aadb =2;_geda ,_cbcc =_cdgc (_eebb ,1,0,0,0);if _cbcc !=nil {return nil ,nil ,_g .Wrap (_cbcc ,_effde ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
|
|
};default:_aadb =4;_geda ,_cbcc =_cdgc (_eebb ,1,1,0,0);if _cbcc !=nil {return nil ,nil ,_g .Wrap (_cbcc ,_effde ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
|
|
};};_dgdf ,_ ,_fad :=_gfee (_geda );if _fad !=nil {return nil ,nil ,_g .Wrap (_fad ,_effde ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_cfbb ,_fad :=_eeea (_dgdf ,_aadb );if _fad !=nil {return nil ,nil ,_g .Wrap (_fad ,_effde ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
|
|
};_bdf :=&Bitmaps {};if _aegg ,_fad =_cfbb .ConnComponents (_bdf ,4);_fad !=nil {return nil ,nil ,_g .Wrap (_fad ,_effde ,"\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 _ebgf ,_fad =_bdf .ClipToBitmap (_eebb );_fad !=nil {return nil ,nil ,_g .Wrap (_fad ,_effde ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_ebgf ,_cbcc =_ebgf .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
|
|
if _cbcc !=nil {return nil ,nil ,_g .Wrap (_cbcc ,_effde ,"");};_aegg ,_cbcc =_aegg .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _cbcc !=nil {return nil ,nil ,_g .Wrap (_cbcc ,_effde ,"");};return _ebgf ,_aegg ,nil ;};func (_dcfg Points )Get (i int )(Point ,error ){if i > len (_dcfg )-1{return Point {},_g .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 _dcfg [i ],nil ;};func _fede (_fead ,_fec *Bitmap ,_ggbc ,_bdc int )(*Bitmap ,error ){const _ffgf ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _fec ==nil {_eb .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 ,_g .Error (_ffgf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _ggbc < 1||_bdc < 1{return nil ,_g .Error (_ffgf ,"\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 _ggbc ==1&&_bdc ==1{_acge ,_fbab :=_adfb (_fead ,_fec );if _fbab !=nil {return nil ,_g .Wrap (_fbab ,_ffgf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};
|
|
return _acge ,nil ;};if _ggbc ==1||_bdc ==1{_bbcf :=SelCreateBrick (_bdc ,_ggbc ,_bdc /2,_ggbc /2,SelHit );_deeg ,_aceeg :=_gaeb (_fead ,_fec ,_bbcf );if _aceeg !=nil {return nil ,_g .Wrap (_aceeg ,_ffgf ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _deeg ,nil ;};_agcaf :=SelCreateBrick (1,_ggbc ,0,_ggbc /2,SelHit );_aabf :=SelCreateBrick (_bdc ,1,_bdc /2,0,SelHit );_acea ,_badd :=_gaeb (nil ,_fec ,_agcaf );if _badd !=nil {return nil ,_g .Wrap (_badd ,_ffgf ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};_fead ,_badd =_gaeb (_fead ,_acea ,_aabf );if _badd !=nil {return nil ,_g .Wrap (_badd ,_ffgf ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _fead ,nil ;};func _gfee (_egba *Bitmap )(_gbbg *Bitmap ,_bgaa int ,_gede error ){const _afde ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
|
|
if _egba ==nil {return nil ,0,_g .Errorf (_afde ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _ebeg ,_cbea *Bitmap ;if _ebeg ,_gede =_adfb (nil ,_egba );_gede !=nil {return nil ,0,_g .Wrap (_gede ,_afde ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
|
|
};var (_gffb [13]int ;_egbae ,_bcaf int ;);_gdee :=12;_bfgc :=_e .NewNumSlice (_gdee +1);_dcbf :=_e .NewNumSlice (_gdee +1);var _bfcg *Boxes ;for _gfg :=0;_gfg <=_gdee ;_gfg ++{if _gfg ==0{if _cbea ,_gede =_adfb (nil ,_ebeg );_gede !=nil {return nil ,0,_g .Wrap (_gede ,_afde ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
|
|
};}else {if _cbea ,_gede =_gcgd (_ebeg ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_gede !=nil {return nil ,0,_g .Wrap (_gede ,_afde ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _bfcg ,_gede =_cbea .connComponentsBB (4);
|
|
_gede !=nil {return nil ,0,_g .Wrap (_gede ,_afde ,"");};_gffb [_gfg ]=len (*_bfcg );_bfgc .AddInt (_gffb [_gfg ]);switch _gfg {case 0:_egbae =_gffb [0];default:_bcaf =_gffb [_gfg -1]-_gffb [_gfg ];_dcbf .AddInt (_bcaf );};_ebeg =_cbea ;};_fcgge :=true ;
|
|
_efgd :=2;var _ebfc ,_dbbg int ;for _cfed :=1;_cfed < len (*_dcbf );_cfed ++{if _ebfc ,_gede =_bfgc .GetInt (_cfed );_gede !=nil {return nil ,0,_g .Wrap (_gede ,_afde ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
|
|
};if _fcgge &&_ebfc < int (0.3*float32 (_egbae )){_efgd =_cfed +1;_fcgge =false ;};if _bcaf ,_gede =_dcbf .GetInt (_cfed );_gede !=nil {return nil ,0,_g .Wrap (_gede ,_afde ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
|
|
};if _bcaf > _dbbg {_dbbg =_bcaf ;};};_edcga :=_egba .XResolution ;if _edcga ==0{_edcga =150;};if _edcga > 110{_efgd ++;};if _efgd < 2{_eb .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");
|
|
_efgd =2;};_bgaa =_efgd +1;if _gbbg ,_gede =_cad (nil ,_egba ,_efgd +1,1);_gede !=nil {return nil ,0,_g .Wrap (_gede ,_afde ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _gbbg ,_bgaa ,nil ;
|
|
};func _feef (_fefd *_e .Stack )(_baged *fillSegment ,_gceb error ){const _gcga ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _fefd ==nil {return nil ,_g .Error (_gcga ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
|
|
};if _fefd .Aux ==nil {return nil ,_g .Error (_gcga ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_dfcdf ,_eage :=_fefd .Pop ();if !_eage {return nil ,nil ;};_dad ,_eage :=_dfcdf .(*fillSegment );
|
|
if !_eage {return nil ,_g .Error (_gcga ,"\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");};_baged =&fillSegment {_dad ._agede ,_dad ._cfcfb ,_dad ._ggcec +_dad ._cbcag ,_dad ._cbcag };
|
|
_fefd .Aux .Push (_dad );return _baged ,nil ;};func _ebc (_fcf ,_fgg *Bitmap ,_gga int ,_bcd []byte ,_cbe int )(_eegb error ){const _bbf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";
|
|
var (_adb ,_gfd ,_faac ,_fab ,_gcg ,_bff ,_bfcd ,_cca int ;_dfa ,_cegfc ,_gfc ,_ddcd uint32 ;_cbg ,_cbga byte ;_ebf uint16 ;);_dggg :=make ([]byte ,4);_bfd :=make ([]byte ,4);for _faac =0;_faac < _fcf .Height -1;_faac ,_fab =_faac +2,_fab +1{_adb =_faac *_fcf .RowStride ;
|
|
_gfd =_fab *_fgg .RowStride ;for _gcg ,_bff =0,0;_gcg < _cbe ;_gcg ,_bff =_gcg +4,_bff +1{for _bfcd =0;_bfcd < 4;_bfcd ++{_cca =_adb +_gcg +_bfcd ;if _cca <=len (_fcf .Data )-1&&_cca < _adb +_fcf .RowStride {_dggg [_bfcd ]=_fcf .Data [_cca ];}else {_dggg [_bfcd ]=0x00;
|
|
};_cca =_adb +_fcf .RowStride +_gcg +_bfcd ;if _cca <=len (_fcf .Data )-1&&_cca < _adb +(2*_fcf .RowStride ){_bfd [_bfcd ]=_fcf .Data [_cca ];}else {_bfd [_bfcd ]=0x00;};};_dfa =_ac .BigEndian .Uint32 (_dggg );_cegfc =_ac .BigEndian .Uint32 (_bfd );_gfc =_dfa &_cegfc ;
|
|
_gfc |=_gfc <<1;_ddcd =_dfa |_cegfc ;_ddcd &=_ddcd <<1;_cegfc =_gfc &_ddcd ;_cegfc &=0xaaaaaaaa;_dfa =_cegfc |(_cegfc <<7);_cbg =byte (_dfa >>24);_cbga =byte ((_dfa >>8)&0xff);_cca =_gfd +_bff ;if _cca +1==len (_fgg .Data )-1||_cca +1>=_gfd +_fgg .RowStride {if _eegb =_fgg .SetByte (_cca ,_bcd [_cbg ]);
|
|
_eegb !=nil {return _g .Wrapf (_eegb ,_bbf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_cca );};}else {_ebf =(uint16 (_bcd [_cbg ])<<8)|uint16 (_bcd [_cbga ]);if _eegb =_fgg .setTwoBytes (_cca ,_ebf );_eegb !=nil {return _g .Wrapf (_eegb ,_bbf ,"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",_cca );
|
|
};_bff ++;};};};return nil ;};func (_efbd Points )GetGeometry (i int )(_adebe ,_bfcgg float32 ,_bfag error ){if i > len (_efbd )-1{return 0,0,_g .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 );
|
|
};_fgcg :=_efbd [i ];return _fgcg .X ,_fgcg .Y ,nil ;};func (_gcda CombinationOperator )String ()string {var _bgafa string ;switch _gcda {case CmbOpOr :_bgafa ="\u004f\u0052";case CmbOpAnd :_bgafa ="\u0041\u004e\u0044";case CmbOpXor :_bgafa ="\u0058\u004f\u0052";
|
|
case CmbOpXNor :_bgafa ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_bgafa ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_bgafa ="\u004e\u004f\u0054";};return _bgafa ;};func _adc (_bfdf int )int {if _bfdf < 0{return -_bfdf ;};return _bfdf ;
|
|
};func _egd (_ccd *Bitmap ,_db ,_gaa int )(*Bitmap ,error ){const _ee ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _ccd ==nil {return nil ,_g .Error (_ee ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _db <=0||_gaa <=0{return nil ,_g .Error (_ee ,"\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 _db ==_gaa {if _db ==1{_cgc ,_ceg :=_adfb (nil ,_ccd );
|
|
if _ceg !=nil {return nil ,_g .Wrap (_ceg ,_ee ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _cgc ,nil ;};if _db ==2||_db ==4||_db ==8{_ecg ,_accb :=_aa (_ccd ,_db );if _accb !=nil {return nil ,_g .Wrap (_accb ,_ee ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");
|
|
};return _ecg ,nil ;};};_cdg :=_db *_ccd .Width ;_afg :=_gaa *_ccd .Height ;_abg :=New (_cdg ,_afg );_fba :=_abg .RowStride ;var (_dg ,_abee ,_bed ,_ecga ,_ded int ;_edf byte ;_df error ;);for _abee =0;_abee < _ccd .Height ;_abee ++{_dg =_gaa *_abee *_fba ;
|
|
for _bed =0;_bed < _ccd .Width ;_bed ++{if _bgb :=_ccd .GetPixel (_bed ,_abee );_bgb {_ded =_db *_bed ;for _ecga =0;_ecga < _db ;_ecga ++{_abg .setBit (_dg *8+_ded +_ecga );};};};for _ecga =1;_ecga < _gaa ;_ecga ++{_dac :=_dg +_ecga *_fba ;for _cag :=0;
|
|
_cag < _fba ;_cag ++{if _edf ,_df =_abg .GetByte (_dg +_cag );_df !=nil {return nil ,_g .Wrapf (_df ,_ee ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_ecga );};if _df =_abg .SetByte (_dac +_cag ,_edf );
|
|
_df !=nil {return nil ,_g .Wrap (_df ,_ee ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _abg ,nil ;};type BoundaryCondition int ;func _gcgd (_cfcf *Bitmap ,_eeca ...MorphProcess )(_cgca *Bitmap ,_aefg error ){const _cccf ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";
|
|
if _cfcf ==nil {return nil ,_g .Error (_cccf ,"\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 (_eeca )==0{return nil ,_g .Error (_cccf ,"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 _aefg =_bdgc (_eeca ...);
|
|
_aefg !=nil {return nil ,_g .Wrap (_aefg ,_cccf ,"");};var _egg ,_cfbe ,_dgdc int ;_cgca =_cfcf .Copy ();for _ ,_gfbc :=range _eeca {switch _gfbc .Operation {case MopDilation :_egg ,_cfbe =_gfbc .getWidthHeight ();_cgca ,_aefg =DilateBrick (nil ,_cgca ,_egg ,_cfbe );
|
|
if _aefg !=nil {return nil ,_g .Wrap (_aefg ,_cccf ,"");};case MopErosion :_egg ,_cfbe =_gfbc .getWidthHeight ();_cgca ,_aefg =_cagcf (nil ,_cgca ,_egg ,_cfbe );if _aefg !=nil {return nil ,_g .Wrap (_aefg ,_cccf ,"");};case MopOpening :_egg ,_cfbe =_gfbc .getWidthHeight ();
|
|
_cgca ,_aefg =_fbgf (nil ,_cgca ,_egg ,_cfbe );if _aefg !=nil {return nil ,_g .Wrap (_aefg ,_cccf ,"");};case MopClosing :_egg ,_cfbe =_gfbc .getWidthHeight ();_cgca ,_aefg =_acg (nil ,_cgca ,_egg ,_cfbe );if _aefg !=nil {return nil ,_g .Wrap (_aefg ,_cccf ,"");
|
|
};case MopRankBinaryReduction :_cgca ,_aefg =_cdgc (_cgca ,_gfbc .Arguments ...);if _aefg !=nil {return nil ,_g .Wrap (_aefg ,_cccf ,"");};case MopReplicativeBinaryExpansion :_cgca ,_aefg =_eeea (_cgca ,_gfbc .Arguments [0]);if _aefg !=nil {return nil ,_g .Wrap (_aefg ,_cccf ,"");
|
|
};case MopAddBorder :_dgdc =_gfbc .Arguments [0];_cgca ,_aefg =_cgca .AddBorder (_dgdc ,0);if _aefg !=nil {return nil ,_g .Wrap (_aefg ,_cccf ,"");};default:return nil ,_g .Error (_cccf ,"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 _dgdc > 0{_cgca ,_aefg =_cgca .RemoveBorder (_dgdc );if _aefg !=nil {return nil ,_g .Wrap (_aefg ,_cccf ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _cgca ,nil ;};func (_fcbc *Boxes )makeSizeIndicator (_eaagc ,_faeb int ,_beaa LocationFilter ,_ggaf SizeComparison )*_e .NumSlice {_bcag :=&_e .NumSlice {};
|
|
var _bcbg ,_adfa ,_bbc int ;for _ ,_cacb :=range *_fcbc {_bcbg =0;_adfa ,_bbc =_cacb .Dx (),_cacb .Dy ();switch _beaa {case LocSelectWidth :if (_ggaf ==SizeSelectIfLT &&_adfa < _eaagc )||(_ggaf ==SizeSelectIfGT &&_adfa > _eaagc )||(_ggaf ==SizeSelectIfLTE &&_adfa <=_eaagc )||(_ggaf ==SizeSelectIfGTE &&_adfa >=_eaagc ){_bcbg =1;
|
|
};case LocSelectHeight :if (_ggaf ==SizeSelectIfLT &&_bbc < _faeb )||(_ggaf ==SizeSelectIfGT &&_bbc > _faeb )||(_ggaf ==SizeSelectIfLTE &&_bbc <=_faeb )||(_ggaf ==SizeSelectIfGTE &&_bbc >=_faeb ){_bcbg =1;};case LocSelectIfEither :if (_ggaf ==SizeSelectIfLT &&(_bbc < _faeb ||_adfa < _eaagc ))||(_ggaf ==SizeSelectIfGT &&(_bbc > _faeb ||_adfa > _eaagc ))||(_ggaf ==SizeSelectIfLTE &&(_bbc <=_faeb ||_adfa <=_eaagc ))||(_ggaf ==SizeSelectIfGTE &&(_bbc >=_faeb ||_adfa >=_eaagc )){_bcbg =1;
|
|
};case LocSelectIfBoth :if (_ggaf ==SizeSelectIfLT &&(_bbc < _faeb &&_adfa < _eaagc ))||(_ggaf ==SizeSelectIfGT &&(_bbc > _faeb &&_adfa > _eaagc ))||(_ggaf ==SizeSelectIfLTE &&(_bbc <=_faeb &&_adfa <=_eaagc ))||(_ggaf ==SizeSelectIfGTE &&(_bbc >=_faeb &&_adfa >=_eaagc )){_bcbg =1;
|
|
};};_bcag .AddInt (_bcbg );};return _bcag ;};func _dddb ()[]int {_ebbc :=make ([]int ,256);_ebbc [0]=0;_ebbc [1]=7;var _fggbd int ;for _fggbd =2;_fggbd < 4;_fggbd ++{_ebbc [_fggbd ]=_ebbc [_fggbd -2]+6;};for _fggbd =4;_fggbd < 8;_fggbd ++{_ebbc [_fggbd ]=_ebbc [_fggbd -4]+5;
|
|
};for _fggbd =8;_fggbd < 16;_fggbd ++{_ebbc [_fggbd ]=_ebbc [_fggbd -8]+4;};for _fggbd =16;_fggbd < 32;_fggbd ++{_ebbc [_fggbd ]=_ebbc [_fggbd -16]+3;};for _fggbd =32;_fggbd < 64;_fggbd ++{_ebbc [_fggbd ]=_ebbc [_fggbd -32]+2;};for _fggbd =64;_fggbd < 128;
|
|
_fggbd ++{_ebbc [_fggbd ]=_ebbc [_fggbd -64]+1;};for _fggbd =128;_fggbd < 256;_fggbd ++{_ebbc [_fggbd ]=_ebbc [_fggbd -128];};return _ebbc ;};func (_adfed *Bitmaps )AddBox (box *_c .Rectangle ){_adfed .Boxes =append (_adfed .Boxes ,box )};func (_aec *Bitmap )countPixels ()int {var (_cbdf int ;
|
|
_affe uint8 ;_ccda byte ;_beb int ;);_ebcd :=_aec .RowStride ;_eece :=uint (_aec .Width &0x07);if _eece !=0{_affe =uint8 ((0xff<<(8-_eece ))&0xff);_ebcd --;};for _gbcb :=0;_gbcb < _aec .Height ;_gbcb ++{for _beb =0;_beb < _ebcd ;_beb ++{_ccda =_aec .Data [_gbcb *_aec .RowStride +_beb ];
|
|
_cbdf +=int (_feg [_ccda ]);};if _eece !=0{_cbdf +=int (_feg [_aec .Data [_gbcb *_aec .RowStride +_beb ]&_affe ]);};};return _cbdf ;};func (_efae MorphProcess )getWidthHeight ()(_ecae ,_fada int ){return _efae .Arguments [0],_efae .Arguments [1];};func _dbg (_ffg *Bitmap ,_cbb int ,_eac []byte )(_acfg *Bitmap ,_cfb error ){const _cegb ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";
|
|
if _ffg ==nil {return nil ,_g .Error (_cegb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _cbb < 1||_cbb > 4{return nil ,_g .Error (_cegb ,"\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 _ffg .Height <=1{return nil ,_g .Errorf (_cegb ,"\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",_ffg .Height );
|
|
};_acfg =New (_ffg .Width /2,_ffg .Height /2);if _eac ==nil {_eac =_fdff ();};_faa :=_gbdb (_ffg .RowStride ,2*_acfg .RowStride );switch _cbb {case 1:_cfb =_ebe (_ffg ,_acfg ,_cbb ,_eac ,_faa );case 2:_cfb =_agcc (_ffg ,_acfg ,_cbb ,_eac ,_faa );case 3:_cfb =_ebc (_ffg ,_acfg ,_cbb ,_eac ,_faa );
|
|
case 4:_cfb =_aga (_ffg ,_acfg ,_cbb ,_eac ,_faa );};if _cfb !=nil {return nil ,_cfb ;};return _acfg ,nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_gdeb float64 ,_cgg error ){const _cedf ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
|
|
if bm1 ==nil ||bm2 ==nil {return 0,_g .Error (_cedf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_g .Error (_cedf ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
|
|
};if area1 <=0||area2 <=0{return 0,_g .Error (_cedf ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_baef ,_baeg :=bm1 .Width ,bm1 .Height ;_ecd ,_fbba :=bm2 .Width ,bm2 .Height ;
|
|
_bdaf :=_adc (_baef -_ecd );if _bdaf > maxDiffW {return 0,nil ;};_dedb :=_adc (_baeg -_fbba );if _dedb > maxDiffH {return 0,nil ;};var _fcbf ,_baec int ;if delX >=0{_fcbf =int (delX +0.5);}else {_fcbf =int (delX -0.5);};if delY >=0{_baec =int (delY +0.5);
|
|
}else {_baec =int (delY -0.5);};_cdf :=_fag (_baec ,0);_edde :=_gbdb (_fbba +_baec ,_baeg );_ccfg :=bm1 .RowStride *_cdf ;_eaeg :=bm2 .RowStride *(_cdf -_baec );_bbcg :=_fag (_fcbf ,0);_acaf :=_gbdb (_ecd +_fcbf ,_baef );_agac :=bm2 .RowStride ;var _cagc ,_age int ;
|
|
if _fcbf >=8{_cagc =_fcbf >>3;_ccfg +=_cagc ;_bbcg -=_cagc <<3;_acaf -=_cagc <<3;_fcbf &=7;}else if _fcbf <=-8{_age =-((_fcbf +7)>>3);_eaeg +=_age ;_agac -=_age ;_fcbf +=_age <<3;};if _bbcg >=_acaf ||_cdf >=_edde {return 0,nil ;};_febf :=(_acaf +7)>>3;
|
|
var (_bfcb ,_ccdf ,_fbafa byte ;_eacbg ,_ecgb ,_befc int ;);switch {case _fcbf ==0:for _befc =_cdf ;_befc < _edde ;_befc ,_ccfg ,_eaeg =_befc +1,_ccfg +bm1 .RowStride ,_eaeg +bm2 .RowStride {for _ecgb =0;_ecgb < _febf ;_ecgb ++{_fbafa =bm1 .Data [_ccfg +_ecgb ]&bm2 .Data [_eaeg +_ecgb ];
|
|
_eacbg +=tab [_fbafa ];};};case _fcbf > 0:if _agac < _febf {for _befc =_cdf ;_befc < _edde ;_befc ,_ccfg ,_eaeg =_befc +1,_ccfg +bm1 .RowStride ,_eaeg +bm2 .RowStride {_bfcb ,_ccdf =bm1 .Data [_ccfg ],bm2 .Data [_eaeg ]>>uint (_fcbf );_fbafa =_bfcb &_ccdf ;
|
|
_eacbg +=tab [_fbafa ];for _ecgb =1;_ecgb < _agac ;_ecgb ++{_bfcb ,_ccdf =bm1 .Data [_ccfg +_ecgb ],(bm2 .Data [_eaeg +_ecgb ]>>uint (_fcbf ))|(bm2 .Data [_eaeg +_ecgb -1]<<uint (8-_fcbf ));_fbafa =_bfcb &_ccdf ;_eacbg +=tab [_fbafa ];};_bfcb =bm1 .Data [_ccfg +_ecgb ];
|
|
_ccdf =bm2 .Data [_eaeg +_ecgb -1]<<uint (8-_fcbf );_fbafa =_bfcb &_ccdf ;_eacbg +=tab [_fbafa ];};}else {for _befc =_cdf ;_befc < _edde ;_befc ,_ccfg ,_eaeg =_befc +1,_ccfg +bm1 .RowStride ,_eaeg +bm2 .RowStride {_bfcb ,_ccdf =bm1 .Data [_ccfg ],bm2 .Data [_eaeg ]>>uint (_fcbf );
|
|
_fbafa =_bfcb &_ccdf ;_eacbg +=tab [_fbafa ];for _ecgb =1;_ecgb < _febf ;_ecgb ++{_bfcb =bm1 .Data [_ccfg +_ecgb ];_ccdf =(bm2 .Data [_eaeg +_ecgb ]>>uint (_fcbf ))|(bm2 .Data [_eaeg +_ecgb -1]<<uint (8-_fcbf ));_fbafa =_bfcb &_ccdf ;_eacbg +=tab [_fbafa ];
|
|
};};};default:if _febf < _agac {for _befc =_cdf ;_befc < _edde ;_befc ,_ccfg ,_eaeg =_befc +1,_ccfg +bm1 .RowStride ,_eaeg +bm2 .RowStride {for _ecgb =0;_ecgb < _febf ;_ecgb ++{_bfcb =bm1 .Data [_ccfg +_ecgb ];_ccdf =bm2 .Data [_eaeg +_ecgb ]<<uint (-_fcbf );
|
|
_ccdf |=bm2 .Data [_eaeg +_ecgb +1]>>uint (8+_fcbf );_fbafa =_bfcb &_ccdf ;_eacbg +=tab [_fbafa ];};};}else {for _befc =_cdf ;_befc < _edde ;_befc ,_ccfg ,_eaeg =_befc +1,_ccfg +bm1 .RowStride ,_eaeg +bm2 .RowStride {for _ecgb =0;_ecgb < _febf -1;_ecgb ++{_bfcb =bm1 .Data [_ccfg +_ecgb ];
|
|
_ccdf =bm2 .Data [_eaeg +_ecgb ]<<uint (-_fcbf );_ccdf |=bm2 .Data [_eaeg +_ecgb +1]>>uint (8+_fcbf );_fbafa =_bfcb &_ccdf ;_eacbg +=tab [_fbafa ];};_bfcb =bm1 .Data [_ccfg +_ecgb ];_ccdf =bm2 .Data [_eaeg +_ecgb ]<<uint (-_fcbf );_fbafa =_bfcb &_ccdf ;
|
|
_eacbg +=tab [_fbafa ];};};};_gdeb =float64 (_eacbg )*float64 (_eacbg )/(float64 (area1 )*float64 (area2 ));return _gdeb ,nil ;};func _cdgc (_bc *Bitmap ,_fdf ...int )(_bcb *Bitmap ,_ccdd error ){const _acdd ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
|
|
if _bc ==nil {return nil ,_g .Error (_acdd ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_fdf )==0||len (_fdf )> 4{return nil ,_g .Error (_acdd ,"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 _fdf [0]<=0{_eb .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");_bcb ,_ccdd =_adfb (nil ,_bc );if _ccdd !=nil {return nil ,_g .Wrap (_ccdd ,_acdd ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
|
|
};return _bcb ,nil ;};_abge :=_fdff ();_bcb =_bc ;for _gc ,_agb :=range _fdf {if _agb <=0{break ;};_bcb ,_ccdd =_dbg (_bcb ,_agb ,_abge );if _ccdd !=nil {return nil ,_g .Wrapf (_ccdd ,_acdd ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_gc );
|
|
};};return _bcb ,nil ;};func _fag (_cbgf ,_dec int )int {if _cbgf > _dec {return _cbgf ;};return _dec ;};func (_gfba *ClassedPoints )SortByX (){_gfba ._efff =_gfba .xSortFunction ();_fe .Sort (_gfba )};func (_gbdg *Bitmap )setEightPartlyBytes (_ecfc ,_eeaa int ,_afd uint64 )(_faaa error ){var (_bebg byte ;
|
|
_ecge int ;);const _cbfg ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _agd :=1;_agd <=_eeaa ;_agd ++{_ecge =64-_agd *8;_bebg =byte (_afd >>uint (_ecge )&0xff);_eb .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",_bebg ,_ecfc ,_ecfc +_agd -1,_eeaa ,_ecge );
|
|
if _faaa =_gbdg .SetByte (_ecfc +_agd -1,_bebg );_faaa !=nil {return _g .Wrap (_faaa ,_cbfg ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_cecg :=_gbdg .RowStride *8-_gbdg .Width ;if _cecg ==0{return nil ;};_ecge -=8;_bebg =byte (_afd >>uint (_ecge )&0xff)<<uint (_cecg );
|
|
if _faaa =_gbdg .SetByte (_ecfc +_eeaa ,_bebg );_faaa !=nil {return _g .Wrap (_faaa ,_cbfg ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func _ageb (_fged *Bitmap ,_eabg ,_cfggb ,_gbed ,_gdea int ,_ggec RasterOperator ,_babb *Bitmap ,_ddda ,_cafg int )error {var (_cfedc bool ;
|
|
_fded bool ;_bbcd int ;_fcaa int ;_fcfc int ;_afaf bool ;_fdb byte ;_efcd int ;_bggcg int ;_caaf int ;_ccbg ,_bbca int ;);_ebdg :=8-(_eabg &7);_bfba :=_becb [_ebdg ];_bbff :=_fged .RowStride *_cfggb +(_eabg >>3);_fecg :=_babb .RowStride *_cafg +(_ddda >>3);
|
|
if _gbed < _ebdg {_cfedc =true ;_bfba &=_ddcf [8-_ebdg +_gbed ];};if !_cfedc {_bbcd =(_gbed -_ebdg )>>3;if _bbcd > 0{_fded =true ;_fcaa =_bbff +1;_fcfc =_fecg +1;};};_efcd =(_eabg +_gbed )&7;if !(_cfedc ||_efcd ==0){_afaf =true ;_fdb =_ddcf [_efcd ];_bggcg =_bbff +1+_bbcd ;
|
|
_caaf =_fecg +1+_bbcd ;};switch _ggec {case PixSrc :for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bbff ]=_dcde (_fged .Data [_bbff ],_babb .Data [_fecg ],_bfba );_bbff +=_fged .RowStride ;_fecg +=_babb .RowStride ;};if _fded {for _ccbg =0;_ccbg < _gdea ;
|
|
_ccbg ++{for _bbca =0;_bbca < _bbcd ;_bbca ++{_fged .Data [_fcaa +_bbca ]=_babb .Data [_fcfc +_bbca ];};_fcaa +=_fged .RowStride ;_fcfc +=_babb .RowStride ;};};if _afaf {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bggcg ]=_dcde (_fged .Data [_bggcg ],_babb .Data [_caaf ],_fdb );
|
|
_bggcg +=_fged .RowStride ;_caaf +=_babb .RowStride ;};};case PixNotSrc :for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bbff ]=_dcde (_fged .Data [_bbff ],^_babb .Data [_fecg ],_bfba );_bbff +=_fged .RowStride ;_fecg +=_babb .RowStride ;};if _fded {for _ccbg =0;
|
|
_ccbg < _gdea ;_ccbg ++{for _bbca =0;_bbca < _bbcd ;_bbca ++{_fged .Data [_fcaa +_bbca ]=^_babb .Data [_fcfc +_bbca ];};_fcaa +=_fged .RowStride ;_fcfc +=_babb .RowStride ;};};if _afaf {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bggcg ]=_dcde (_fged .Data [_bggcg ],^_babb .Data [_caaf ],_fdb );
|
|
_bggcg +=_fged .RowStride ;_caaf +=_babb .RowStride ;};};case PixSrcOrDst :for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bbff ]=_dcde (_fged .Data [_bbff ],_babb .Data [_fecg ]|_fged .Data [_bbff ],_bfba );_bbff +=_fged .RowStride ;_fecg +=_babb .RowStride ;
|
|
};if _fded {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{for _bbca =0;_bbca < _bbcd ;_bbca ++{_fged .Data [_fcaa +_bbca ]|=_babb .Data [_fcfc +_bbca ];};_fcaa +=_fged .RowStride ;_fcfc +=_babb .RowStride ;};};if _afaf {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bggcg ]=_dcde (_fged .Data [_bggcg ],_babb .Data [_caaf ]|_fged .Data [_bggcg ],_fdb );
|
|
_bggcg +=_fged .RowStride ;_caaf +=_babb .RowStride ;};};case PixSrcAndDst :for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bbff ]=_dcde (_fged .Data [_bbff ],_babb .Data [_fecg ]&_fged .Data [_bbff ],_bfba );_bbff +=_fged .RowStride ;_fecg +=_babb .RowStride ;
|
|
};if _fded {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{for _bbca =0;_bbca < _bbcd ;_bbca ++{_fged .Data [_fcaa +_bbca ]&=_babb .Data [_fcfc +_bbca ];};_fcaa +=_fged .RowStride ;_fcfc +=_babb .RowStride ;};};if _afaf {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bggcg ]=_dcde (_fged .Data [_bggcg ],_babb .Data [_caaf ]&_fged .Data [_bggcg ],_fdb );
|
|
_bggcg +=_fged .RowStride ;_caaf +=_babb .RowStride ;};};case PixSrcXorDst :for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bbff ]=_dcde (_fged .Data [_bbff ],_babb .Data [_fecg ]^_fged .Data [_bbff ],_bfba );_bbff +=_fged .RowStride ;_fecg +=_babb .RowStride ;
|
|
};if _fded {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{for _bbca =0;_bbca < _bbcd ;_bbca ++{_fged .Data [_fcaa +_bbca ]^=_babb .Data [_fcfc +_bbca ];};_fcaa +=_fged .RowStride ;_fcfc +=_babb .RowStride ;};};if _afaf {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bggcg ]=_dcde (_fged .Data [_bggcg ],_babb .Data [_caaf ]^_fged .Data [_bggcg ],_fdb );
|
|
_bggcg +=_fged .RowStride ;_caaf +=_babb .RowStride ;};};case PixNotSrcOrDst :for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bbff ]=_dcde (_fged .Data [_bbff ],^(_babb .Data [_fecg ])|_fged .Data [_bbff ],_bfba );_bbff +=_fged .RowStride ;_fecg +=_babb .RowStride ;
|
|
};if _fded {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{for _bbca =0;_bbca < _bbcd ;_bbca ++{_fged .Data [_fcaa +_bbca ]|=^(_babb .Data [_fcfc +_bbca ]);};_fcaa +=_fged .RowStride ;_fcfc +=_babb .RowStride ;};};if _afaf {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bggcg ]=_dcde (_fged .Data [_bggcg ],^(_babb .Data [_caaf ])|_fged .Data [_bggcg ],_fdb );
|
|
_bggcg +=_fged .RowStride ;_caaf +=_babb .RowStride ;};};case PixNotSrcAndDst :for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bbff ]=_dcde (_fged .Data [_bbff ],^(_babb .Data [_fecg ])&_fged .Data [_bbff ],_bfba );_bbff +=_fged .RowStride ;_fecg +=_babb .RowStride ;
|
|
};if _fded {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{for _bbca =0;_bbca < _bbcd ;_bbca ++{_fged .Data [_fcaa +_bbca ]&=^_babb .Data [_fcfc +_bbca ];};_fcaa +=_fged .RowStride ;_fcfc +=_babb .RowStride ;};};if _afaf {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bggcg ]=_dcde (_fged .Data [_bggcg ],^(_babb .Data [_caaf ])&_fged .Data [_bggcg ],_fdb );
|
|
_bggcg +=_fged .RowStride ;_caaf +=_babb .RowStride ;};};case PixSrcOrNotDst :for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bbff ]=_dcde (_fged .Data [_bbff ],_babb .Data [_fecg ]|^(_fged .Data [_bbff ]),_bfba );_bbff +=_fged .RowStride ;_fecg +=_babb .RowStride ;
|
|
};if _fded {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{for _bbca =0;_bbca < _bbcd ;_bbca ++{_fged .Data [_fcaa +_bbca ]=_babb .Data [_fcfc +_bbca ]|^(_fged .Data [_fcaa +_bbca ]);};_fcaa +=_fged .RowStride ;_fcfc +=_babb .RowStride ;};};if _afaf {for _ccbg =0;
|
|
_ccbg < _gdea ;_ccbg ++{_fged .Data [_bggcg ]=_dcde (_fged .Data [_bggcg ],_babb .Data [_caaf ]|^(_fged .Data [_bggcg ]),_fdb );_bggcg +=_fged .RowStride ;_caaf +=_babb .RowStride ;};};case PixSrcAndNotDst :for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bbff ]=_dcde (_fged .Data [_bbff ],_babb .Data [_fecg ]&^(_fged .Data [_bbff ]),_bfba );
|
|
_bbff +=_fged .RowStride ;_fecg +=_babb .RowStride ;};if _fded {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{for _bbca =0;_bbca < _bbcd ;_bbca ++{_fged .Data [_fcaa +_bbca ]=_babb .Data [_fcfc +_bbca ]&^(_fged .Data [_fcaa +_bbca ]);};_fcaa +=_fged .RowStride ;
|
|
_fcfc +=_babb .RowStride ;};};if _afaf {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bggcg ]=_dcde (_fged .Data [_bggcg ],_babb .Data [_caaf ]&^(_fged .Data [_bggcg ]),_fdb );_bggcg +=_fged .RowStride ;_caaf +=_babb .RowStride ;};};case PixNotPixSrcOrDst :for _ccbg =0;
|
|
_ccbg < _gdea ;_ccbg ++{_fged .Data [_bbff ]=_dcde (_fged .Data [_bbff ],^(_babb .Data [_fecg ]|_fged .Data [_bbff ]),_bfba );_bbff +=_fged .RowStride ;_fecg +=_babb .RowStride ;};if _fded {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{for _bbca =0;_bbca < _bbcd ;
|
|
_bbca ++{_fged .Data [_fcaa +_bbca ]=^(_babb .Data [_fcfc +_bbca ]|_fged .Data [_fcaa +_bbca ]);};_fcaa +=_fged .RowStride ;_fcfc +=_babb .RowStride ;};};if _afaf {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bggcg ]=_dcde (_fged .Data [_bggcg ],^(_babb .Data [_caaf ]|_fged .Data [_bggcg ]),_fdb );
|
|
_bggcg +=_fged .RowStride ;_caaf +=_babb .RowStride ;};};case PixNotPixSrcAndDst :for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bbff ]=_dcde (_fged .Data [_bbff ],^(_babb .Data [_fecg ]&_fged .Data [_bbff ]),_bfba );_bbff +=_fged .RowStride ;_fecg +=_babb .RowStride ;
|
|
};if _fded {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{for _bbca =0;_bbca < _bbcd ;_bbca ++{_fged .Data [_fcaa +_bbca ]=^(_babb .Data [_fcfc +_bbca ]&_fged .Data [_fcaa +_bbca ]);};_fcaa +=_fged .RowStride ;_fcfc +=_babb .RowStride ;};};if _afaf {for _ccbg =0;
|
|
_ccbg < _gdea ;_ccbg ++{_fged .Data [_bggcg ]=_dcde (_fged .Data [_bggcg ],^(_babb .Data [_caaf ]&_fged .Data [_bggcg ]),_fdb );_bggcg +=_fged .RowStride ;_caaf +=_babb .RowStride ;};};case PixNotPixSrcXorDst :for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bbff ]=_dcde (_fged .Data [_bbff ],^(_babb .Data [_fecg ]^_fged .Data [_bbff ]),_bfba );
|
|
_bbff +=_fged .RowStride ;_fecg +=_babb .RowStride ;};if _fded {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{for _bbca =0;_bbca < _bbcd ;_bbca ++{_fged .Data [_fcaa +_bbca ]=^(_babb .Data [_fcfc +_bbca ]^_fged .Data [_fcaa +_bbca ]);};_fcaa +=_fged .RowStride ;
|
|
_fcfc +=_babb .RowStride ;};};if _afaf {for _ccbg =0;_ccbg < _gdea ;_ccbg ++{_fged .Data [_bggcg ]=_dcde (_fged .Data [_bggcg ],^(_babb .Data [_caaf ]^_fged .Data [_bggcg ]),_fdb );_bggcg +=_fged .RowStride ;_caaf +=_babb .RowStride ;};};default:_eb .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",_ggec );
|
|
return _g .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 TstVSymbol (t *_b .T ,scale ...int )*Bitmap {_ebde ,_bbbde :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_fg .NoError (t ,_bbbde );return TstGetScaledSymbol (t ,_ebde ,scale ...);};func (_ccad *Bitmaps )String ()string {_ddbe :=_fd .Builder {};
|
|
for _ ,_ccdfa :=range _ccad .Values {_ddbe .WriteString (_ccdfa .String ());_ddbe .WriteRune ('\n');};return _ddbe .String ();};func _acg (_egdf ,_cggf *Bitmap ,_gefa ,_fgcac int )(*Bitmap ,error ){const _gceg ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";
|
|
if _cggf ==nil {return nil ,_g .Error (_gceg ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _gefa < 1||_fgcac < 1{return nil ,_g .Error (_gceg ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
|
|
};if _gefa ==1&&_fgcac ==1{return _adfb (_egdf ,_cggf );};if MorphBC ==SymmetricMorphBC {_fadf ,_afed :=_cad (_egdf ,_cggf ,_gefa ,_fgcac );if _afed !=nil {return nil ,_g .Wrap (_afed ,_gceg ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");
|
|
};return _fadf ,nil ;};_gcggb :=_fag (_gefa /2,_fgcac /2);_eaada :=8*((_gcggb +7)/8);_ggba ,_gda :=_cggf .AddBorder (_eaada ,0);if _gda !=nil {return nil ,_g .Wrapf (_gda ,_gceg ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_eaada );
|
|
};var _ebb ,_ggdb *Bitmap ;if _gefa ==1||_fgcac ==1{_bge :=SelCreateBrick (_fgcac ,_gefa ,_fgcac /2,_gefa /2,SelHit );_ebb ,_gda =_addd (nil ,_ggba ,_bge );if _gda !=nil {return nil ,_g .Wrap (_gda ,_gceg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};}else {_ddad :=SelCreateBrick (1,_gefa ,0,_gefa /2,SelHit );_ecgagd ,_dfaf :=_gaeb (nil ,_ggba ,_ddad );if _dfaf !=nil {return nil ,_g .Wrap (_dfaf ,_gceg ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");
|
|
};_aaf :=SelCreateBrick (_fgcac ,1,_fgcac /2,0,SelHit );_ebb ,_dfaf =_gaeb (nil ,_ecgagd ,_aaf );if _dfaf !=nil {return nil ,_g .Wrap (_dfaf ,_gceg ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};if _ ,_dfaf =_dcab (_ecgagd ,_ebb ,_ddad );_dfaf !=nil {return nil ,_g .Wrap (_dfaf ,_gceg ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_dfaf =_dcab (_ebb ,_ecgagd ,_aaf );_dfaf !=nil {return nil ,_g .Wrap (_dfaf ,_gceg ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
|
|
};};if _ggdb ,_gda =_ebb .RemoveBorder (_eaada );_gda !=nil {return nil ,_g .Wrap (_gda ,_gceg ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _egdf ==nil {return _ggdb ,nil ;};if _ ,_gda =_adfb (_egdf ,_ggdb );_gda !=nil {return nil ,_gda ;};return _egdf ,nil ;
|
|
};func (_dafb *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_bcefe *Bitmaps ,_ddegf error ){const _bdgb ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";if _dafb ==nil {return nil ,_g .Error (_bdgb ,"\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 ,_g .Errorf (_bdgb ,"\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 ,_g .Errorf (_bdgb ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
|
|
};_bcbcg ,_ddegf :=_dafb .makeSizeIndicator (width ,height ,tp ,relation );if _ddegf !=nil {return nil ,_g .Wrap (_ddegf ,_bdgb ,"");};_bcefe ,_ddegf =_dafb .selectByIndicator (_bcbcg );if _ddegf !=nil {return nil ,_g .Wrap (_ddegf ,_bdgb ,"");};return _bcefe ,nil ;
|
|
};func TstFrameBitmap ()*Bitmap {return _baab .Copy ()};func (_dag *Bitmap )clipRectangle (_degd ,_cgfb *_c .Rectangle )(_fbdf *Bitmap ,_bgae error ){const _bgd ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _degd ==nil {return nil ,_g .Error (_bgd ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");
|
|
};_bad ,_deed :=_dag .Width ,_dag .Height ;_egcc ,_bgae :=ClipBoxToRectangle (_degd ,_bad ,_deed );if _bgae !=nil {_eb .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",_bgae );
|
|
return nil ,nil ;};_fga ,_fbb :=_egcc .Min .X ,_egcc .Min .Y ;_dcge ,_cgee :=_egcc .Max .X -_egcc .Min .X ,_egcc .Max .Y -_egcc .Min .Y ;_fbdf =New (_dcge ,_cgee );_fbdf .Text =_dag .Text ;if _bgae =_fbdf .RasterOperation (0,0,_dcge ,_cgee ,PixSrc ,_dag ,_fga ,_fbb );
|
|
_bgae !=nil {return nil ,_g .Wrap (_bgae ,_bgd ,"");};if _cgfb !=nil {*_cgfb =*_egcc ;};return _fbdf ,nil ;};func TstRSymbol (t *_b .T ,scale ...int )*Bitmap {_edff ,_gddg :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_fg .NoError (t ,_gddg );return TstGetScaledSymbol (t ,_edff ,scale ...);
|
|
};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _fce ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_ffff :=_bga (width ,height );_ffff .Data =data ;if len (data )< height *_ffff .RowStride {return nil ,_g .Errorf (_fce ,"\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 *_ffff .RowStride );
|
|
};return _ffff ,nil ;};func _ebaa (_eggc ,_fgde *Bitmap ,_fgdf ,_gagcg int )(_cfdcd error ){const _aaac ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_cbdd ,_aagfg ,_cdgg ,_bbfd int ;_faaaf ,_cdgdd ,_acdc ,_cfac ,_fagg ,_cbcgf ,_bgbef ,_fedagd byte ;
|
|
);for _cbdd =0;_cbdd < _fgdf ;_cbdd ++{_cdgg =_cbdd *_eggc .RowStride ;_bbfd =_cbdd *_fgde .RowStride ;for _aagfg =0;_aagfg < _gagcg ;_aagfg ++{if _faaaf ,_cfdcd =_eggc .GetByte (_cdgg +_aagfg );_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
|
|
};if _cdgdd ,_cfdcd =_fgde .GetByte (_bbfd +_aagfg );_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _cbdd > 0{if _acdc ,_cfdcd =_eggc .GetByte (_cdgg -_eggc .RowStride +_aagfg );
|
|
_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_faaaf |=_acdc |(_acdc <<1)|(_acdc >>1);if _aagfg > 0{if _fedagd ,_cfdcd =_eggc .GetByte (_cdgg -_eggc .RowStride +_aagfg -1);_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");
|
|
};_faaaf |=_fedagd <<7;};if _aagfg < _gagcg -1{if _fedagd ,_cfdcd =_eggc .GetByte (_cdgg -_eggc .RowStride +_aagfg +1);_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");
|
|
};_faaaf |=_fedagd >>7;};};if _aagfg > 0{if _cfac ,_cfdcd =_eggc .GetByte (_cdgg +_aagfg -1);_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\u006a\u0020\u003e \u0030");};_faaaf |=_cfac <<7;};_faaaf &=_cdgdd ;if _faaaf ==0||^_faaaf ==0{if _cfdcd =_eggc .SetByte (_cdgg +_aagfg ,_faaaf );
|
|
_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_bgbef =_faaaf ;_faaaf =(_faaaf |(_faaaf >>1)|(_faaaf <<1))&_cdgdd ;if (_faaaf ^_bgbef )==0{if _cfdcd =_eggc .SetByte (_cdgg +_aagfg ,_faaaf );
|
|
_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _cbdd =_fgdf -1;_cbdd >=0;_cbdd --{_cdgg =_cbdd *_eggc .RowStride ;_bbfd =_cbdd *_fgde .RowStride ;
|
|
for _aagfg =_gagcg -1;_aagfg >=0;_aagfg --{if _faaaf ,_cfdcd =_eggc .GetByte (_cdgg +_aagfg );_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
|
|
};if _cdgdd ,_cfdcd =_fgde .GetByte (_bbfd +_aagfg );_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _cbdd < _fgdf -1{if _fagg ,_cfdcd =_eggc .GetByte (_cdgg +_eggc .RowStride +_aagfg );
|
|
_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_faaaf |=_fagg |(_fagg <<1)|_fagg >>1;if _aagfg > 0{if _fedagd ,_cfdcd =_eggc .GetByte (_cdgg +_eggc .RowStride +_aagfg -1);
|
|
_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\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");};_faaaf |=_fedagd <<7;};if _aagfg < _gagcg -1{if _fedagd ,_cfdcd =_eggc .GetByte (_cdgg +_eggc .RowStride +_aagfg +1);
|
|
_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\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");
|
|
};_faaaf |=_fedagd >>7;};};if _aagfg < _gagcg -1{if _cbcgf ,_cfdcd =_eggc .GetByte (_cdgg +_aagfg +1);_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\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");
|
|
};_faaaf |=_cbcgf >>7;};_faaaf &=_cdgdd ;if _faaaf ==0||(^_faaaf )==0{if _cfdcd =_eggc .SetByte (_cdgg +_aagfg ,_faaaf );_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};
|
|
};for {_bgbef =_faaaf ;_faaaf =(_faaaf |(_faaaf >>1)|(_faaaf <<1))&_cdgdd ;if (_faaaf ^_bgbef )==0{if _cfdcd =_eggc .SetByte (_cdgg +_aagfg ,_faaaf );_cfdcd !=nil {return _g .Wrap (_cfdcd ,_aaac ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
|
|
};break ;};};};};return nil ;};func (_aggg *ClassedPoints )ySortFunction ()func (_cgbe int ,_ffgcc int )bool {return func (_caee ,_addg int )bool {return _aggg .YAtIndex (_caee )< _aggg .YAtIndex (_addg )};};func _gbdga (_dagc *Bitmap ,_ddbc *Bitmap ,_ccdg int )(_fgeg error ){const _eabe ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";
|
|
_dbfa :=_gbdb (_dagc .Height ,_ddbc .Height );_fedb :=_gbdb (_dagc .RowStride ,_ddbc .RowStride );switch _ccdg {case 4:_fgeg =_gbabc (_dagc ,_ddbc ,_dbfa ,_fedb );case 8:_fgeg =_ebaa (_dagc ,_ddbc ,_dbfa ,_fedb );default:return _g .Errorf (_eabe ,"\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",_ccdg );
|
|
};if _fgeg !=nil {return _g .Wrap (_fgeg ,_eabe ,"");};return nil ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_c .Rectangle ;};func TstAddSymbol (t *_b .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_bebd :=_c .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );
|
|
bms .AddBox (&_bebd );*x +=sym .Width +space ;};func (_aeg *Bitmap )GetByte (index int )(byte ,error ){if index > len (_aeg .Data )-1||index < 0{return 0,_g .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 _aeg .Data [index ],nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func (_edec *BitmapsArray )AddBox (box *_c .Rectangle ){_edec .Boxes =append (_edec .Boxes ,box )};func _aede (_cfea uint ,_dcea byte )byte {return _dcea >>_cfea <<_cfea };
|
|
func (_agced *byHeight )Less (i ,j int )bool {return _agced .Values [i ].Height < _agced .Values [j ].Height };func (_gggc *Bitmap )Copy ()*Bitmap {_gfef :=make ([]byte ,len (_gggc .Data ));copy (_gfef ,_gggc .Data );return &Bitmap {Width :_gggc .Width ,Height :_gggc .Height ,RowStride :_gggc .RowStride ,Data :_gfef ,Color :_gggc .Color ,Text :_gggc .Text ,BitmapNumber :_gggc .BitmapNumber ,Special :_gggc .Special };
|
|
};func (_daea *Bitmap )And (s *Bitmap )(_ead *Bitmap ,_eca error ){const _bedf ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _daea ==nil {return nil ,_g .Error (_bedf ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");
|
|
};if s ==nil {return nil ,_g .Error (_bedf ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_daea .SizesEqual (s ){_eb .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",_bedf );
|
|
};if _ead ,_eca =_adfb (_ead ,_daea );_eca !=nil {return nil ,_g .Wrap (_eca ,_bedf ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _eca =_ead .RasterOperation (0,0,_ead .Width ,_ead .Height ,PixSrcAndDst ,s ,0,0);
|
|
_eca !=nil {return nil ,_g .Wrap (_eca ,_bedf ,"");};return _ead ,nil ;};var _affd =[]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 (_aadf *Bitmaps )HeightSorter ()func (_eafb ,_afge int )bool {return func (_cbacd ,_deaba int )bool {_eggd :=_aadf .Values [_cbacd ].Height < _aadf .Values [_deaba ].Height ;_eb .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_aadf .Values [_cbacd ].Height ,_aadf .Values [_deaba ].Height ,_eggd );
|
|
return _eggd ;};};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _agedf (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_ecbg *Selection )setOrigin (_geef ,_fddg int ){_ecbg .Cy ,_ecbg .Cx =_geef ,_fddg };
|
|
func (_dfbe Points )GetIntY (i int )(int ,error ){if i >=len (_dfbe ){return 0,_g .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 (_dfbe [i ].Y ),nil ;};func (_gbe *Bitmap )SetPadBits (value int ){_gbe .setPadBits (value )};func _efge (_ffae ,_agbb ,_egca *Bitmap )(*Bitmap ,error ){const _fgac ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _agbb ==nil {return nil ,_g .Error (_fgac ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
|
|
};if _egca ==nil {return nil ,_g .Error (_fgac ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ffae ==_egca {return nil ,_g .Error (_fgac ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_agbb .SizesEqual (_egca ){_eb .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",_fgac );
|
|
};var _ceae error ;if _ffae ,_ceae =_adfb (_ffae ,_agbb );_ceae !=nil {return nil ,_g .Wrap (_ceae ,_fgac ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _ceae =_ffae .RasterOperation (0,0,_ffae .Width ,_ffae .Height ,PixSrcXorDst ,_egca ,0,0);
|
|
_ceae !=nil {return nil ,_g .Wrap (_ceae ,_fgac ,"");};return _ffae ,nil ;};func TstGetScaledSymbol (t *_b .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_bfcgb ,_abgff :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });
|
|
_fg .NoError (t ,_abgff );return _bfcgb ;};func (_dedf *Bitmaps )AddBitmap (bm *Bitmap ){_dedf .Values =append (_dedf .Values ,bm )};type ClassedPoints struct{*Points ;_e .IntSlice ;_efff func (_ccbb ,_aace int )bool ;};func (_aefa *Selection )findMaxTranslations ()(_bbcfed ,_bccg ,_ebaag ,_eegd int ){for _gddaf :=0;
|
|
_gddaf < _aefa .Height ;_gddaf ++{for _fedbb :=0;_fedbb < _aefa .Width ;_fedbb ++{if _aefa .Data [_gddaf ][_fedbb ]==SelHit {_bbcfed =_fag (_bbcfed ,_aefa .Cx -_fedbb );_bccg =_fag (_bccg ,_aefa .Cy -_gddaf );_ebaag =_fag (_ebaag ,_fedbb -_aefa .Cx );_eegd =_fag (_eegd ,_gddaf -_aefa .Cy );
|
|
};};};return _bbcfed ,_bccg ,_ebaag ,_eegd ;};const _cgeee =5000;type CombinationOperator int ;func (_eefg *Bitmap )setAll ()error {_ebda :=_agedf (_eefg ,0,0,_eefg .Width ,_eefg .Height ,PixSet ,nil ,0,0);if _ebda !=nil {return _g .Wrap (_ebda ,"\u0073\u0065\u0074\u0041\u006c\u006c","");
|
|
};return nil ;};func _aa (_gd *Bitmap ,_afc int )(*Bitmap ,error ){const _fa ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _gd ==nil {return nil ,_g .Error (_fa ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _afc ==1{return _adfb (nil ,_gd );};if _afc !=2&&_afc !=4&&_afc !=8{return nil ,_g .Error (_fa ,"\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");
|
|
};_abd :=_afc *_gd .Width ;_bec :=_afc *_gd .Height ;_gg :=New (_abd ,_bec );var _dd error ;switch _afc {case 2:_dd =_cg (_gg ,_gd );case 4:_dd =_ae (_gg ,_gd );case 8:_dd =_ad (_gg ,_gd );};if _dd !=nil {return nil ,_g .Wrap (_dd ,_fa ,"");};return _gg ,nil ;
|
|
};func _fgaad (_adcfe ,_bdce int ,_degb string )*Selection {_ddgf :=&Selection {Height :_adcfe ,Width :_bdce ,Name :_degb };_ddgf .Data =make ([][]SelectionValue ,_adcfe );for _dcbe :=0;_dcbe < _adcfe ;_dcbe ++{_ddgf .Data [_dcbe ]=make ([]SelectionValue ,_bdce );
|
|
};return _ddgf ;};type Point struct{X ,Y float32 ;};func _fcga (_gade ,_bdbc *Bitmap ,_ebac CombinationOperator )*Bitmap {_gadb :=New (_gade .Width ,_gade .Height );for _cdgb :=0;_cdgb < len (_gadb .Data );_cdgb ++{_gadb .Data [_cdgb ]=_eegfa (_gade .Data [_cdgb ],_bdbc .Data [_cdgb ],_ebac );
|
|
};return _gadb ;};func _agcc (_fgd ,_bgc *Bitmap ,_ffcd int ,_ecf []byte ,_ccg int )(_aea error ){const _bbb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";var (_cdbc ,_eee ,_cda ,_baf ,_afga ,_ddc ,_gde ,_bgbe int ;
|
|
_dab ,_cgbd ,_gab ,_fef uint32 ;_cegf ,_efa byte ;_eaf uint16 ;);_fcg :=make ([]byte ,4);_eed :=make ([]byte ,4);for _cda =0;_cda < _fgd .Height -1;_cda ,_baf =_cda +2,_baf +1{_cdbc =_cda *_fgd .RowStride ;_eee =_baf *_bgc .RowStride ;for _afga ,_ddc =0,0;
|
|
_afga < _ccg ;_afga ,_ddc =_afga +4,_ddc +1{for _gde =0;_gde < 4;_gde ++{_bgbe =_cdbc +_afga +_gde ;if _bgbe <=len (_fgd .Data )-1&&_bgbe < _cdbc +_fgd .RowStride {_fcg [_gde ]=_fgd .Data [_bgbe ];}else {_fcg [_gde ]=0x00;};_bgbe =_cdbc +_fgd .RowStride +_afga +_gde ;
|
|
if _bgbe <=len (_fgd .Data )-1&&_bgbe < _cdbc +(2*_fgd .RowStride ){_eed [_gde ]=_fgd .Data [_bgbe ];}else {_eed [_gde ]=0x00;};};_dab =_ac .BigEndian .Uint32 (_fcg );_cgbd =_ac .BigEndian .Uint32 (_eed );_gab =_dab &_cgbd ;_gab |=_gab <<1;_fef =_dab |_cgbd ;
|
|
_fef &=_fef <<1;_cgbd =_gab |_fef ;_cgbd &=0xaaaaaaaa;_dab =_cgbd |(_cgbd <<7);_cegf =byte (_dab >>24);_efa =byte ((_dab >>8)&0xff);_bgbe =_eee +_ddc ;if _bgbe +1==len (_bgc .Data )-1||_bgbe +1>=_eee +_bgc .RowStride {if _aea =_bgc .SetByte (_bgbe ,_ecf [_cegf ]);
|
|
_aea !=nil {return _g .Wrapf (_aea ,_bbb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bgbe );};}else {_eaf =(uint16 (_ecf [_cegf ])<<8)|uint16 (_ecf [_efa ]);if _aea =_bgc .setTwoBytes (_bgbe ,_eaf );_aea !=nil {return _g .Wrapf (_aea ,_bbb ,"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",_bgbe );
|
|
};_ddc ++;};};};return nil ;};func _fagb (_ebgc *Bitmap ,_afee ,_faff int ,_ecddc ,_daec int ,_efab RasterOperator ,_gagf *Bitmap ,_dbc ,_affc int )error {var _daaf ,_aegb ,_gfac ,_egada int ;if _afee < 0{_dbc -=_afee ;_ecddc +=_afee ;_afee =0;};if _dbc < 0{_afee -=_dbc ;
|
|
_ecddc +=_dbc ;_dbc =0;};_daaf =_afee +_ecddc -_ebgc .Width ;if _daaf > 0{_ecddc -=_daaf ;};_aegb =_dbc +_ecddc -_gagf .Width ;if _aegb > 0{_ecddc -=_aegb ;};if _faff < 0{_affc -=_faff ;_daec +=_faff ;_faff =0;};if _affc < 0{_faff -=_affc ;_daec +=_affc ;
|
|
_affc =0;};_gfac =_faff +_daec -_ebgc .Height ;if _gfac > 0{_daec -=_gfac ;};_egada =_affc +_daec -_gagf .Height ;if _egada > 0{_daec -=_egada ;};if _ecddc <=0||_daec <=0{return nil ;};var _fbdfb error ;switch {case _afee &7==0&&_dbc &7==0:_fbdfb =_ecdf (_ebgc ,_afee ,_faff ,_ecddc ,_daec ,_efab ,_gagf ,_dbc ,_affc );
|
|
case _afee &7==_dbc &7:_fbdfb =_ageb (_ebgc ,_afee ,_faff ,_ecddc ,_daec ,_efab ,_gagf ,_dbc ,_affc );default:_fbdfb =_gdbea (_ebgc ,_afee ,_faff ,_ecddc ,_daec ,_efab ,_gagf ,_dbc ,_affc );};if _fbdfb !=nil {return _g .Wrap (_fbdfb ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");
|
|
};return nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_c .Rectangle ;};func (_deg *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_ffa bool ,_abbb error ){const _dfda ="\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 =_fadfg ();};_bddd :=_deg .Width >>3;_gacg :=_deg .Width &7;_acec :=byte (0xff<<uint (8-_gacg ));var (_aeaf ,_efac ,_fbaf ,_gfed int ;_aad byte ;);for _aeaf =0;_aeaf < _deg .Height ;_aeaf ++{_fbaf =_deg .RowStride *_aeaf ;for _efac =0;
|
|
_efac < _bddd ;_efac ++{_aad ,_abbb =_deg .GetByte (_fbaf +_efac );if _abbb !=nil {return false ,_g .Wrap (_abbb ,_dfda ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_gfed +=tab8 [_aad ];};if _gacg !=0{_aad ,_abbb =_deg .GetByte (_fbaf +_efac );
|
|
if _abbb !=nil {return false ,_g .Wrap (_abbb ,_dfda ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_aad &=_acec ;_gfed +=tab8 [_aad ];};if _gfed > thresh {return true ,nil ;};};return _ffa ,nil ;};func (_facb *Boxes )Get (i int )(*_c .Rectangle ,error ){const _abgg ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";
|
|
if _facb ==nil {return nil ,_g .Error (_abgg ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if i > len (*_facb )-1{return nil ,_g .Errorf (_abgg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return (*_facb )[i ],nil ;};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);type LocationFilter int ;func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _adfb (d ,s )};var _ffde =[5]int {1,2,3,0,4};func _ffc ()(_abgc [256]uint16 ){for _cfe :=0;
|
|
_cfe < 256;_cfe ++{if _cfe &0x01!=0{_abgc [_cfe ]|=0x3;};if _cfe &0x02!=0{_abgc [_cfe ]|=0xc;};if _cfe &0x04!=0{_abgc [_cfe ]|=0x30;};if _cfe &0x08!=0{_abgc [_cfe ]|=0xc0;};if _cfe &0x10!=0{_abgc [_cfe ]|=0x300;};if _cfe &0x20!=0{_abgc [_cfe ]|=0xc00;};
|
|
if _cfe &0x40!=0{_abgc [_cfe ]|=0x3000;};if _cfe &0x80!=0{_abgc [_cfe ]|=0xc000;};};return _abgc ;};func TstISymbol (t *_b .T ,scale ...int )*Bitmap {_effdg ,_gaacc :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_fg .NoError (t ,_gaacc );return TstGetScaledSymbol (t ,_effdg ,scale ...);
|
|
};func (_efebc *Bitmap )thresholdPixelSum (_gffa int )bool {var (_cdef int ;_fda uint8 ;_bgca byte ;_eaad int ;);_fdg :=_efebc .RowStride ;_degdc :=uint (_efebc .Width &0x07);if _degdc !=0{_fda =uint8 ((0xff<<(8-_degdc ))&0xff);_fdg --;};for _bcee :=0;
|
|
_bcee < _efebc .Height ;_bcee ++{for _eaad =0;_eaad < _fdg ;_eaad ++{_bgca =_efebc .Data [_bcee *_efebc .RowStride +_eaad ];_cdef +=int (_feg [_bgca ]);};if _degdc !=0{_bgca =_efebc .Data [_bcee *_efebc .RowStride +_eaad ]&_fda ;_cdef +=int (_feg [_bgca ]);
|
|
};if _cdef > _gffa {return true ;};};return false ;};func (_dda *Bitmap )Equals (s *Bitmap )bool {if len (_dda .Data )!=len (s .Data )||_dda .Width !=s .Width ||_dda .Height !=s .Height {return false ;};for _bda :=0;_bda < _dda .Height ;_bda ++{_aaga :=_bda *_dda .RowStride ;
|
|
for _dce :=0;_dce < _dda .RowStride ;_dce ++{if _dda .Data [_aaga +_dce ]!=s .Data [_aaga +_dce ]{return false ;};};};return true ;};func _cad (_eagb ,_ccgb *Bitmap ,_ggcc ,_cfdc int )(*Bitmap ,error ){const _bgbgg ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";
|
|
if _ccgb ==nil {return nil ,_g .Error (_bgbgg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _ggcc < 1||_cfdc < 1{return nil ,_g .Error (_bgbgg ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
|
|
};if _ggcc ==1&&_cfdc ==1{return _ccgb .Copy (),nil ;};if _ggcc ==1||_cfdc ==1{_edee :=SelCreateBrick (_cfdc ,_ggcc ,_cfdc /2,_ggcc /2,SelHit );var _gggf error ;_eagb ,_gggf =_addd (_eagb ,_ccgb ,_edee );if _gggf !=nil {return nil ,_g .Wrap (_gggf ,_bgbgg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _eagb ,nil ;};_dcba :=SelCreateBrick (1,_ggcc ,0,_ggcc /2,SelHit );_fabc :=SelCreateBrick (_cfdc ,1,_cfdc /2,0,SelHit );_dgbf ,_bbbg :=_gaeb (nil ,_ccgb ,_dcba );if _bbbg !=nil {return nil ,_g .Wrap (_bbbg ,_bgbgg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};if _eagb ,_bbbg =_gaeb (_eagb ,_dgbf ,_fabc );_bbbg !=nil {return nil ,_g .Wrap (_bbbg ,_bgbgg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_bbbg =_dcab (_dgbf ,_eagb ,_dcba );_bbbg !=nil {return nil ,_g .Wrap (_bbbg ,_bgbgg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};if _ ,_bbbg =_dcab (_eagb ,_dgbf ,_fabc );_bbbg !=nil {return nil ,_g .Wrap (_bbbg ,_bgbgg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _eagb ,nil ;};func (_efc *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_efc .Width ,Height :_efc .Height ,RowStride :_efc .RowStride ,Color :_efc .Color ,Text :_efc .Text ,BitmapNumber :_efc .BitmapNumber ,Special :_efc .Special ,Data :make ([]byte ,len (_efc .Data ))};
|
|
};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func TstImageBitmapInverseData ()[]byte {_adgc :=_ddcfc .Copy ();_adgc .InverseData ();return _adgc .Data ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _gaeb (d ,s ,sel )};
|
|
const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func (_cbaf *Bitmaps )WidthSorter ()func (_efdad ,_dcdc int )bool {return func (_abdc ,_ebed int )bool {return _cbaf .Values [_abdc ].Width < _cbaf .Values [_ebed ].Width };};func Centroids (bms []*Bitmap )(*Points ,error ){_fffa :=make ([]Point ,len (bms ));
|
|
_ddg :=_dddb ();_dfeff :=_fadfg ();var _adg error ;for _dbgd ,_gddc :=range bms {_fffa [_dbgd ],_adg =_gddc .centroid (_ddg ,_dfeff );if _adg !=nil {return nil ,_adg ;};};_aead :=Points (_fffa );return &_aead ,nil ;};const (CmbOpOr CombinationOperator =iota ;
|
|
CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func (_ebcg *Bitmap )Zero ()bool {_eegbe :=_ebcg .Width /8;_gafff :=_ebcg .Width &7;var _bbbf byte ;if _gafff !=0{_bbbf =byte (0xff<<uint (8-_gafff ));};var _bffa ,_cga ,_ddd int ;for _cga =0;_cga < _ebcg .Height ;
|
|
_cga ++{_bffa =_ebcg .RowStride *_cga ;for _ddd =0;_ddd < _eegbe ;_ddd ,_bffa =_ddd +1,_bffa +1{if _ebcg .Data [_bffa ]!=0{return false ;};};if _gafff > 0{if _ebcg .Data [_bffa ]&_bbbf !=0{return false ;};};};return true ;};type byWidth Bitmaps ;func (_bacd *Bitmap )clearAll ()error {return _bacd .RasterOperation (0,0,_bacd .Width ,_bacd .Height ,PixClr ,nil ,0,0);
|
|
};func (_ebg *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _ebg .Copy (),nil ;};_dfd ,_gdbg :=_ebg .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _gdbg !=nil {return nil ,_g .Wrap (_gdbg ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");
|
|
};return _dfd ,nil ;};func _fde ()(_feb [256]uint32 ){for _bb :=0;_bb < 256;_bb ++{if _bb &0x01!=0{_feb [_bb ]|=0xf;};if _bb &0x02!=0{_feb [_bb ]|=0xf0;};if _bb &0x04!=0{_feb [_bb ]|=0xf00;};if _bb &0x08!=0{_feb [_bb ]|=0xf000;};if _bb &0x10!=0{_feb [_bb ]|=0xf0000;
|
|
};if _bb &0x20!=0{_feb [_bb ]|=0xf00000;};if _bb &0x40!=0{_feb [_bb ]|=0xf000000;};if _bb &0x80!=0{_feb [_bb ]|=0xf0000000;};};return _feb ;};func (_egeg *Bitmaps )SortByHeight (){_bdcg :=(*byHeight )(_egeg );_fe .Sort (_bdcg )};func MakePixelCentroidTab8 ()[]int {return _dddb ()};
|
|
func (_aecg *byHeight )Swap (i ,j int ){_aecg .Values [i ],_aecg .Values [j ]=_aecg .Values [j ],_aecg .Values [i ];if _aecg .Boxes !=nil {_aecg .Boxes [i ],_aecg .Boxes [j ]=_aecg .Boxes [j ],_aecg .Boxes [i ];};};func (_dbbe *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_agg *Boxes ,_cebd error ){const _gaea ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
|
|
if _dbbe ==nil {return nil ,_g .Error (_gaea ,"\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 ,_g .Error (_gaea ,"\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 _agg ,_cebd =_dbbe .connComponentsBB (connectivity );_cebd !=nil {return nil ,_g .Wrap (_cebd ,_gaea ,"");};}else {if _agg ,_cebd =_dbbe .connComponentsBitmapsBB (bms ,connectivity );_cebd !=nil {return nil ,_g .Wrap (_cebd ,_gaea ,"");
|
|
};};return _agg ,nil ;};func _gbabc (_eccef ,_daedg *Bitmap ,_fabf ,_dcabd int )(_gggfb error ){const _bbfab ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_cgcf ,_bccff ,_gfgc ,_dcfgf int ;_egdfd ,_cffg ,_gebf ,_decdg ,_cfcfa ,_dcdb ,_agcf byte ;
|
|
);for _cgcf =0;_cgcf < _fabf ;_cgcf ++{_gfgc =_cgcf *_eccef .RowStride ;_dcfgf =_cgcf *_daedg .RowStride ;for _bccff =0;_bccff < _dcabd ;_bccff ++{_egdfd ,_gggfb =_eccef .GetByte (_gfgc +_bccff );if _gggfb !=nil {return _g .Wrap (_gggfb ,_bbfab ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");
|
|
};_cffg ,_gggfb =_daedg .GetByte (_dcfgf +_bccff );if _gggfb !=nil {return _g .Wrap (_gggfb ,_bbfab ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _cgcf > 0{_gebf ,_gggfb =_eccef .GetByte (_gfgc -_eccef .RowStride +_bccff );if _gggfb !=nil {return _g .Wrap (_gggfb ,_bbfab ,"\u0069\u0020\u003e \u0030");
|
|
};_egdfd |=_gebf ;};if _bccff > 0{_decdg ,_gggfb =_eccef .GetByte (_gfgc +_bccff -1);if _gggfb !=nil {return _g .Wrap (_gggfb ,_bbfab ,"\u006a\u0020\u003e \u0030");};_egdfd |=_decdg <<7;};_egdfd &=_cffg ;if _egdfd ==0||(^_egdfd )==0{if _gggfb =_eccef .SetByte (_gfgc +_bccff ,_egdfd );
|
|
_gggfb !=nil {return _g .Wrap (_gggfb ,_bbfab ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_agcf =_egdfd ;_egdfd =(_egdfd |(_egdfd >>1)|(_egdfd <<1))&_cffg ;if (_egdfd ^_agcf )==0{if _gggfb =_eccef .SetByte (_gfgc +_bccff ,_egdfd );
|
|
_gggfb !=nil {return _g .Wrap (_gggfb ,_bbfab ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _cgcf =_fabf -1;_cgcf >=0;_cgcf --{_gfgc =_cgcf *_eccef .RowStride ;_dcfgf =_cgcf *_daedg .RowStride ;
|
|
for _bccff =_dcabd -1;_bccff >=0;_bccff --{if _egdfd ,_gggfb =_eccef .GetByte (_gfgc +_bccff );_gggfb !=nil {return _g .Wrap (_gggfb ,_bbfab ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _cffg ,_gggfb =_daedg .GetByte (_dcfgf +_bccff );
|
|
_gggfb !=nil {return _g .Wrap (_gggfb ,_bbfab ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _cgcf < _fabf -1{if _cfcfa ,_gggfb =_eccef .GetByte (_gfgc +_eccef .RowStride +_bccff );_gggfb !=nil {return _g .Wrap (_gggfb ,_bbfab ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");
|
|
};_egdfd |=_cfcfa ;};if _bccff < _dcabd -1{if _dcdb ,_gggfb =_eccef .GetByte (_gfgc +_bccff +1);_gggfb !=nil {return _g .Wrap (_gggfb ,_bbfab ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};
|
|
_egdfd |=_dcdb >>7;};_egdfd &=_cffg ;if _egdfd ==0||(^_egdfd )==0{if _gggfb =_eccef .SetByte (_gfgc +_bccff ,_egdfd );_gggfb !=nil {return _g .Wrap (_gggfb ,_bbfab ,"\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 {_agcf =_egdfd ;_egdfd =(_egdfd |(_egdfd >>1)|(_egdfd <<1))&_cffg ;if (_egdfd ^_agcf )==0{if _gggfb =_eccef .SetByte (_gfgc +_bccff ,_egdfd );_gggfb !=nil {return _g .Wrap (_gggfb ,_bbfab ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
|
|
};break ;};};};};return nil ;};func (_fffg *Bitmap )GetByteIndex (x ,y int )int {return y *_fffg .RowStride +(x >>3)};func (_bfeg *Bitmap )SetByte (index int ,v byte )error {if index > len (_bfeg .Data )-1||index < 0{return _g .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 );
|
|
};_bfeg .Data [index ]=v ;return nil ;};func (_bbe *Bitmap )CreateTemplate ()*Bitmap {return _bbe .createTemplate ()};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func (_afa *Bitmap )nextOnPixelLow (_cgffg ,_gaag ,_dege ,_ebgd ,_efda int )(_edcd _c .Point ,_gfa bool ,_gcaa error ){const _cfga ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
|
|
var (_ebdf int ;_dbe byte ;);_gebc :=_efda *_dege ;_bea :=_gebc +(_ebgd /8);if _dbe ,_gcaa =_afa .GetByte (_bea );_gcaa !=nil {return _edcd ,false ,_g .Wrap (_gcaa ,_cfga ,"\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 _dbe !=0{_gaac :=_ebgd -(_ebgd %8)+7;for _ebdf =_ebgd ;_ebdf <=_gaac &&_ebdf < _cgffg ;_ebdf ++{if _afa .GetPixel (_ebdf ,_efda ){_edcd .X =_ebdf ;_edcd .Y =_efda ;return _edcd ,true ,nil ;};};};_ddeg :=(_ebgd /8)+1;_ebdf =8*_ddeg ;var _bage int ;
|
|
for _bea =_gebc +_ddeg ;_ebdf < _cgffg ;_bea ,_ebdf =_bea +1,_ebdf +8{if _dbe ,_gcaa =_afa .GetByte (_bea );_gcaa !=nil {return _edcd ,false ,_g .Wrap (_gcaa ,_cfga ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");
|
|
};if _dbe ==0{continue ;};for _bage =0;_bage < 8&&_ebdf < _cgffg ;_bage ,_ebdf =_bage +1,_ebdf +1{if _afa .GetPixel (_ebdf ,_efda ){_edcd .X =_ebdf ;_edcd .Y =_efda ;return _edcd ,true ,nil ;};};};for _cfebf :=_efda +1;_cfebf < _gaag ;_cfebf ++{_gebc =_cfebf *_dege ;
|
|
for _bea ,_ebdf =_gebc ,0;_ebdf < _cgffg ;_bea ,_ebdf =_bea +1,_ebdf +8{if _dbe ,_gcaa =_afa .GetByte (_bea );_gcaa !=nil {return _edcd ,false ,_g .Wrap (_gcaa ,_cfga ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");
|
|
};if _dbe ==0{continue ;};for _bage =0;_bage < 8&&_ebdf < _cgffg ;_bage ,_ebdf =_bage +1,_ebdf +1{if _afa .GetPixel (_ebdf ,_cfebf ){_edcd .X =_ebdf ;_edcd .Y =_cfebf ;return _edcd ,true ,nil ;};};};};return _edcd ,false ,nil ;};func (_aadbb *BitmapsArray )AddBitmaps (bm *Bitmaps ){_aadbb .Values =append (_aadbb .Values ,bm )};
|
|
func (_ccfd *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _bcafa ="\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 >=_ccfd .IntSlice .Size (){return 0,_g .Errorf (_bcafa ,"\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 (_ccfd .XAtIndex (i )),nil ;};func (_befcd *Bitmaps )GetBox (i int )(*_c .Rectangle ,error ){const _ffgad ="\u0047\u0065\u0074\u0042\u006f\u0078";if _befcd ==nil {return nil ,_g .Error (_ffgad ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");
|
|
};if i > len (_befcd .Boxes )-1{return nil ,_g .Errorf (_ffgad ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _befcd .Boxes [i ],nil ;};func MakePixelSumTab8 ()[]int {return _fadfg ()};
|
|
func (_cebcc *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _dbde ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_cebcc .Values )==0{return nil ,_g .Error (_dbde ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
|
|
};_cfgb :=&BitmapsArray {};_cebcc .SortByWidth ();_bfda :=-1;_abec :=-1;for _cgfg :=0;_cgfg < len (_cebcc .Values );_cgfg ++{_gccg :=_cebcc .Values [_cgfg ].Width ;if _gccg > _bfda {_bfda =_gccg ;_abec ++;_cfgb .Values =append (_cfgb .Values ,&Bitmaps {});
|
|
};_cfgb .Values [_abec ].AddBitmap (_cebcc .Values [_cgfg ]);};return _cfgb ,nil ;};func (_bfe *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _bfe .addBorderGeneral (left ,right ,top ,bot ,val );};func (_geaa *ClassedPoints )SortByY (){_geaa ._efff =_geaa .ySortFunction ();
|
|
_fe .Sort (_geaa )};func (_eaag *Bitmap )resizeImageData (_abeb *Bitmap )error {if _abeb ==nil {return _g .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 _eaag .SizesEqual (_abeb ){return nil ;};_eaag .Data =make ([]byte ,len (_abeb .Data ));_eaag .Width =_abeb .Width ;_eaag .Height =_abeb .Height ;_eaag .RowStride =_abeb .RowStride ;return nil ;};func TstNSymbol (t *_b .T ,scale ...int )*Bitmap {_cfbed ,_gfff :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});
|
|
_fg .NoError (t ,_gfff );return TstGetScaledSymbol (t ,_cfbed ,scale ...);};func _ecdf (_daafc *Bitmap ,_agga ,_daf ,_efgg ,_bfbb int ,_egef RasterOperator ,_fgee *Bitmap ,_bggc ,_eacf int )error {var (_deac byte ;_dagb int ;_fccdc int ;_cafd ,_fffga int ;
|
|
_geab ,_eecb int ;);_abdd :=_efgg >>3;_bgfc :=_efgg &7;if _bgfc > 0{_deac =_ddcf [_bgfc ];};_dagb =_fgee .RowStride *_eacf +(_bggc >>3);_fccdc =_daafc .RowStride *_daf +(_agga >>3);switch _egef {case PixSrc :for _geab =0;_geab < _bfbb ;_geab ++{_cafd =_dagb +_geab *_fgee .RowStride ;
|
|
_fffga =_fccdc +_geab *_daafc .RowStride ;for _eecb =0;_eecb < _abdd ;_eecb ++{_daafc .Data [_fffga ]=_fgee .Data [_cafd ];_fffga ++;_cafd ++;};if _bgfc > 0{_daafc .Data [_fffga ]=_dcde (_daafc .Data [_fffga ],_fgee .Data [_cafd ],_deac );};};case PixNotSrc :for _geab =0;
|
|
_geab < _bfbb ;_geab ++{_cafd =_dagb +_geab *_fgee .RowStride ;_fffga =_fccdc +_geab *_daafc .RowStride ;for _eecb =0;_eecb < _abdd ;_eecb ++{_daafc .Data [_fffga ]=^(_fgee .Data [_cafd ]);_fffga ++;_cafd ++;};if _bgfc > 0{_daafc .Data [_fffga ]=_dcde (_daafc .Data [_fffga ],^_fgee .Data [_cafd ],_deac );
|
|
};};case PixSrcOrDst :for _geab =0;_geab < _bfbb ;_geab ++{_cafd =_dagb +_geab *_fgee .RowStride ;_fffga =_fccdc +_geab *_daafc .RowStride ;for _eecb =0;_eecb < _abdd ;_eecb ++{_daafc .Data [_fffga ]|=_fgee .Data [_cafd ];_fffga ++;_cafd ++;};if _bgfc > 0{_daafc .Data [_fffga ]=_dcde (_daafc .Data [_fffga ],_fgee .Data [_cafd ]|_daafc .Data [_fffga ],_deac );
|
|
};};case PixSrcAndDst :for _geab =0;_geab < _bfbb ;_geab ++{_cafd =_dagb +_geab *_fgee .RowStride ;_fffga =_fccdc +_geab *_daafc .RowStride ;for _eecb =0;_eecb < _abdd ;_eecb ++{_daafc .Data [_fffga ]&=_fgee .Data [_cafd ];_fffga ++;_cafd ++;};if _bgfc > 0{_daafc .Data [_fffga ]=_dcde (_daafc .Data [_fffga ],_fgee .Data [_cafd ]&_daafc .Data [_fffga ],_deac );
|
|
};};case PixSrcXorDst :for _geab =0;_geab < _bfbb ;_geab ++{_cafd =_dagb +_geab *_fgee .RowStride ;_fffga =_fccdc +_geab *_daafc .RowStride ;for _eecb =0;_eecb < _abdd ;_eecb ++{_daafc .Data [_fffga ]^=_fgee .Data [_cafd ];_fffga ++;_cafd ++;};if _bgfc > 0{_daafc .Data [_fffga ]=_dcde (_daafc .Data [_fffga ],_fgee .Data [_cafd ]^_daafc .Data [_fffga ],_deac );
|
|
};};case PixNotSrcOrDst :for _geab =0;_geab < _bfbb ;_geab ++{_cafd =_dagb +_geab *_fgee .RowStride ;_fffga =_fccdc +_geab *_daafc .RowStride ;for _eecb =0;_eecb < _abdd ;_eecb ++{_daafc .Data [_fffga ]|=^(_fgee .Data [_cafd ]);_fffga ++;_cafd ++;};if _bgfc > 0{_daafc .Data [_fffga ]=_dcde (_daafc .Data [_fffga ],^(_fgee .Data [_cafd ])|_daafc .Data [_fffga ],_deac );
|
|
};};case PixNotSrcAndDst :for _geab =0;_geab < _bfbb ;_geab ++{_cafd =_dagb +_geab *_fgee .RowStride ;_fffga =_fccdc +_geab *_daafc .RowStride ;for _eecb =0;_eecb < _abdd ;_eecb ++{_daafc .Data [_fffga ]&=^(_fgee .Data [_cafd ]);_fffga ++;_cafd ++;};if _bgfc > 0{_daafc .Data [_fffga ]=_dcde (_daafc .Data [_fffga ],^(_fgee .Data [_cafd ])&_daafc .Data [_fffga ],_deac );
|
|
};};case PixSrcOrNotDst :for _geab =0;_geab < _bfbb ;_geab ++{_cafd =_dagb +_geab *_fgee .RowStride ;_fffga =_fccdc +_geab *_daafc .RowStride ;for _eecb =0;_eecb < _abdd ;_eecb ++{_daafc .Data [_fffga ]=_fgee .Data [_cafd ]|^(_daafc .Data [_fffga ]);_fffga ++;
|
|
_cafd ++;};if _bgfc > 0{_daafc .Data [_fffga ]=_dcde (_daafc .Data [_fffga ],_fgee .Data [_cafd ]|^(_daafc .Data [_fffga ]),_deac );};};case PixSrcAndNotDst :for _geab =0;_geab < _bfbb ;_geab ++{_cafd =_dagb +_geab *_fgee .RowStride ;_fffga =_fccdc +_geab *_daafc .RowStride ;
|
|
for _eecb =0;_eecb < _abdd ;_eecb ++{_daafc .Data [_fffga ]=_fgee .Data [_cafd ]&^(_daafc .Data [_fffga ]);_fffga ++;_cafd ++;};if _bgfc > 0{_daafc .Data [_fffga ]=_dcde (_daafc .Data [_fffga ],_fgee .Data [_cafd ]&^(_daafc .Data [_fffga ]),_deac );};};
|
|
case PixNotPixSrcOrDst :for _geab =0;_geab < _bfbb ;_geab ++{_cafd =_dagb +_geab *_fgee .RowStride ;_fffga =_fccdc +_geab *_daafc .RowStride ;for _eecb =0;_eecb < _abdd ;_eecb ++{_daafc .Data [_fffga ]=^(_fgee .Data [_cafd ]|_daafc .Data [_fffga ]);_fffga ++;
|
|
_cafd ++;};if _bgfc > 0{_daafc .Data [_fffga ]=_dcde (_daafc .Data [_fffga ],^(_fgee .Data [_cafd ]|_daafc .Data [_fffga ]),_deac );};};case PixNotPixSrcAndDst :for _geab =0;_geab < _bfbb ;_geab ++{_cafd =_dagb +_geab *_fgee .RowStride ;_fffga =_fccdc +_geab *_daafc .RowStride ;
|
|
for _eecb =0;_eecb < _abdd ;_eecb ++{_daafc .Data [_fffga ]=^(_fgee .Data [_cafd ]&_daafc .Data [_fffga ]);_fffga ++;_cafd ++;};if _bgfc > 0{_daafc .Data [_fffga ]=_dcde (_daafc .Data [_fffga ],^(_fgee .Data [_cafd ]&_daafc .Data [_fffga ]),_deac );};};
|
|
case PixNotPixSrcXorDst :for _geab =0;_geab < _bfbb ;_geab ++{_cafd =_dagb +_geab *_fgee .RowStride ;_fffga =_fccdc +_geab *_daafc .RowStride ;for _eecb =0;_eecb < _abdd ;_eecb ++{_daafc .Data [_fffga ]=^(_fgee .Data [_cafd ]^_daafc .Data [_fffga ]);_fffga ++;
|
|
_cafd ++;};if _bgfc > 0{_daafc .Data [_fffga ]=_dcde (_daafc .Data [_fffga ],^(_fgee .Data [_cafd ]^_daafc .Data [_fffga ]),_deac );};};default:_eb .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",_egef );
|
|
return _g .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 (_gccf *BitmapsArray )GetBox (i int )(*_c .Rectangle ,error ){const _debb ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _gccf ==nil {return nil ,_g .Error (_debb ,"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 (_gccf .Boxes )-1{return nil ,_g .Errorf (_debb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _gccf .Boxes [i ],nil ;};func (_cdbb *Bitmap )GetPixel (x ,y int )bool {_afe :=_cdbb .GetByteIndex (x ,y );
|
|
_fgb :=_cdbb .GetBitOffset (x );_aeaa :=uint (7-_fgb );if _afe > len (_cdbb .Data )-1{_eb .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 ,_cdbb );
|
|
return false ;};if (_cdbb .Data [_afe ]>>_aeaa )&0x01>=1{return true ;};return false ;};func (_cada *byHeight )Len ()int {return len (_cada .Values )};func (_cba *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _cba .removeBorderGeneral (left ,right ,top ,bot );
|
|
};func TstWriteSymbols (t *_b .T ,bms *Bitmaps ,src *Bitmap ){for _dcfb :=0;_dcfb < bms .Size ();_dcfb ++{_febc :=bms .Values [_dcfb ];_cgad :=bms .Boxes [_dcfb ];_aee :=src .RasterOperation (_cgad .Min .X ,_cgad .Min .Y ,_febc .Width ,_febc .Height ,PixSrc ,_febc ,0,0);
|
|
_fg .NoError (t ,_aee );};};func (_gedf MorphProcess )verify (_fcbb int ,_fgca ,_ebfa *int )error {const _effb ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _gedf .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_gedf .Arguments )!=2{return _g .Error (_effb ,"\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");
|
|
};_ggbb ,_fdag :=_gedf .getWidthHeight ();if _ggbb <=0||_fdag <=0{return _g .Error (_effb ,"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 :_gfae :=len (_gedf .Arguments );*_fgca +=_gfae ;if _gfae < 1||_gfae > 4{return _g .Error (_effb ,"\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 _efcc :=0;_efcc < _gfae ;_efcc ++{if _gedf .Arguments [_efcc ]< 1||_gedf .Arguments [_efcc ]> 4{return _g .Error (_effb ,"\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 (_gedf .Arguments )==0{return _g .Error (_effb ,"\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");
|
|
};_facbe :=_gedf .Arguments [0];if _facbe !=2&&_facbe !=4&&_facbe !=8{return _g .Error (_effb ,"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");
|
|
};*_fgca -=_ffde [_facbe /4];case MopAddBorder :if len (_gedf .Arguments )==0{return _g .Error (_effb ,"\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");
|
|
};_aagb :=_gedf .Arguments [0];if _fcbb > 0{return _g .Error (_effb ,"\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 _aagb < 1{return _g .Error (_effb ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_ebfa =_aagb ;};return nil ;};func (_cfgg *Bitmap )centroid (_bdfe ,_cccb []int )(Point ,error ){_dbdf :=Point {};
|
|
_cfgg .setPadBits (0);if len (_bdfe )==0{_bdfe =_dddb ();};if len (_cccb )==0{_cccb =_fadfg ();};var _adff ,_acddb ,_cfeg ,_gdc ,_ege ,_aeadg int ;var _aagae byte ;for _ege =0;_ege < _cfgg .Height ;_ege ++{_bfce :=_cfgg .RowStride *_ege ;_gdc =0;for _aeadg =0;
|
|
_aeadg < _cfgg .RowStride ;_aeadg ++{_aagae =_cfgg .Data [_bfce +_aeadg ];if _aagae !=0{_gdc +=_cccb [_aagae ];_adff +=_bdfe [_aagae ]+_aeadg *8*_cccb [_aagae ];};};_cfeg +=_gdc ;_acddb +=_gdc *_ege ;};if _cfeg !=0{_dbdf .X =float32 (_adff )/float32 (_cfeg );
|
|
_dbdf .Y =float32 (_acddb )/float32 (_cfeg );};return _dbdf ,nil ;};func (_gef *Bitmap )addBorderGeneral (_cbee ,_dba ,_gfcg ,_adf int ,_adba int )(*Bitmap ,error ){const _ceb ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
|
|
if _cbee < 0||_dba < 0||_gfcg < 0||_adf < 0{return nil ,_g .Error (_ceb ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_gbc ,_dfbc :=_gef .Width ,_gef .Height ;_dfe :=_gbc +_cbee +_dba ;_egag :=_dfbc +_gfcg +_adf ;
|
|
_efb :=New (_dfe ,_egag );_efb .Color =_gef .Color ;_efeb :=PixClr ;if _adba > 0{_efeb =PixSet ;};_dcd :=_efb .RasterOperation (0,0,_cbee ,_egag ,_efeb ,nil ,0,0);if _dcd !=nil {return nil ,_g .Wrap (_dcd ,_ceb ,"\u006c\u0065\u0066\u0074");};_dcd =_efb .RasterOperation (_dfe -_dba ,0,_dba ,_egag ,_efeb ,nil ,0,0);
|
|
if _dcd !=nil {return nil ,_g .Wrap (_dcd ,_ceb ,"\u0072\u0069\u0067h\u0074");};_dcd =_efb .RasterOperation (0,0,_dfe ,_gfcg ,_efeb ,nil ,0,0);if _dcd !=nil {return nil ,_g .Wrap (_dcd ,_ceb ,"\u0074\u006f\u0070");};_dcd =_efb .RasterOperation (0,_egag -_adf ,_dfe ,_adf ,_efeb ,nil ,0,0);
|
|
if _dcd !=nil {return nil ,_g .Wrap (_dcd ,_ceb ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_dcd =_efb .RasterOperation (_cbee ,_gfcg ,_gbc ,_dfbc ,PixSrc ,_gef ,0,0);if _dcd !=nil {return nil ,_g .Wrap (_dcd ,_ceb ,"\u0063\u006f\u0070\u0079");};return _efb ,nil ;
|
|
};func _cdfd (_dbaga *_e .Stack ,_gcfca ,_dbge ,_egcg ,_eabc ,_fbaca int ,_fcdg *_c .Rectangle )(_aedaf error ){const _fccg ="\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 _dbaga ==nil {return _g .Error (_fccg ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _fcdg ==nil {return _g .Error (_fccg ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
|
|
};_fcdg .Min .X =_e .Min (_fcdg .Min .X ,_gcfca );_fcdg .Max .X =_e .Max (_fcdg .Max .X ,_dbge );_fcdg .Min .Y =_e .Min (_fcdg .Min .Y ,_egcg );_fcdg .Max .Y =_e .Max (_fcdg .Max .Y ,_egcg );if !(_egcg +_eabc >=0&&_egcg +_eabc <=_fbaca ){return nil ;};
|
|
if _dbaga .Aux ==nil {return _g .Error (_fccg ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _abbe *fillSegment ;_cdfgf ,_bcef :=_dbaga .Aux .Pop ();if _bcef {if _abbe ,_bcef =_cdfgf .(*fillSegment );
|
|
!_bcef {return _g .Error (_fccg ,"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 {_abbe =&fillSegment {};
|
|
};_abbe ._agede =_gcfca ;_abbe ._cfcfb =_dbge ;_abbe ._ggcec =_egcg ;_abbe ._cbcag =_eabc ;_dbaga .Push (_abbe );return nil ;};func (_fbf *Bitmap )SetPixel (x ,y int ,pixel byte )error {_gbb :=_fbf .GetByteIndex (x ,y );if _gbb > len (_fbf .Data )-1{return _g .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",_gbb );
|
|
};_gbf :=_fbf .GetBitOffset (x );_gdf :=uint (7-_gbf );_dgf :=_fbf .Data [_gbb ];var _gabc byte ;if pixel ==1{_gabc =_dgf |(pixel &0x01<<_gdf );}else {_gabc =_dgf &^(1<<_gdf );};_fbf .Data [_gbb ]=_gabc ;return nil ;};func (_gcc *Bitmap )nextOnPixel (_cbbc ,_bfde int )(_dcaa _c .Point ,_dbd bool ,_gbbb error ){const _fae ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";
|
|
_dcaa ,_dbd ,_gbbb =_gcc .nextOnPixelLow (_gcc .Width ,_gcc .Height ,_gcc .RowStride ,_cbbc ,_bfde );if _gbbb !=nil {return _dcaa ,false ,_g .Wrap (_gbbb ,_fae ,"");};return _dcaa ,_dbd ,nil ;};func (_abgb *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _gfcb ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";
|
|
if _eegfb :=_abgb .validateIntSlice ();_eegfb !=nil {return nil ,_g .Wrap (_eegfb ,_gfcb ,"");};if _abgb .IntSlice .Size ()==0{return nil ,_g .Error (_gfcb ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");
|
|
};_abgb .SortByY ();var (_gfdb []*ClassedPoints ;_bced int ;);_cgab :=-1;var _dacaa *ClassedPoints ;for _deab :=0;_deab < len (_abgb .IntSlice );_deab ++{_bced =int (_abgb .YAtIndex (_deab ));if _bced !=_cgab {_dacaa =&ClassedPoints {Points :_abgb .Points };
|
|
_cgab =_bced ;_gfdb =append (_gfdb ,_dacaa );};_dacaa .IntSlice =append (_dacaa .IntSlice ,_abgb .IntSlice [_deab ]);};for _ ,_bbec :=range _gfdb {_bbec .SortByX ();};return _gfdb ,nil ;};func (_eab *Bitmap )setPadBits (_ceab int ){_gbg :=8-_eab .Width %8;
|
|
if _gbg ==8{return ;};_abbde :=_eab .Width /8;_gadd :=_becb [_gbg ];if _ceab ==0{_gadd ^=_gadd ;};var _dbbd int ;for _cac :=0;_cac < _eab .Height ;_cac ++{_dbbd =_cac *_eab .RowStride +_abbde ;if _ceab ==0{_eab .Data [_dbbd ]&=_gadd ;}else {_eab .Data [_dbbd ]|=_gadd ;
|
|
};};};func (_cedcg *Bitmap )inverseData (){if _cdc :=_cedcg .RasterOperation (0,0,_cedcg .Width ,_cedcg .Height ,PixNotDst ,nil ,0,0);_cdc !=nil {_eb .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_cdc );
|
|
};if _cedcg .Color ==Chocolate {_cedcg .Color =Vanilla ;}else {_cedcg .Color =Chocolate ;};};func _bfac (_geee *Bitmap ,_edg *_e .Stack ,_dgfe ,_fffc int )(_cedcc *_c .Rectangle ,_fcedf error ){const _cfca ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
|
|
if _geee ==nil {return nil ,_g .Error (_cfca ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _edg ==nil {return nil ,_g .Error (_cfca ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
|
|
};_dcc ,_degdcc :=_geee .Width ,_geee .Height ;_dgeac :=_dcc -1;_dbcf :=_degdcc -1;if _dgfe < 0||_dgfe > _dgeac ||_fffc < 0||_fffc > _dbcf ||!_geee .GetPixel (_dgfe ,_fffc ){return nil ,nil ;};var _cdaa *_c .Rectangle ;_cdaa ,_fcedf =Rect (100000,100000,0,0);
|
|
if _fcedf !=nil {return nil ,_g .Wrap (_fcedf ,_cfca ,"");};if _fcedf =_cdfd (_edg ,_dgfe ,_dgfe ,_fffc ,1,_dbcf ,_cdaa );_fcedf !=nil {return nil ,_g .Wrap (_fcedf ,_cfca ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fcedf =_cdfd (_edg ,_dgfe ,_dgfe ,_fffc +1,-1,_dbcf ,_cdaa );
|
|
_fcedf !=nil {return nil ,_g .Wrap (_fcedf ,_cfca ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_cdaa .Min .X ,_cdaa .Max .X =_dgfe ,_dgfe ;_cdaa .Min .Y ,_cdaa .Max .Y =_fffc ,_fffc ;var (_cbeeb *fillSegment ;
|
|
_bdbe int ;);for _edg .Len ()> 0{if _cbeeb ,_fcedf =_feef (_edg );_fcedf !=nil {return nil ,_g .Wrap (_fcedf ,_cfca ,"");};_fffc =_cbeeb ._ggcec ;for _dgfe =_cbeeb ._agede ;_dgfe >=0&&_geee .GetPixel (_dgfe ,_fffc );_dgfe --{if _fcedf =_geee .SetPixel (_dgfe ,_fffc ,0);
|
|
_fcedf !=nil {return nil ,_g .Wrap (_fcedf ,_cfca ,"");};};if _dgfe >=_cbeeb ._agede {for _dgfe ++;_dgfe <=_cbeeb ._cfcfb &&_dgfe <=_dgeac &&!_geee .GetPixel (_dgfe ,_fffc );_dgfe ++{};_bdbe =_dgfe ;if !(_dgfe <=_cbeeb ._cfcfb &&_dgfe <=_dgeac ){continue ;
|
|
};}else {_bdbe =_dgfe +1;if _bdbe < _cbeeb ._agede -1{if _fcedf =_cdfd (_edg ,_bdbe ,_cbeeb ._agede -1,_cbeeb ._ggcec ,-_cbeeb ._cbcag ,_dbcf ,_cdaa );_fcedf !=nil {return nil ,_g .Wrap (_fcedf ,_cfca ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
|
|
};};_dgfe =_cbeeb ._agede +1;};for {for ;_dgfe <=_dgeac &&_geee .GetPixel (_dgfe ,_fffc );_dgfe ++{if _fcedf =_geee .SetPixel (_dgfe ,_fffc ,0);_fcedf !=nil {return nil ,_g .Wrap (_fcedf ,_cfca ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _fcedf =_cdfd (_edg ,_bdbe ,_dgfe -1,_cbeeb ._ggcec ,_cbeeb ._cbcag ,_dbcf ,_cdaa );
|
|
_fcedf !=nil {return nil ,_g .Wrap (_fcedf ,_cfca ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _dgfe > _cbeeb ._cfcfb +1{if _fcedf =_cdfd (_edg ,_cbeeb ._cfcfb +1,_dgfe -1,_cbeeb ._ggcec ,-_cbeeb ._cbcag ,_dbcf ,_cdaa );_fcedf !=nil {return nil ,_g .Wrap (_fcedf ,_cfca ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};for _dgfe ++;_dgfe <=_cbeeb ._cfcfb &&_dgfe <=_dgeac &&!_geee .GetPixel (_dgfe ,_fffc );_dgfe ++{};_bdbe =_dgfe ;if !(_dgfe <=_cbeeb ._cfcfb &&_dgfe <=_dgeac ){break ;};};};_cdaa .Max .X ++;_cdaa .Max .Y ++;return _cdaa ,nil ;};func TstASymbol (t *_b .T )*Bitmap {t .Helper ();
|
|
_acgb :=New (6,6);_fg .NoError (t ,_acgb .SetPixel (1,0,1));_fg .NoError (t ,_acgb .SetPixel (2,0,1));_fg .NoError (t ,_acgb .SetPixel (3,0,1));_fg .NoError (t ,_acgb .SetPixel (4,0,1));_fg .NoError (t ,_acgb .SetPixel (5,1,1));_fg .NoError (t ,_acgb .SetPixel (1,2,1));
|
|
_fg .NoError (t ,_acgb .SetPixel (2,2,1));_fg .NoError (t ,_acgb .SetPixel (3,2,1));_fg .NoError (t ,_acgb .SetPixel (4,2,1));_fg .NoError (t ,_acgb .SetPixel (5,2,1));_fg .NoError (t ,_acgb .SetPixel (0,3,1));_fg .NoError (t ,_acgb .SetPixel (5,3,1));
|
|
_fg .NoError (t ,_acgb .SetPixel (0,4,1));_fg .NoError (t ,_acgb .SetPixel (5,4,1));_fg .NoError (t ,_acgb .SetPixel (1,5,1));_fg .NoError (t ,_acgb .SetPixel (2,5,1));_fg .NoError (t ,_acgb .SetPixel (3,5,1));_fg .NoError (t ,_acgb .SetPixel (4,5,1));
|
|
_fg .NoError (t ,_acgb .SetPixel (5,5,1));return _acgb ;};func _addd (_afff ,_abgcc *Bitmap ,_ebeeb *Selection )(*Bitmap ,error ){const _abae ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _ffcdb error ;if _afff ,_ffcdb =_bdbcf (_afff ,_abgcc ,_ebeeb );
|
|
_ffcdb !=nil {return nil ,_ffcdb ;};_cafb ,_ffcdb :=_gaeb (nil ,_abgcc ,_ebeeb );if _ffcdb !=nil {return nil ,_g .Wrap (_ffcdb ,_abae ,"");};if _ ,_ffcdb =_dcab (_afff ,_cafb ,_ebeeb );_ffcdb !=nil {return nil ,_g .Wrap (_ffcdb ,_abae ,"");};return _afff ,nil ;
|
|
};type byHeight Bitmaps ;type RasterOperator int ;func (_bfcdg *Bitmap )InverseData (){_bfcdg .inverseData ()};const (Vanilla Color =iota ;Chocolate ;);func _aacd (_eedf ,_eebe *Bitmap ,_gddad *Selection )(*Bitmap ,error ){const _agf ="\u006f\u0070\u0065\u006e";
|
|
var _egda error ;_eedf ,_egda =_bdbcf (_eedf ,_eebe ,_gddad );if _egda !=nil {return nil ,_g .Wrap (_egda ,_agf ,"");};_fbee ,_egda :=_dcab (nil ,_eebe ,_gddad );if _egda !=nil {return nil ,_g .Wrap (_egda ,_agf ,"");};_ ,_egda =_gaeb (_eedf ,_fbee ,_gddad );
|
|
if _egda !=nil {return nil ,_g .Wrap (_egda ,_agf ,"");};return _eedf ,nil ;};var _ _fe .Interface =&ClassedPoints {};func (_cbbcg *Points )Add (pt *Points )error {const _decd ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _cbbcg ==nil {return _g .Error (_decd ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if pt ==nil {return _g .Error (_decd ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_cbbcg =append (*_cbbcg ,*pt ...);return nil ;};func (_gce *Bitmap )setBit (_deedd int ){_gce .Data [(_deedd >>3)]|=0x80>>uint (_deedd &7)};
|
|
type SizeSelection int ;const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func (_fbge *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _edae ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";
|
|
_afba ,_eecd :=_fbge .selectByIndexes (idx );if _eecd !=nil {return nil ,_g .Wrap (_eecd ,_edae ,"");};return _afba ,nil ;};func _bdgc (_cfa ...MorphProcess )(_acfge error ){const _ebce ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";
|
|
var _eadc ,_fadfb int ;for _ffaea ,_bedfcf :=range _cfa {if _acfge =_bedfcf .verify (_ffaea ,&_eadc ,&_fadfb );_acfge !=nil {return _g .Wrap (_acfge ,_ebce ,"");};};if _fadfb !=0&&_eadc !=0{return _g .Error (_ebce ,"\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 _acff (_ecbb *Bitmap ,_gcgge ,_aaba ,_begc ,_dbbf int ,_gbdf RasterOperator ){if _gcgge < 0{_begc +=_gcgge ;_gcgge =0;};_fbef :=_gcgge +_begc -_ecbb .Width ;if _fbef > 0{_begc -=_fbef ;};if _aaba < 0{_dbbf +=_aaba ;_aaba =0;};_ggga :=_aaba +_dbbf -_ecbb .Height ;
|
|
if _ggga > 0{_dbbf -=_ggga ;};if _begc <=0||_dbbf <=0{return ;};if (_gcgge &7)==0{_defac (_ecbb ,_gcgge ,_aaba ,_begc ,_dbbf ,_gbdf );}else {_daead (_ecbb ,_gcgge ,_aaba ,_begc ,_dbbf ,_gbdf );};};func (_geb *Bitmap )SetDefaultPixel (){for _edd :=range _geb .Data {_geb .Data [_edd ]=byte (0xff);
|
|
};};func (_abbd *Bitmap )addPadBits ()(_bcad error ){const _cdbca ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_cedc :=_abbd .Width %8;if _cedc ==0{return nil ;};_dde :=_abbd .Width /8;_cce :=_bd .NewReader (_abbd .Data );
|
|
_bae :=make ([]byte ,_abbd .Height *_abbd .RowStride );_agce :=_bd .NewWriterMSB (_bae );_egc :=make ([]byte ,_dde );var (_becc int ;_daed uint64 ;);for _becc =0;_becc < _abbd .Height ;_becc ++{if _ ,_bcad =_cce .Read (_egc );_bcad !=nil {return _g .Wrap (_bcad ,_cdbca ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");
|
|
};if _ ,_bcad =_agce .Write (_egc );_bcad !=nil {return _g .Wrap (_bcad ,_cdbca ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _daed ,_bcad =_cce .ReadBits (byte (_cedc ));_bcad !=nil {return _g .Wrap (_bcad ,_cdbca ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");
|
|
};if _bcad =_agce .WriteByte (byte (_daed )<<uint (8-_cedc ));_bcad !=nil {return _g .Wrap (_bcad ,_cdbca ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");};};_abbd .Data =_agce .Data ();return nil ;};func _ece (_bdb *Bitmap ,_da *Bitmap ,_fb int )(_agc error ){const _gfe ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";
|
|
switch _fb {case 2:_agc =_cg (_bdb ,_da );case 4:_agc =_ae (_bdb ,_da );case 8:_agc =_ad (_bdb ,_da );default:return _g .Error (_gfe ,"\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 _agc !=nil {_agc =_g .Wrap (_agc ,_gfe ,"");};return _agc ;};func _defac (_ebbca *Bitmap ,_adcd ,_cdbad int ,_dfgf ,_fedag int ,_fffaa RasterOperator ){var (_ebefa int ;_cbcad byte ;_dgfc ,_cbgg int ;_abca int ;);_agaf :=_dfgf >>3;_efffb :=_dfgf &7;
|
|
if _efffb > 0{_cbcad =_ddcf [_efffb ];};_ebefa =_ebbca .RowStride *_cdbad +(_adcd >>3);switch _fffaa {case PixClr :for _dgfc =0;_dgfc < _fedag ;_dgfc ++{_abca =_ebefa +_dgfc *_ebbca .RowStride ;for _cbgg =0;_cbgg < _agaf ;_cbgg ++{_ebbca .Data [_abca ]=0x0;
|
|
_abca ++;};if _efffb > 0{_ebbca .Data [_abca ]=_dcde (_ebbca .Data [_abca ],0x0,_cbcad );};};case PixSet :for _dgfc =0;_dgfc < _fedag ;_dgfc ++{_abca =_ebefa +_dgfc *_ebbca .RowStride ;for _cbgg =0;_cbgg < _agaf ;_cbgg ++{_ebbca .Data [_abca ]=0xff;_abca ++;
|
|
};if _efffb > 0{_ebbca .Data [_abca ]=_dcde (_ebbca .Data [_abca ],0xff,_cbcad );};};case PixNotDst :for _dgfc =0;_dgfc < _fedag ;_dgfc ++{_abca =_ebefa +_dgfc *_ebbca .RowStride ;for _cbgg =0;_cbgg < _agaf ;_cbgg ++{_ebbca .Data [_abca ]=^_ebbca .Data [_abca ];
|
|
_abca ++;};if _efffb > 0{_ebbca .Data [_abca ]=_dcde (_ebbca .Data [_abca ],^_ebbca .Data [_abca ],_cbcad );};};};};func _fffb (_bacg ,_bffb *Bitmap ,_dggf ,_agaa ,_gcgb uint ,_ecff ,_agca int ,_gdda bool ,_dabc ,_ddfe int )error {for _cdbe :=_ecff ;_cdbe < _agca ;
|
|
_cdbe ++{if _dabc +1< len (_bacg .Data ){_gcbb :=_cdbe +1==_agca ;_eefge ,_bfa :=_bacg .GetByte (_dabc );if _bfa !=nil {return _bfa ;};_dabc ++;_eefge <<=_dggf ;_egbe ,_bfa :=_bacg .GetByte (_dabc );if _bfa !=nil {return _bfa ;};_egbe >>=_agaa ;_cfd :=_eefge |_egbe ;
|
|
if _gcbb &&!_gdda {_cfd =_aede (_gcgb ,_cfd );};_bfa =_bffb .SetByte (_ddfe ,_cfd );if _bfa !=nil {return _bfa ;};_ddfe ++;if _gcbb &&_gdda {_bab ,_fgaa :=_bacg .GetByte (_dabc );if _fgaa !=nil {return _fgaa ;};_bab <<=_dggf ;_cfd =_aede (_gcgb ,_bab );
|
|
if _fgaa =_bffb .SetByte (_ddfe ,_cfd );_fgaa !=nil {return _fgaa ;};};continue ;};_gedd ,_fccd :=_bacg .GetByte (_dabc );if _fccd !=nil {_eb .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",_dabc ,_fccd );
|
|
return _fccd ;};_gedd <<=_dggf ;_dabc ++;_fccd =_bffb .SetByte (_ddfe ,_gedd );if _fccd !=nil {return _fccd ;};_ddfe ++;};return nil ;};func _fdff ()(_ace []byte ){_ace =make ([]byte ,256);for _fcc :=0;_fcc < 256;_fcc ++{_dcb :=byte (_fcc );_ace [_dcb ]=(_dcb &0x01)|((_dcb &0x04)>>1)|((_dcb &0x10)>>2)|((_dcb &0x40)>>3)|((_dcb &0x02)<<3)|((_dcb &0x08)<<2)|((_dcb &0x20)<<1)|(_dcb &0x80);
|
|
};return _ace ;};func _gbdb (_geae ,_bece int )int {if _geae < _bece {return _geae ;};return _bece ;};func TstWordBitmapWithSpaces (t *_b .T ,scale ...int )*Bitmap {_eaba :=1;if len (scale )> 0{_eaba =scale [0];};_edfb :=3;_facd :=9+7+15+2*_edfb +2*_edfb ;
|
|
_bffd :=5+_edfb +5+2*_edfb ;_ffad :=New (_facd *_eaba ,_bffd *_eaba );_gbbgb :=&Bitmaps {};var _bcbda *int ;_edfb *=_eaba ;_ddegb :=_edfb ;_bcbda =&_ddegb ;_egcd :=_edfb ;_eaec :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,1*_eaba );
|
|
_eaec =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,_edfb );_eaec =TstISymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,1*_eaba );_eaec =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,_edfb );
|
|
_eaec =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,1*_eaba );_eaec =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,1*_eaba );_eaec =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,0);
|
|
*_bcbda =_edfb ;_egcd =5*_eaba +_edfb ;_eaec =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,1*_eaba );_eaec =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,_edfb );_eaec =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,1*_eaba );
|
|
_eaec =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,1*_eaba );_eaec =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,1*_eaba );_eaec =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,1*_eaba );
|
|
_eaec =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gbbgb ,_eaec ,_bcbda ,_egcd ,0);TstWriteSymbols (t ,_gbbgb ,_ffad );return _ffad ;};func _fgdd (_ggcf *Bitmap ,_aebd *_e .Stack ,_fcegd ,_fdgb ,_cdff int )(_ccfea *_c .Rectangle ,_cbcb error ){const _aebg ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
|
|
if _ggcf ==nil {return nil ,_g .Error (_aebg ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _aebd ==nil {return nil ,_g .Error (_aebg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
|
|
};switch _cdff {case 4:if _ccfea ,_cbcb =_bfac (_ggcf ,_aebd ,_fcegd ,_fdgb );_cbcb !=nil {return nil ,_g .Wrap (_cbcb ,_aebg ,"");};return _ccfea ,nil ;case 8:if _ccfea ,_cbcb =_beca (_ggcf ,_aebd ,_fcegd ,_fdgb );_cbcb !=nil {return nil ,_g .Wrap (_cbcb ,_aebg ,"");
|
|
};return _ccfea ,nil ;default:return nil ,_g .Errorf (_aebg ,"\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",_cdff );
|
|
};};func Rect (x ,y ,w ,h int )(*_c .Rectangle ,error ){const _cecc ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_g .Errorf (_cecc ,"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 ,_g .Error (_cecc ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_facea :=_c .Rect (x ,y ,x +w ,y +h );return &_facea ,nil ;
|
|
};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_ccfge float64 ,_agaaa error ){const _fbfe ="\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 _ccfge ,_g .Error (_fbfe ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _ccfge ,_g .Error (_fbfe ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if area1 ==0||area2 ==0{return _ccfge ,_g .Error (_fbfe ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_fbda ,_ebgef :=bm1 .Width ,bm1 .Height ;
|
|
_baed ,_gbab :=bm2 .Width ,bm2 .Height ;if _adc (_fbda -_baed )> maxDiffW {return 0,nil ;};if _adc (_ebgef -_gbab )> maxDiffH {return 0,nil ;};var _cdba ,_ccfc int ;if delX >=0{_cdba =int (delX +0.5);}else {_cdba =int (delX -0.5);};if delY >=0{_ccfc =int (delY +0.5);
|
|
}else {_ccfc =int (delY -0.5);};_daa :=bm1 .createTemplate ();if _agaaa =_daa .RasterOperation (_cdba ,_ccfc ,_baed ,_gbab ,PixSrc ,bm2 ,0,0);_agaaa !=nil {return _ccfge ,_g .Wrap (_agaaa ,_fbfe ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");
|
|
};if _agaaa =_daa .RasterOperation (0,0,_fbda ,_ebgef ,PixSrcAndDst ,bm1 ,0,0);_agaaa !=nil {return _ccfge ,_g .Wrap (_agaaa ,_fbfe ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_afgg :=_daa .countPixels ();_ccfge =float64 (_afgg )*float64 (_afgg )/(float64 (area1 )*float64 (area2 ));
|
|
return _ccfge ,nil ;};func (_edef *Bitmaps )makeSizeIndicator (_bcfd ,_cdefd int ,_acfc LocationFilter ,_bbaf SizeComparison )(_cbff *_e .NumSlice ,_gbfb error ){const _gded ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _edef ==nil {return nil ,_g .Error (_gded ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _acfc {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_g .Errorf (_gded ,"\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",_acfc );
|
|
};switch _bbaf {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_g .Errorf (_gded ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_bbaf );
|
|
};_cbff =&_e .NumSlice {};var (_abcac ,_ddbb ,_dfbbe int ;_fafdc *Bitmap ;);for _ ,_fafdc =range _edef .Values {_abcac =0;_ddbb ,_dfbbe =_fafdc .Width ,_fafdc .Height ;switch _acfc {case LocSelectWidth :if (_bbaf ==SizeSelectIfLT &&_ddbb < _bcfd )||(_bbaf ==SizeSelectIfGT &&_ddbb > _bcfd )||(_bbaf ==SizeSelectIfLTE &&_ddbb <=_bcfd )||(_bbaf ==SizeSelectIfGTE &&_ddbb >=_bcfd )||(_bbaf ==SizeSelectIfEQ &&_ddbb ==_bcfd ){_abcac =1;
|
|
};case LocSelectHeight :if (_bbaf ==SizeSelectIfLT &&_dfbbe < _cdefd )||(_bbaf ==SizeSelectIfGT &&_dfbbe > _cdefd )||(_bbaf ==SizeSelectIfLTE &&_dfbbe <=_cdefd )||(_bbaf ==SizeSelectIfGTE &&_dfbbe >=_cdefd )||(_bbaf ==SizeSelectIfEQ &&_dfbbe ==_cdefd ){_abcac =1;
|
|
};case LocSelectIfEither :if (_bbaf ==SizeSelectIfLT &&(_ddbb < _bcfd ||_dfbbe < _cdefd ))||(_bbaf ==SizeSelectIfGT &&(_ddbb > _bcfd ||_dfbbe > _cdefd ))||(_bbaf ==SizeSelectIfLTE &&(_ddbb <=_bcfd ||_dfbbe <=_cdefd ))||(_bbaf ==SizeSelectIfGTE &&(_ddbb >=_bcfd ||_dfbbe >=_cdefd ))||(_bbaf ==SizeSelectIfEQ &&(_ddbb ==_bcfd ||_dfbbe ==_cdefd )){_abcac =1;
|
|
};case LocSelectIfBoth :if (_bbaf ==SizeSelectIfLT &&(_ddbb < _bcfd &&_dfbbe < _cdefd ))||(_bbaf ==SizeSelectIfGT &&(_ddbb > _bcfd &&_dfbbe > _cdefd ))||(_bbaf ==SizeSelectIfLTE &&(_ddbb <=_bcfd &&_dfbbe <=_cdefd ))||(_bbaf ==SizeSelectIfGTE &&(_ddbb >=_bcfd &&_dfbbe >=_cdefd ))||(_bbaf ==SizeSelectIfEQ &&(_ddbb ==_bcfd &&_dfbbe ==_cdefd )){_abcac =1;
|
|
};};_cbff .AddInt (_abcac );};return _cbff ,nil ;};func _adfb (_acb ,_fcgf *Bitmap )(*Bitmap ,error ){if _fcgf ==nil {return nil ,_g .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 _fcgf ==_acb {return _acb ,nil ;};if _acb ==nil {_acb =_fcgf .createTemplate ();copy (_acb .Data ,_fcgf .Data );return _acb ,nil ;};_dge :=_acb .resizeImageData (_fcgf );if _dge !=nil {return nil ,_g .Wrap (_dge ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
|
|
};_acb .Text =_fcgf .Text ;copy (_acb .Data ,_fcgf .Data );return _acb ,nil ;};type SizeComparison int ;func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_accd bool ,_eefc error ){const _ffgc ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
|
|
_fbc ,_gffc :=p1 .Width ,p1 .Height ;_cgge ,_bbge :=p3 .Width ,p3 .Height ;if _e .Abs (_fbc -_cgge )> maxDiffW {return false ,nil ;};if _e .Abs (_gffc -_bbge )> maxDiffH {return false ,nil ;};_bbbd :=int (float32 (area1 )*(1.0-rank )+0.5);_dgff :=int (float32 (area3 )*(1.0-rank )+0.5);
|
|
var _dedg ,_aedd int ;if delX >=0{_dedg =int (delX +0.5);}else {_dedg =int (delX -0.5);};if delY >=0{_aedd =int (delY +0.5);}else {_aedd =int (delY -0.5);};_ebcbf :=p1 .CreateTemplate ();if _eefc =_ebcbf .RasterOperation (0,0,_fbc ,_gffc ,PixSrc ,p1 ,0,0);
|
|
_eefc !=nil {return false ,_g .Wrap (_eefc ,_ffgc ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _eefc =_ebcbf .RasterOperation (_dedg ,_aedd ,_fbc ,_gffc ,PixNotSrcAndDst ,p4 ,0,0);_eefc !=nil {return false ,_g .Wrap (_eefc ,_ffgc ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
|
|
};_accd ,_eefc =_ebcbf .ThresholdPixelSum (_bbbd ,tab8 );if _eefc !=nil {return false ,_g .Wrap (_eefc ,_ffgc ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _accd {return false ,nil ;};if _eefc =_ebcbf .RasterOperation (_dedg ,_aedd ,_cgge ,_bbge ,PixSrc ,p3 ,0,0);
|
|
_eefc !=nil {return false ,_g .Wrap (_eefc ,_ffgc ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _eefc =_ebcbf .RasterOperation (0,0,_cgge ,_bbge ,PixNotSrcAndDst ,p2 ,0,0);_eefc !=nil {return false ,_g .Wrap (_eefc ,_ffgc ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
|
|
};_accd ,_eefc =_ebcbf .ThresholdPixelSum (_dgff ,tab8 );if _eefc !=nil {return false ,_g .Wrap (_eefc ,_ffgc ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_accd ,nil ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;
|
|
RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_bgg *Boxes )selectWithIndicator (_dceg *_e .NumSlice )(_dgd *Boxes ,_ccdaf error ){const _cdbf ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _bgg ==nil {return nil ,_g .Error (_cdbf ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _dceg ==nil {return nil ,_g .Error (_cdbf ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if len (*_dceg )!=len (*_bgg ){return nil ,_g .Error (_cdbf ,"\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 _fca ,_cgag int ;for _dcag :=0;_dcag < len (*_dceg );_dcag ++{if _fca ,_ccdaf =_dceg .GetInt (_dcag );_ccdaf !=nil {return nil ,_g .Wrap (_ccdaf ,_cdbf ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _fca ==1{_cgag ++;
|
|
};};if _cgag ==len (*_bgg ){return _bgg ,nil ;};_deb :=Boxes {};for _fgfef :=0;_fgfef < len (*_dceg );_fgfef ++{_fca =int ((*_dceg )[_fgfef ]);if _fca ==0{continue ;};_deb =append (_deb ,(*_bgg )[_fgfef ]);};_dgd =&_deb ;return _dgd ,nil ;};type Boxes []*_c .Rectangle ;
|
|
func (_eaa *Bitmap )equivalent (_fced *Bitmap )bool {if _eaa ==_fced {return true ;};if !_eaa .SizesEqual (_fced ){return false ;};_ffgg :=_fcga (_eaa ,_fced ,CmbOpXor );_cabf :=_eaa .countPixels ();_ffe :=int (0.25*float32 (_cabf ));if _ffgg .thresholdPixelSum (_ffe ){return false ;
|
|
};var (_ggc [9][9]int ;_fbdb [18][9]int ;_baa [9][18]int ;_eea int ;_cebf int ;);_aed :=9;_cecf :=_eaa .Height /_aed ;_bebb :=_eaa .Width /_aed ;_bag ,_gcgf :=_cecf /2,_bebb /2;if _cecf < _bebb {_bag =_bebb /2;_gcgf =_cecf /2;};_bcf :=float64 (_bag )*float64 (_gcgf )*_ff .Pi ;
|
|
_eeef :=int (float64 (_cecf *_bebb /2)*0.9);_eeb :=int (float64 (_bebb *_cecf /2)*0.9);for _edcg :=0;_edcg < _aed ;_edcg ++{_gcac :=_bebb *_edcg +_eea ;var _dea int ;if _edcg ==_aed -1{_eea =0;_dea =_eaa .Width ;}else {_dea =_gcac +_bebb ;if ((_eaa .Width -_eea )%_aed )> 0{_eea ++;
|
|
_dea ++;};};for _bce :=0;_bce < _aed ;_bce ++{_befe :=_cecf *_bce +_cebf ;var _fbfd int ;if _bce ==_aed -1{_cebf =0;_fbfd =_eaa .Height ;}else {_fbfd =_befe +_cecf ;if (_eaa .Height -_cebf )%_aed > 0{_cebf ++;_fbfd ++;};};var _gcb ,_afec ,_ecc ,_efd int ;
|
|
_gbcc :=(_gcac +_dea )/2;_ebge :=(_befe +_fbfd )/2;for _bdac :=_gcac ;_bdac < _dea ;_bdac ++{for _bbg :=_befe ;_bbg < _fbfd ;_bbg ++{if _ffgg .GetPixel (_bdac ,_bbg ){if _bdac < _gbcc {_gcb ++;}else {_afec ++;};if _bbg < _ebge {_efd ++;}else {_ecc ++;};
|
|
};};};_ggc [_edcg ][_bce ]=_gcb +_afec ;_fbdb [_edcg *2][_bce ]=_gcb ;_fbdb [_edcg *2+1][_bce ]=_afec ;_baa [_edcg ][_bce *2]=_efd ;_baa [_edcg ][_bce *2+1]=_ecc ;};};for _edag :=0;_edag < _aed *2-1;_edag ++{for _bacb :=0;_bacb < (_aed -1);_bacb ++{var _cae int ;
|
|
for _gddb :=0;_gddb < 2;_gddb ++{for _ggf :=0;_ggf < 2;_ggf ++{_cae +=_fbdb [_edag +_gddb ][_bacb +_ggf ];};};if _cae > _eeb {return false ;};};};for _gad :=0;_gad < (_aed -1);_gad ++{for _cbdcf :=0;_cbdcf < ((_aed *2)-1);_cbdcf ++{var _cgff int ;for _cdga :=0;
|
|
_cdga < 2;_cdga ++{for _fege :=0;_fege < 2;_fege ++{_cgff +=_baa [_gad +_cdga ][_cbdcf +_fege ];};};if _cgff > _eeef {return false ;};};};for _gec :=0;_gec < (_aed -2);_gec ++{for _cbbe :=0;_cbbe < (_aed -2);_cbbe ++{var _deef ,_cfg int ;for _ffdg :=0;
|
|
_ffdg < 3;_ffdg ++{for _bba :=0;_bba < 3;_bba ++{if _ffdg ==_bba {_deef +=_ggc [_gec +_ffdg ][_cbbe +_bba ];};if (2-_ffdg )==_bba {_cfg +=_ggc [_gec +_ffdg ][_cbbe +_bba ];};};};if _deef > _eeb ||_cfg > _eeb {return false ;};};};for _ggfc :=0;_ggfc < (_aed -1);
|
|
_ggfc ++{for _dgb :=0;_dgb < (_aed -1);_dgb ++{var _bdec int ;for _cgffe :=0;_cgffe < 2;_cgffe ++{for _fbac :=0;_fbac < 2;_fbac ++{_bdec +=_ggc [_ggfc +_cgffe ][_dgb +_fbac ];};};if float64 (_bdec )> _bcf {return false ;};};};return true ;};func _bgf (_fabg ,_abef *Bitmap ,_egdd ,_fdfg ,_bgfe ,_dfcc ,_fgf ,_cfbd ,_ccec ,_gag int ,_afgae CombinationOperator ,_aaed int )error {var _fgc int ;
|
|
_bdbg :=func (){_fgc ++;_bgfe +=_abef .RowStride ;_dfcc +=_fabg .RowStride ;_fgf +=_fabg .RowStride };for _fgc =_egdd ;_fgc < _fdfg ;_bdbg (){var _cbc uint16 ;_adeg :=_bgfe ;for _gfedg :=_dfcc ;_gfedg <=_fgf ;_gfedg ++{_eae ,_cegfb :=_abef .GetByte (_adeg );
|
|
if _cegfb !=nil {return _cegfb ;};_gge ,_cegfb :=_fabg .GetByte (_gfedg );if _cegfb !=nil {return _cegfb ;};_cbc =(_cbc |(uint16 (_gge )&0xff))<<uint (_gag );_gge =byte (_cbc >>8);if _cegfb =_abef .SetByte (_adeg ,_eegfa (_eae ,_gge ,_afgae ));_cegfb !=nil {return _cegfb ;
|
|
};_adeg ++;_cbc <<=uint (_ccec );if _gfedg ==_fgf {_gge =byte (_cbc >>(8-uint8 (_gag )));if _aaed !=0{_gge =_aede (uint (8+_cfbd ),_gge );};_eae ,_cegfb =_abef .GetByte (_adeg );if _cegfb !=nil {return _cegfb ;};if _cegfb =_abef .SetByte (_adeg ,_eegfa (_eae ,_gge ,_afgae ));
|
|
_cegfb !=nil {return _cegfb ;};};};};return nil ;};var (_aab =_ffc ();_dbdd =_fde ();_dabd =_fbd (););func TstWSymbol (t *_b .T ,scale ...int )*Bitmap {_dfee ,_cbffg :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_fg .NoError (t ,_cbffg );return TstGetScaledSymbol (t ,_dfee ,scale ...);
|
|
};func _ad (_bg ,_cc *Bitmap )(_fc error ){const _cab ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_cb :=_cc .RowStride ;_aff :=_bg .RowStride ;var _fff ,_cbd ,_abe ,_ef ,_ede int ;for _abe =0;
|
|
_abe < _cc .Height ;_abe ++{_fff =_abe *_cb ;_cbd =8*_abe *_aff ;for _ef =0;_ef < _cb ;_ef ++{if _fc =_bg .setEightBytes (_cbd +_ef *8,_dabd [_cc .Data [_fff +_ef ]]);_fc !=nil {return _g .Wrap (_fc ,_cab ,"");};};for _ede =1;_ede < 8;_ede ++{for _ef =0;
|
|
_ef < _aff ;_ef ++{if _fc =_bg .SetByte (_cbd +_ede *_aff +_ef ,_bg .Data [_cbd +_ef ]);_fc !=nil {return _g .Wrap (_fc ,_cab ,"");};};};};return nil ;};type Component int ;func (_dddbe *ClassedPoints )YAtIndex (i int )float32 {return (*_dddbe .Points )[_dddbe .IntSlice [i ]].Y };
|
|
type Color int ;func _dbbgf (_cbcg *Bitmap ,_eeefe *Bitmap ,_gffe *Selection ,_dbfe **Bitmap )(*Bitmap ,error ){const _bbcgb ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _eeefe ==nil {return nil ,_g .Error (_bbcgb ,"\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 _gffe ==nil {return nil ,_g .Error (_bbcgb ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_dabcg ,_cdfb :=_gffe .Height ,_gffe .Width ;if _dabcg ==0||_cdfb ==0{return nil ,_g .Error (_bbcgb ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
|
|
};if _cbcg ==nil {_cbcg =_eeefe .createTemplate ();*_dbfe =_eeefe ;return _cbcg ,nil ;};_cbcg .Width =_eeefe .Width ;_cbcg .Height =_eeefe .Height ;_cbcg .RowStride =_eeefe .RowStride ;_cbcg .Color =_eeefe .Color ;_cbcg .Data =make ([]byte ,_eeefe .RowStride *_eeefe .Height );
|
|
if _cbcg ==_eeefe {*_dbfe =_eeefe .Copy ();}else {*_dbfe =_eeefe ;};return _cbcg ,nil ;};func (_ebcb *Bitmap )setFourBytes (_cgba int ,_face uint32 )error {if _cgba +3> len (_ebcb .Data )-1{return _g .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",_cgba );
|
|
};_ebcb .Data [_cgba ]=byte ((_face &0xff000000)>>24);_ebcb .Data [_cgba +1]=byte ((_face &0xff0000)>>16);_ebcb .Data [_cgba +2]=byte ((_face &0xff00)>>8);_ebcb .Data [_cgba +3]=byte (_face &0xff);return nil ;};func (_dcbg *Bitmap )GetUnpaddedData ()([]byte ,error ){_effd :=uint (_dcbg .Width &0x07);
|
|
if _effd ==0{return _dcbg .Data ,nil ;};_cega :=_dcbg .Width *_dcbg .Height ;if _cega %8!=0{_cega >>=3;_cega ++;}else {_cega >>=3;};_eda :=make ([]byte ,_cega );_ggd :=_bd .NewWriterMSB (_eda );const _dbf ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
|
|
for _cff :=0;_cff < _dcbg .Height ;_cff ++{for _aceg :=0;_aceg < _dcbg .RowStride ;_aceg ++{_gbd :=_dcbg .Data [_cff *_dcbg .RowStride +_aceg ];if _aceg !=_dcbg .RowStride -1{_cfc :=_ggd .WriteByte (_gbd );if _cfc !=nil {return nil ,_g .Wrap (_cfc ,_dbf ,"");
|
|
};continue ;};for _becd :=uint (0);_becd < _effd ;_becd ++{_ffga :=_ggd .WriteBit (int (_gbd >>(7-_becd )&0x01));if _ffga !=nil {return nil ,_g .Wrap (_ffga ,_dbf ,"");};};};};return _eda ,nil ;};func (_eega *Points )AddPoint (x ,y float32 ){*_eega =append (*_eega ,Point {x ,y })};
|
|
func _gedbf (_ggeg ,_fdfgg ,_afcd *Bitmap ,_ecce int )(*Bitmap ,error ){const _daab ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _fdfgg ==nil {return nil ,_g .Error (_daab ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
|
|
};if _afcd ==nil {return nil ,_g .Error (_daab ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _ecce !=4&&_ecce !=8{return nil ,_g .Error (_daab ,"\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 _effg error ;_ggeg ,_effg =_adfb (_ggeg ,_fdfgg );if _effg !=nil {return nil ,_g .Wrap (_effg ,_daab ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_fafb :=_fdfgg .createTemplate ();_afcd .setPadBits (0);
|
|
for _febb :=0;_febb < _cgeee ;_febb ++{_fafb ,_effg =_adfb (_fafb ,_ggeg );if _effg !=nil {return nil ,_g .Wrapf (_effg ,_daab ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_febb );};if _effg =_gbdga (_ggeg ,_afcd ,_ecce );
|
|
_effg !=nil {return nil ,_g .Wrapf (_effg ,_daab ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_febb );};if _fafb .Equals (_ggeg ){break ;};};return _ggeg ,nil ;};func (_cegc *Bitmap )CountPixels ()int {return _cegc .countPixels ()};
|
|
func (_gea *Bitmap )setEightBytes (_ged int ,_becf uint64 )error {_gacc :=_gea .RowStride -(_ged %_gea .RowStride );if _gea .RowStride !=_gea .Width >>3{_gacc --;};if _gacc >=8{return _gea .setEightFullBytes (_ged ,_becf );};return _gea .setEightPartlyBytes (_ged ,_gacc ,_becf );
|
|
};var _feg [256]uint8 ;func TstDSymbol (t *_b .T ,scale ...int )*Bitmap {_bdddc ,_bcec :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_fg .NoError (t ,_bcec );return TstGetScaledSymbol (t ,_bdddc ,scale ...);};func _dcde (_deda ,_bbae ,_bcg byte )byte {return (_deda &^(_bcg ))|(_bbae &_bcg )};
|
|
func _eeea (_gged *Bitmap ,_feegg int )(*Bitmap ,error ){const _bdgg ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _gged ==nil {return nil ,_g .Error (_bdgg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _feegg <=0{return nil ,_g .Error (_bdgg ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _feegg ==1{_bbcgg ,_fcce :=_adfb (nil ,_gged );if _fcce !=nil {return nil ,_g .Wrap (_fcce ,_bdgg ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");
|
|
};return _bbcgg ,nil ;};_badg ,_ebfe :=_egd (_gged ,_feegg ,_feegg );if _ebfe !=nil {return nil ,_g .Wrap (_ebfe ,_bdgg ,"");};return _badg ,nil ;};func TstWordBitmap (t *_b .T ,scale ...int )*Bitmap {_bdbgg :=1;if len (scale )> 0{_bdbgg =scale [0];};_eecc :=3;
|
|
_abdae :=9+7+15+2*_eecc ;_aafa :=5+_eecc +5;_gadg :=New (_abdae *_bdbgg ,_aafa *_bdbgg );_cbag :=&Bitmaps {};var _gfbd *int ;_eecc *=_bdbgg ;_cdgge :=0;_gfbd =&_cdgge ;_bafd :=0;_cfff :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,1*_bdbgg );
|
|
_cfff =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,_eecc );_cfff =TstISymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,1*_bdbgg );_cfff =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,_eecc );
|
|
_cfff =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,1*_bdbgg );_cfff =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,1*_bdbgg );_cfff =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,0);
|
|
*_gfbd =0;_bafd =5*_bdbgg +_eecc ;_cfff =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,1*_bdbgg );_cfff =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,_eecc );_cfff =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,1*_bdbgg );
|
|
_cfff =TstESymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,1*_bdbgg );_cfff =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,1*_bdbgg );_cfff =TstESymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,1*_bdbgg );
|
|
_cfff =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_cbag ,_cfff ,_gfbd ,_bafd ,0);TstWriteSymbols (t ,_cbag ,_gadg );return _gadg ;};func (_fabb Points )XSorter ()func (_fgdc ,_cagff int )bool {return func (_bccf ,_cgcc int )bool {return _fabb [_bccf ].X < _fabb [_cgcc ].X };
|
|
};func New (width ,height int )*Bitmap {_ccb :=_bga (width ,height );_ccb .Data =make ([]byte ,height *_ccb .RowStride );return _ccb ;};func (_ccdab *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _bfbf ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";
|
|
if _ccdab ==nil {return nil ,_g .Error (_bfbf ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_g .Error (_bfbf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
|
|
};_defb :=len (_ccdab .Values );_cefa :=&Bitmaps {Values :make ([]*Bitmap ,_defb ),Boxes :make ([]*_c .Rectangle ,_defb )};var (_aebc ,_dgdb *Bitmap ;_fbeb *_c .Rectangle ;_eada error ;);for _fdab :=0;_fdab < _defb ;_fdab ++{if _aebc ,_eada =_ccdab .GetBitmap (_fdab );
|
|
_eada !=nil {return nil ,_g .Wrap (_eada ,_bfbf ,"");};if _fbeb ,_eada =_ccdab .GetBox (_fdab );_eada !=nil {return nil ,_g .Wrap (_eada ,_bfbf ,"");};if _dgdb ,_eada =s .clipRectangle (_fbeb ,nil );_eada !=nil {return nil ,_g .Wrap (_eada ,_bfbf ,"");
|
|
};if _dgdb ,_eada =_dgdb .And (_aebc );_eada !=nil {return nil ,_g .Wrap (_eada ,_bfbf ,"");};_cefa .Values [_fdab ]=_dgdb ;_cefa .Boxes [_fdab ]=_fbeb ;};return _cefa ,nil ;};func (_agfe Points )Size ()int {return len (_agfe )};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _cec ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
|
|
_faaef :=_bga (width ,height );_faaef .Data =data ;if _dfb :=((width *height )+7)>>3;len (data )< _dfb {return nil ,_g .Errorf (_cec ,"\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 ),_dfb );
|
|
};if _acdf :=_faaef .addPadBits ();_acdf !=nil {return nil ,_g .Wrap (_acdf ,_cec ,"");};return _faaef ,nil ;};func (_cbba *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _agedf (_cbba ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
|
|
};func (_fega *Bitmaps )selectByIndicator (_febfd *_e .NumSlice )(_cacef *Bitmaps ,_dddfg error ){const _abgd ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _fega ==nil {return nil ,_g .Error (_abgd ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if _febfd ==nil {return nil ,_g .Error (_abgd ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};if len (_fega .Values )==0{return _fega ,nil ;};if len (*_febfd )!=len (_fega .Values ){return nil ,_g .Errorf (_abgd ,"\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 (*_febfd ),len (_fega .Values ));
|
|
};var _fdbe ,_egagd ,_aagff int ;for _egagd =0;_egagd < len (*_febfd );_egagd ++{if _fdbe ,_dddfg =_febfd .GetInt (_egagd );_dddfg !=nil {return nil ,_g .Wrap (_dddfg ,_abgd ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _fdbe ==1{_aagff ++;
|
|
};};if _aagff ==len (_fega .Values ){return _fega ,nil ;};_cacef =&Bitmaps {};_agcd :=len (_fega .Values )==len (_fega .Boxes );for _egagd =0;_egagd < len (*_febfd );_egagd ++{if _fdbe =int ((*_febfd )[_egagd ]);_fdbe ==0{continue ;};_cacef .Values =append (_cacef .Values ,_fega .Values [_egagd ]);
|
|
if _agcd {_cacef .Boxes =append (_cacef .Boxes ,_fega .Boxes [_egagd ]);};};return _cacef ,nil ;};func (_fcdcf *ClassedPoints )Less (i ,j int )bool {return _fcdcf ._efff (i ,j )};func (_cfeb *Bitmap )ClipRectangle (box *_c .Rectangle )(_gaff *Bitmap ,_cde *_c .Rectangle ,_ffb error ){const _bca ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
|
|
if box ==nil {return nil ,nil ,_g .Error (_bca ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_fge ,_dga :=_cfeb .Width ,_cfeb .Height ;_fedg :=_c .Rect (0,0,_fge ,_dga );if !box .Overlaps (_fedg ){return nil ,nil ,_g .Error (_bca ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");
|
|
};_deec :=box .Intersect (_fedg );_adeb ,_gca :=_deec .Min .X ,_deec .Min .Y ;_fbdg ,_edc :=_deec .Dx (),_deec .Dy ();_gaff =New (_fbdg ,_edc );_gaff .Text =_cfeb .Text ;if _ffb =_gaff .RasterOperation (0,0,_fbdg ,_edc ,PixSrc ,_cfeb ,_adeb ,_gca );_ffb !=nil {return nil ,nil ,_g .Wrap (_ffb ,_bca ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
|
|
};_cde =&_deec ;return _gaff ,_cde ,nil ;};func (_aded *Bitmap )GetBitOffset (x int )int {return x &0x07};var MorphBC BoundaryCondition ;func _eacb (_bcc ,_dcf ,_bcbc *Bitmap )(*Bitmap ,error ){const _fceg ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";
|
|
if _dcf ==nil {return nil ,_g .Error (_fceg ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bcbc ==nil {return nil ,_g .Error (_fceg ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _dcgf error ;switch {case _bcc ==_dcf :if _dcgf =_bcc .RasterOperation (0,0,_dcf .Width ,_dcf .Height ,PixNotSrcAndDst ,_bcbc ,0,0);
|
|
_dcgf !=nil {return nil ,_g .Wrap (_dcgf ,_fceg ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _bcc ==_bcbc :if _dcgf =_bcc .RasterOperation (0,0,_dcf .Width ,_dcf .Height ,PixNotSrcAndDst ,_dcf ,0,0);_dcgf !=nil {return nil ,_g .Wrap (_dcgf ,_fceg ,"\u0064 \u003d\u003d\u0020\u0073\u0032");
|
|
};default:_bcc ,_dcgf =_adfb (_bcc ,_dcf );if _dcgf !=nil {return nil ,_g .Wrap (_dcgf ,_fceg ,"");};if _dcgf =_bcc .RasterOperation (0,0,_dcf .Width ,_dcf .Height ,PixNotSrcAndDst ,_bcbc ,0,0);_dcgf !=nil {return nil ,_g .Wrap (_dcgf ,_fceg ,"\u0064e\u0066\u0061\u0075\u006c\u0074");
|
|
};};return _bcc ,nil ;};func (_afgc *ClassedPoints )Len ()int {return _afgc .IntSlice .Size ()};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func _eced (_gba ,_dgab *Bitmap ,_ggab ,_eeba ,_dfg ,_aagc ,_fgfe ,_bfcc ,_efdf ,_dgaa int ,_ecgag CombinationOperator )error {var _faag int ;
|
|
_aecc :=func (){_faag ++;_dfg +=_dgab .RowStride ;_aagc +=_gba .RowStride ;_fgfe +=_gba .RowStride };for _faag =_ggab ;_faag < _eeba ;_aecc (){var _eegf uint16 ;_dbag :=_dfg ;for _gedb :=_aagc ;_gedb <=_fgfe ;_gedb ++{_afac ,_gfda :=_dgab .GetByte (_dbag );
|
|
if _gfda !=nil {return _gfda ;};_acee ,_gfda :=_gba .GetByte (_gedb );if _gfda !=nil {return _gfda ;};_eegf =(_eegf |uint16 (_acee ))<<uint (_dgaa );_acee =byte (_eegf >>8);if _gedb ==_fgfe {_acee =_aede (uint (_bfcc ),_acee );};if _gfda =_dgab .SetByte (_dbag ,_eegfa (_afac ,_acee ,_ecgag ));
|
|
_gfda !=nil {return _gfda ;};_dbag ++;_eegf <<=uint (_efdf );};};return nil ;};func _bga (_eedc ,_gff int )*Bitmap {return &Bitmap {Width :_eedc ,Height :_gff ,RowStride :(_eedc +7)>>3};};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _gfefg ="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 ,_g .Error (_gfefg ,"\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 ,_g .Error (_gfefg ,"\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 ,_g .Error (_gfefg ,"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 ,_g .Error (_gfefg ,"\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 ,_g .Error (_gfefg ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
|
|
};_eaab ,_ccee :=bm1 .Width ,bm1 .Height ;_bdfg ,_cagf :=bm2 .Width ,bm2 .Height ;if _e .Abs (_eaab -_bdfg )> maxDiffW {return false ,nil ;};if _e .Abs (_ccee -_cagf )> maxDiffH {return false ,nil ;};_beaf :=int (delX +_e .Sign (delX )*0.5);_bffba :=int (delY +_e .Sign (delY )*0.5);
|
|
_gbce :=int (_ff .Ceil (_ff .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_fdfb :=bm2 .RowStride ;_cbdg :=_fag (_bffba ,0);_edfd :=_gbdb (_cagf +_bffba ,_ccee );_bbgg :=bm1 .RowStride *_cbdg ;_ecfa :=bm2 .RowStride *(_cbdg -_bffba );
|
|
var _abde int ;if _edfd <=_ccee {_abde =downcount [_edfd -1];};_acab :=_fag (_beaf ,0);_cbca :=_gbdb (_bdfg +_beaf ,_eaab );var _bgbg ,_cdgd int ;if _beaf >=8{_bgbg =_beaf >>3;_bbgg +=_bgbg ;_acab -=_bgbg <<3;_cbca -=_bgbg <<3;_beaf &=7;}else if _beaf <=-8{_cdgd =-((_beaf +7)>>3);
|
|
_ecfa +=_cdgd ;_fdfb -=_cdgd ;_beaf +=_cdgd <<3;};var (_cgcd ,_fcd ,_fedf int ;_aaebe ,_bdacf ,_caf byte ;);if _acab >=_cbca ||_cbdg >=_edfd {return false ,nil ;};_fcgc :=(_cbca +7)>>3;switch {case _beaf ==0:for _fcd =_cbdg ;_fcd < _edfd ;_fcd ,_bbgg ,_ecfa =_fcd +1,_bbgg +bm1 .RowStride ,_ecfa +bm2 .RowStride {for _fedf =0;
|
|
_fedf < _fcgc ;_fedf ++{_aaebe =bm1 .Data [_bbgg +_fedf ]&bm2 .Data [_ecfa +_fedf ];_cgcd +=tab [_aaebe ];};if _cgcd >=_gbce {return true ,nil ;};if _bbcc :=_cgcd +downcount [_fcd ]-_abde ;_bbcc < _gbce {return false ,nil ;};};case _beaf > 0&&_fdfb < _fcgc :for _fcd =_cbdg ;
|
|
_fcd < _edfd ;_fcd ,_bbgg ,_ecfa =_fcd +1,_bbgg +bm1 .RowStride ,_ecfa +bm2 .RowStride {_bdacf =bm1 .Data [_bbgg ];_caf =bm2 .Data [_ecfa ]>>uint (_beaf );_aaebe =_bdacf &_caf ;_cgcd +=tab [_aaebe ];for _fedf =1;_fedf < _fdfb ;_fedf ++{_bdacf =bm1 .Data [_bbgg +_fedf ];
|
|
_caf =bm2 .Data [_ecfa +_fedf ]>>uint (_beaf )|bm2 .Data [_ecfa +_fedf -1]<<uint (8-_beaf );_aaebe =_bdacf &_caf ;_cgcd +=tab [_aaebe ];};_bdacf =bm1 .Data [_bbgg +_fedf ];_caf =bm2 .Data [_ecfa +_fedf -1]<<uint (8-_beaf );_aaebe =_bdacf &_caf ;_cgcd +=tab [_aaebe ];
|
|
if _cgcd >=_gbce {return true ,nil ;}else if _cgcd +downcount [_fcd ]-_abde < _gbce {return false ,nil ;};};case _beaf > 0&&_fdfb >=_fcgc :for _fcd =_cbdg ;_fcd < _edfd ;_fcd ,_bbgg ,_ecfa =_fcd +1,_bbgg +bm1 .RowStride ,_ecfa +bm2 .RowStride {_bdacf =bm1 .Data [_bbgg ];
|
|
_caf =bm2 .Data [_ecfa ]>>uint (_beaf );_aaebe =_bdacf &_caf ;_cgcd +=tab [_aaebe ];for _fedf =1;_fedf < _fcgc ;_fedf ++{_bdacf =bm1 .Data [_bbgg +_fedf ];_caf =bm2 .Data [_ecfa +_fedf ]>>uint (_beaf );_caf |=bm2 .Data [_ecfa +_fedf -1]<<uint (8-_beaf );
|
|
_aaebe =_bdacf &_caf ;_cgcd +=tab [_aaebe ];};if _cgcd >=_gbce {return true ,nil ;}else if _cgcd +downcount [_fcd ]-_abde < _gbce {return false ,nil ;};};case _fcgc < _fdfb :for _fcd =_cbdg ;_fcd < _edfd ;_fcd ,_bbgg ,_ecfa =_fcd +1,_bbgg +bm1 .RowStride ,_ecfa +bm2 .RowStride {for _fedf =0;
|
|
_fedf < _fcgc ;_fedf ++{_bdacf =bm1 .Data [_bbgg +_fedf ];_caf =bm2 .Data [_ecfa +_fedf ]<<uint (-_beaf );_caf |=bm2 .Data [_ecfa +_fedf +1]>>uint (8+_beaf );_aaebe =_bdacf &_caf ;_cgcd +=tab [_aaebe ];};if _cgcd >=_gbce {return true ,nil ;}else if _gaagc :=_cgcd +downcount [_fcd ]-_abde ;
|
|
_gaagc < _gbce {return false ,nil ;};};case _fdfb >=_fcgc :for _fcd =_cbdg ;_fcd < _edfd ;_fcd ,_bbgg ,_ecfa =_fcd +1,_bbgg +bm1 .RowStride ,_ecfa +bm2 .RowStride {for _fedf =0;_fedf < _fcgc ;_fedf ++{_bdacf =bm1 .Data [_bbgg +_fedf ];_caf =bm2 .Data [_ecfa +_fedf ]<<uint (-_beaf );
|
|
_caf |=bm2 .Data [_ecfa +_fedf +1]>>uint (8+_beaf );_aaebe =_bdacf &_caf ;_cgcd +=tab [_aaebe ];};_bdacf =bm1 .Data [_bbgg +_fedf ];_caf =bm2 .Data [_ecfa +_fedf ]<<uint (-_beaf );_aaebe =_bdacf &_caf ;_cgcd +=tab [_aaebe ];if _cgcd >=_gbce {return true ,nil ;
|
|
}else if _cgcd +downcount [_fcd ]-_abde < _gbce {return false ,nil ;};};};_fcdc :=float32 (_cgcd )*float32 (_cgcd )/(float32 (area1 )*float32 (area2 ));if _fcdc >=scoreThreshold {_eb .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",_cgcd ,_gbce ,_fcdc ,scoreThreshold );
|
|
};return false ,nil ;};func (_bac *Bitmap )String ()string {var _abf ="\u000a";for _cee :=0;_cee < _bac .Height ;_cee ++{var _eag string ;for _abc :=0;_abc < _bac .Width ;_abc ++{_fdeb :=_bac .GetPixel (_abc ,_cee );if _fdeb {_eag +="\u0031";}else {_eag +="\u0030";
|
|
};};_abf +=_eag +"\u000a";};return _abf ;};func _gdbea (_afce *Bitmap ,_ddbd ,_fddb ,_cagd ,_aegbf int ,_adcf RasterOperator ,_aeb *Bitmap ,_aeca ,_bgff int )error {var (_agaae bool ;_fcggf bool ;_bgaff byte ;_aceb int ;_bbfa int ;_dgad int ;_cgd int ;
|
|
_edfdd bool ;_defa int ;_fbdgb int ;_ggfb int ;_fccef bool ;_abcc byte ;_eagbc int ;_fggf int ;_gfbe int ;_cdce byte ;_ceaf int ;_fabdf int ;_acdda uint ;_dfge uint ;_beg byte ;_dddf shift ;_caeea bool ;_egbf bool ;_cbfa ,_bgdc int ;);if _aeca &7!=0{_fabdf =8-(_aeca &7);
|
|
};if _ddbd &7!=0{_bbfa =8-(_ddbd &7);};if _fabdf ==0&&_bbfa ==0{_beg =_becb [0];}else {if _bbfa > _fabdf {_acdda =uint (_bbfa -_fabdf );}else {_acdda =uint (8-(_fabdf -_bbfa ));};_dfge =8-_acdda ;_beg =_becb [_acdda ];};if (_ddbd &7)!=0{_agaae =true ;_aceb =8-(_ddbd &7);
|
|
_bgaff =_becb [_aceb ];_dgad =_afce .RowStride *_fddb +(_ddbd >>3);_cgd =_aeb .RowStride *_bgff +(_aeca >>3);_ceaf =8-(_aeca &7);if _aceb > _ceaf {_dddf =_gcfc ;if _cagd >=_fabdf {_caeea =true ;};}else {_dddf =_gedaa ;};};if _cagd < _aceb {_fcggf =true ;
|
|
_bgaff &=_ddcf [8-_aceb +_cagd ];};if !_fcggf {_defa =(_cagd -_aceb )>>3;if _defa !=0{_edfdd =true ;_fbdgb =_afce .RowStride *_fddb +((_ddbd +_bbfa )>>3);_ggfb =_aeb .RowStride *_bgff +((_aeca +_bbfa )>>3);};};_eagbc =(_ddbd +_cagd )&7;if !(_fcggf ||_eagbc ==0){_fccef =true ;
|
|
_abcc =_ddcf [_eagbc ];_fggf =_afce .RowStride *_fddb +((_ddbd +_bbfa )>>3)+_defa ;_gfbe =_aeb .RowStride *_bgff +((_aeca +_bbfa )>>3)+_defa ;if _eagbc > int (_dfge ){_egbf =true ;};};switch _adcf {case PixSrc :if _agaae {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{if _dddf ==_gcfc {_cdce =_aeb .Data [_cgd ]<<_acdda ;
|
|
if _caeea {_cdce =_dcde (_cdce ,_aeb .Data [_cgd +1]>>_dfge ,_beg );};}else {_cdce =_aeb .Data [_cgd ]>>_dfge ;};_afce .Data [_dgad ]=_dcde (_afce .Data [_dgad ],_cdce ,_bgaff );_dgad +=_afce .RowStride ;_cgd +=_aeb .RowStride ;};};if _edfdd {for _cbfa =0;
|
|
_cbfa < _aegbf ;_cbfa ++{for _bgdc =0;_bgdc < _defa ;_bgdc ++{_cdce =_dcde (_aeb .Data [_ggfb +_bgdc ]<<_acdda ,_aeb .Data [_ggfb +_bgdc +1]>>_dfge ,_beg );_afce .Data [_fbdgb +_bgdc ]=_cdce ;};_fbdgb +=_afce .RowStride ;_ggfb +=_aeb .RowStride ;};};if _fccef {for _cbfa =0;
|
|
_cbfa < _aegbf ;_cbfa ++{_cdce =_aeb .Data [_gfbe ]<<_acdda ;if _egbf {_cdce =_dcde (_cdce ,_aeb .Data [_gfbe +1]>>_dfge ,_beg );};_afce .Data [_fggf ]=_dcde (_afce .Data [_fggf ],_cdce ,_abcc );_fggf +=_afce .RowStride ;_gfbe +=_aeb .RowStride ;};};case PixNotSrc :if _agaae {for _cbfa =0;
|
|
_cbfa < _aegbf ;_cbfa ++{if _dddf ==_gcfc {_cdce =_aeb .Data [_cgd ]<<_acdda ;if _caeea {_cdce =_dcde (_cdce ,_aeb .Data [_cgd +1]>>_dfge ,_beg );};}else {_cdce =_aeb .Data [_cgd ]>>_dfge ;};_afce .Data [_dgad ]=_dcde (_afce .Data [_dgad ],^_cdce ,_bgaff );
|
|
_dgad +=_afce .RowStride ;_cgd +=_aeb .RowStride ;};};if _edfdd {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{for _bgdc =0;_bgdc < _defa ;_bgdc ++{_cdce =_dcde (_aeb .Data [_ggfb +_bgdc ]<<_acdda ,_aeb .Data [_ggfb +_bgdc +1]>>_dfge ,_beg );_afce .Data [_fbdgb +_bgdc ]=^_cdce ;
|
|
};_fbdgb +=_afce .RowStride ;_ggfb +=_aeb .RowStride ;};};if _fccef {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{_cdce =_aeb .Data [_gfbe ]<<_acdda ;if _egbf {_cdce =_dcde (_cdce ,_aeb .Data [_gfbe +1]>>_dfge ,_beg );};_afce .Data [_fggf ]=_dcde (_afce .Data [_fggf ],^_cdce ,_abcc );
|
|
_fggf +=_afce .RowStride ;_gfbe +=_aeb .RowStride ;};};case PixSrcOrDst :if _agaae {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{if _dddf ==_gcfc {_cdce =_aeb .Data [_cgd ]<<_acdda ;if _caeea {_cdce =_dcde (_cdce ,_aeb .Data [_cgd +1]>>_dfge ,_beg );};}else {_cdce =_aeb .Data [_cgd ]>>_dfge ;
|
|
};_afce .Data [_dgad ]=_dcde (_afce .Data [_dgad ],_cdce |_afce .Data [_dgad ],_bgaff );_dgad +=_afce .RowStride ;_cgd +=_aeb .RowStride ;};};if _edfdd {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{for _bgdc =0;_bgdc < _defa ;_bgdc ++{_cdce =_dcde (_aeb .Data [_ggfb +_bgdc ]<<_acdda ,_aeb .Data [_ggfb +_bgdc +1]>>_dfge ,_beg );
|
|
_afce .Data [_fbdgb +_bgdc ]|=_cdce ;};_fbdgb +=_afce .RowStride ;_ggfb +=_aeb .RowStride ;};};if _fccef {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{_cdce =_aeb .Data [_gfbe ]<<_acdda ;if _egbf {_cdce =_dcde (_cdce ,_aeb .Data [_gfbe +1]>>_dfge ,_beg );};_afce .Data [_fggf ]=_dcde (_afce .Data [_fggf ],_cdce |_afce .Data [_fggf ],_abcc );
|
|
_fggf +=_afce .RowStride ;_gfbe +=_aeb .RowStride ;};};case PixSrcAndDst :if _agaae {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{if _dddf ==_gcfc {_cdce =_aeb .Data [_cgd ]<<_acdda ;if _caeea {_cdce =_dcde (_cdce ,_aeb .Data [_cgd +1]>>_dfge ,_beg );};}else {_cdce =_aeb .Data [_cgd ]>>_dfge ;
|
|
};_afce .Data [_dgad ]=_dcde (_afce .Data [_dgad ],_cdce &_afce .Data [_dgad ],_bgaff );_dgad +=_afce .RowStride ;_cgd +=_aeb .RowStride ;};};if _edfdd {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{for _bgdc =0;_bgdc < _defa ;_bgdc ++{_cdce =_dcde (_aeb .Data [_ggfb +_bgdc ]<<_acdda ,_aeb .Data [_ggfb +_bgdc +1]>>_dfge ,_beg );
|
|
_afce .Data [_fbdgb +_bgdc ]&=_cdce ;};_fbdgb +=_afce .RowStride ;_ggfb +=_aeb .RowStride ;};};if _fccef {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{_cdce =_aeb .Data [_gfbe ]<<_acdda ;if _egbf {_cdce =_dcde (_cdce ,_aeb .Data [_gfbe +1]>>_dfge ,_beg );};_afce .Data [_fggf ]=_dcde (_afce .Data [_fggf ],_cdce &_afce .Data [_fggf ],_abcc );
|
|
_fggf +=_afce .RowStride ;_gfbe +=_aeb .RowStride ;};};case PixSrcXorDst :if _agaae {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{if _dddf ==_gcfc {_cdce =_aeb .Data [_cgd ]<<_acdda ;if _caeea {_cdce =_dcde (_cdce ,_aeb .Data [_cgd +1]>>_dfge ,_beg );};}else {_cdce =_aeb .Data [_cgd ]>>_dfge ;
|
|
};_afce .Data [_dgad ]=_dcde (_afce .Data [_dgad ],_cdce ^_afce .Data [_dgad ],_bgaff );_dgad +=_afce .RowStride ;_cgd +=_aeb .RowStride ;};};if _edfdd {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{for _bgdc =0;_bgdc < _defa ;_bgdc ++{_cdce =_dcde (_aeb .Data [_ggfb +_bgdc ]<<_acdda ,_aeb .Data [_ggfb +_bgdc +1]>>_dfge ,_beg );
|
|
_afce .Data [_fbdgb +_bgdc ]^=_cdce ;};_fbdgb +=_afce .RowStride ;_ggfb +=_aeb .RowStride ;};};if _fccef {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{_cdce =_aeb .Data [_gfbe ]<<_acdda ;if _egbf {_cdce =_dcde (_cdce ,_aeb .Data [_gfbe +1]>>_dfge ,_beg );};_afce .Data [_fggf ]=_dcde (_afce .Data [_fggf ],_cdce ^_afce .Data [_fggf ],_abcc );
|
|
_fggf +=_afce .RowStride ;_gfbe +=_aeb .RowStride ;};};case PixNotSrcOrDst :if _agaae {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{if _dddf ==_gcfc {_cdce =_aeb .Data [_cgd ]<<_acdda ;if _caeea {_cdce =_dcde (_cdce ,_aeb .Data [_cgd +1]>>_dfge ,_beg );};}else {_cdce =_aeb .Data [_cgd ]>>_dfge ;
|
|
};_afce .Data [_dgad ]=_dcde (_afce .Data [_dgad ],^_cdce |_afce .Data [_dgad ],_bgaff );_dgad +=_afce .RowStride ;_cgd +=_aeb .RowStride ;};};if _edfdd {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{for _bgdc =0;_bgdc < _defa ;_bgdc ++{_cdce =_dcde (_aeb .Data [_ggfb +_bgdc ]<<_acdda ,_aeb .Data [_ggfb +_bgdc +1]>>_dfge ,_beg );
|
|
_afce .Data [_fbdgb +_bgdc ]|=^_cdce ;};_fbdgb +=_afce .RowStride ;_ggfb +=_aeb .RowStride ;};};if _fccef {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{_cdce =_aeb .Data [_gfbe ]<<_acdda ;if _egbf {_cdce =_dcde (_cdce ,_aeb .Data [_gfbe +1]>>_dfge ,_beg );};_afce .Data [_fggf ]=_dcde (_afce .Data [_fggf ],^_cdce |_afce .Data [_fggf ],_abcc );
|
|
_fggf +=_afce .RowStride ;_gfbe +=_aeb .RowStride ;};};case PixNotSrcAndDst :if _agaae {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{if _dddf ==_gcfc {_cdce =_aeb .Data [_cgd ]<<_acdda ;if _caeea {_cdce =_dcde (_cdce ,_aeb .Data [_cgd +1]>>_dfge ,_beg );};}else {_cdce =_aeb .Data [_cgd ]>>_dfge ;
|
|
};_afce .Data [_dgad ]=_dcde (_afce .Data [_dgad ],^_cdce &_afce .Data [_dgad ],_bgaff );_dgad +=_afce .RowStride ;_cgd +=_aeb .RowStride ;};};if _edfdd {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{for _bgdc =0;_bgdc < _defa ;_bgdc ++{_cdce =_dcde (_aeb .Data [_ggfb +_bgdc ]<<_acdda ,_aeb .Data [_ggfb +_bgdc +1]>>_dfge ,_beg );
|
|
_afce .Data [_fbdgb +_bgdc ]&=^_cdce ;};_fbdgb +=_afce .RowStride ;_ggfb +=_aeb .RowStride ;};};if _fccef {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{_cdce =_aeb .Data [_gfbe ]<<_acdda ;if _egbf {_cdce =_dcde (_cdce ,_aeb .Data [_gfbe +1]>>_dfge ,_beg );};_afce .Data [_fggf ]=_dcde (_afce .Data [_fggf ],^_cdce &_afce .Data [_fggf ],_abcc );
|
|
_fggf +=_afce .RowStride ;_gfbe +=_aeb .RowStride ;};};case PixSrcOrNotDst :if _agaae {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{if _dddf ==_gcfc {_cdce =_aeb .Data [_cgd ]<<_acdda ;if _caeea {_cdce =_dcde (_cdce ,_aeb .Data [_cgd +1]>>_dfge ,_beg );};}else {_cdce =_aeb .Data [_cgd ]>>_dfge ;
|
|
};_afce .Data [_dgad ]=_dcde (_afce .Data [_dgad ],_cdce |^_afce .Data [_dgad ],_bgaff );_dgad +=_afce .RowStride ;_cgd +=_aeb .RowStride ;};};if _edfdd {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{for _bgdc =0;_bgdc < _defa ;_bgdc ++{_cdce =_dcde (_aeb .Data [_ggfb +_bgdc ]<<_acdda ,_aeb .Data [_ggfb +_bgdc +1]>>_dfge ,_beg );
|
|
_afce .Data [_fbdgb +_bgdc ]=_cdce |^_afce .Data [_fbdgb +_bgdc ];};_fbdgb +=_afce .RowStride ;_ggfb +=_aeb .RowStride ;};};if _fccef {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{_cdce =_aeb .Data [_gfbe ]<<_acdda ;if _egbf {_cdce =_dcde (_cdce ,_aeb .Data [_gfbe +1]>>_dfge ,_beg );
|
|
};_afce .Data [_fggf ]=_dcde (_afce .Data [_fggf ],_cdce |^_afce .Data [_fggf ],_abcc );_fggf +=_afce .RowStride ;_gfbe +=_aeb .RowStride ;};};case PixSrcAndNotDst :if _agaae {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{if _dddf ==_gcfc {_cdce =_aeb .Data [_cgd ]<<_acdda ;
|
|
if _caeea {_cdce =_dcde (_cdce ,_aeb .Data [_cgd +1]>>_dfge ,_beg );};}else {_cdce =_aeb .Data [_cgd ]>>_dfge ;};_afce .Data [_dgad ]=_dcde (_afce .Data [_dgad ],_cdce &^_afce .Data [_dgad ],_bgaff );_dgad +=_afce .RowStride ;_cgd +=_aeb .RowStride ;};
|
|
};if _edfdd {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{for _bgdc =0;_bgdc < _defa ;_bgdc ++{_cdce =_dcde (_aeb .Data [_ggfb +_bgdc ]<<_acdda ,_aeb .Data [_ggfb +_bgdc +1]>>_dfge ,_beg );_afce .Data [_fbdgb +_bgdc ]=_cdce &^_afce .Data [_fbdgb +_bgdc ];};_fbdgb +=_afce .RowStride ;
|
|
_ggfb +=_aeb .RowStride ;};};if _fccef {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{_cdce =_aeb .Data [_gfbe ]<<_acdda ;if _egbf {_cdce =_dcde (_cdce ,_aeb .Data [_gfbe +1]>>_dfge ,_beg );};_afce .Data [_fggf ]=_dcde (_afce .Data [_fggf ],_cdce &^_afce .Data [_fggf ],_abcc );
|
|
_fggf +=_afce .RowStride ;_gfbe +=_aeb .RowStride ;};};case PixNotPixSrcOrDst :if _agaae {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{if _dddf ==_gcfc {_cdce =_aeb .Data [_cgd ]<<_acdda ;if _caeea {_cdce =_dcde (_cdce ,_aeb .Data [_cgd +1]>>_dfge ,_beg );};}else {_cdce =_aeb .Data [_cgd ]>>_dfge ;
|
|
};_afce .Data [_dgad ]=_dcde (_afce .Data [_dgad ],^(_cdce |_afce .Data [_dgad ]),_bgaff );_dgad +=_afce .RowStride ;_cgd +=_aeb .RowStride ;};};if _edfdd {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{for _bgdc =0;_bgdc < _defa ;_bgdc ++{_cdce =_dcde (_aeb .Data [_ggfb +_bgdc ]<<_acdda ,_aeb .Data [_ggfb +_bgdc +1]>>_dfge ,_beg );
|
|
_afce .Data [_fbdgb +_bgdc ]=^(_cdce |_afce .Data [_fbdgb +_bgdc ]);};_fbdgb +=_afce .RowStride ;_ggfb +=_aeb .RowStride ;};};if _fccef {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{_cdce =_aeb .Data [_gfbe ]<<_acdda ;if _egbf {_cdce =_dcde (_cdce ,_aeb .Data [_gfbe +1]>>_dfge ,_beg );
|
|
};_afce .Data [_fggf ]=_dcde (_afce .Data [_fggf ],^(_cdce |_afce .Data [_fggf ]),_abcc );_fggf +=_afce .RowStride ;_gfbe +=_aeb .RowStride ;};};case PixNotPixSrcAndDst :if _agaae {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{if _dddf ==_gcfc {_cdce =_aeb .Data [_cgd ]<<_acdda ;
|
|
if _caeea {_cdce =_dcde (_cdce ,_aeb .Data [_cgd +1]>>_dfge ,_beg );};}else {_cdce =_aeb .Data [_cgd ]>>_dfge ;};_afce .Data [_dgad ]=_dcde (_afce .Data [_dgad ],^(_cdce &_afce .Data [_dgad ]),_bgaff );_dgad +=_afce .RowStride ;_cgd +=_aeb .RowStride ;
|
|
};};if _edfdd {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{for _bgdc =0;_bgdc < _defa ;_bgdc ++{_cdce =_dcde (_aeb .Data [_ggfb +_bgdc ]<<_acdda ,_aeb .Data [_ggfb +_bgdc +1]>>_dfge ,_beg );_afce .Data [_fbdgb +_bgdc ]=^(_cdce &_afce .Data [_fbdgb +_bgdc ]);
|
|
};_fbdgb +=_afce .RowStride ;_ggfb +=_aeb .RowStride ;};};if _fccef {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{_cdce =_aeb .Data [_gfbe ]<<_acdda ;if _egbf {_cdce =_dcde (_cdce ,_aeb .Data [_gfbe +1]>>_dfge ,_beg );};_afce .Data [_fggf ]=_dcde (_afce .Data [_fggf ],^(_cdce &_afce .Data [_fggf ]),_abcc );
|
|
_fggf +=_afce .RowStride ;_gfbe +=_aeb .RowStride ;};};case PixNotPixSrcXorDst :if _agaae {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{if _dddf ==_gcfc {_cdce =_aeb .Data [_cgd ]<<_acdda ;if _caeea {_cdce =_dcde (_cdce ,_aeb .Data [_cgd +1]>>_dfge ,_beg );};
|
|
}else {_cdce =_aeb .Data [_cgd ]>>_dfge ;};_afce .Data [_dgad ]=_dcde (_afce .Data [_dgad ],^(_cdce ^_afce .Data [_dgad ]),_bgaff );_dgad +=_afce .RowStride ;_cgd +=_aeb .RowStride ;};};if _edfdd {for _cbfa =0;_cbfa < _aegbf ;_cbfa ++{for _bgdc =0;_bgdc < _defa ;
|
|
_bgdc ++{_cdce =_dcde (_aeb .Data [_ggfb +_bgdc ]<<_acdda ,_aeb .Data [_ggfb +_bgdc +1]>>_dfge ,_beg );_afce .Data [_fbdgb +_bgdc ]=^(_cdce ^_afce .Data [_fbdgb +_bgdc ]);};_fbdgb +=_afce .RowStride ;_ggfb +=_aeb .RowStride ;};};if _fccef {for _cbfa =0;
|
|
_cbfa < _aegbf ;_cbfa ++{_cdce =_aeb .Data [_gfbe ]<<_acdda ;if _egbf {_cdce =_dcde (_cdce ,_aeb .Data [_gfbe +1]>>_dfge ,_beg );};_afce .Data [_fggf ]=_dcde (_afce .Data [_fggf ],^(_cdce ^_afce .Data [_fggf ]),_abcc );_fggf +=_afce .RowStride ;_gfbe +=_aeb .RowStride ;
|
|
};};default:_eb .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",_adcf );return _g .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 (_fgdb *ClassedPoints )xSortFunction ()func (_bdcd int ,_cabb int )bool {return func (_effbf ,_egee int )bool {return _fgdb .XAtIndex (_effbf )< _fgdb .XAtIndex (_egee )};};func (_ffcf *ClassedPoints )Swap (i ,j int ){_ffcf .IntSlice [i ],_ffcf .IntSlice [j ]=_ffcf .IntSlice [j ],_ffcf .IntSlice [i ];
|
|
};func _eegfa (_cefb ,_bfg byte ,_ddf CombinationOperator )byte {switch _ddf {case CmbOpOr :return _bfg |_cefb ;case CmbOpAnd :return _bfg &_cefb ;case CmbOpXor :return _bfg ^_cefb ;case CmbOpXNor :return ^(_bfg ^_cefb );case CmbOpNot :return ^(_bfg );
|
|
default:return _bfg ;};};func (_gddada *byWidth )Swap (i ,j int ){_gddada .Values [i ],_gddada .Values [j ]=_gddada .Values [j ],_gddada .Values [i ];if _gddada .Boxes !=nil {_gddada .Boxes [i ],_gddada .Boxes [j ]=_gddada .Boxes [j ],_gddada .Boxes [i ];
|
|
};};func ClipBoxToRectangle (box *_c .Rectangle ,wi ,hi int )(_ggabd *_c .Rectangle ,_dfef error ){const _egfg ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_g .Error (_egfg ,"\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 ,_g .Error (_egfg ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_dage :=*box ;
|
|
_ggabd =&_dage ;if _ggabd .Min .X < 0{_ggabd .Max .X +=_ggabd .Min .X ;_ggabd .Min .X =0;};if _ggabd .Min .Y < 0{_ggabd .Max .Y +=_ggabd .Min .Y ;_ggabd .Min .Y =0;};if _ggabd .Max .X > wi {_ggabd .Max .X =wi ;};if _ggabd .Max .Y > hi {_ggabd .Max .Y =hi ;
|
|
};return _ggabd ,nil ;};func _daead (_edcdf *Bitmap ,_cfae ,_eagf int ,_bcdg ,_cebg int ,_fcaab RasterOperator ){var (_aeab bool ;_deba bool ;_faagb int ;_agff int ;_dafc int ;_aedaa int ;_bgef bool ;_cddc byte ;);_ecddcg :=8-(_cfae &7);_bgbgb :=_becb [_ecddcg ];
|
|
_afgfg :=_edcdf .RowStride *_eagf +(_cfae >>3);if _bcdg < _ecddcg {_aeab =true ;_bgbgb &=_ddcf [8-_ecddcg +_bcdg ];};if !_aeab {_faagb =(_bcdg -_ecddcg )>>3;if _faagb !=0{_deba =true ;_agff =_afgfg +1;};};_dafc =(_cfae +_bcdg )&7;if !(_aeab ||_dafc ==0){_bgef =true ;
|
|
_cddc =_ddcf [_dafc ];_aedaa =_afgfg +1+_faagb ;};var _eddfd ,_bfbg int ;switch _fcaab {case PixClr :for _eddfd =0;_eddfd < _cebg ;_eddfd ++{_edcdf .Data [_afgfg ]=_dcde (_edcdf .Data [_afgfg ],0x0,_bgbgb );_afgfg +=_edcdf .RowStride ;};if _deba {for _eddfd =0;
|
|
_eddfd < _cebg ;_eddfd ++{for _bfbg =0;_bfbg < _faagb ;_bfbg ++{_edcdf .Data [_agff +_bfbg ]=0x0;};_agff +=_edcdf .RowStride ;};};if _bgef {for _eddfd =0;_eddfd < _cebg ;_eddfd ++{_edcdf .Data [_aedaa ]=_dcde (_edcdf .Data [_aedaa ],0x0,_cddc );_aedaa +=_edcdf .RowStride ;
|
|
};};case PixSet :for _eddfd =0;_eddfd < _cebg ;_eddfd ++{_edcdf .Data [_afgfg ]=_dcde (_edcdf .Data [_afgfg ],0xff,_bgbgb );_afgfg +=_edcdf .RowStride ;};if _deba {for _eddfd =0;_eddfd < _cebg ;_eddfd ++{for _bfbg =0;_bfbg < _faagb ;_bfbg ++{_edcdf .Data [_agff +_bfbg ]=0xff;
|
|
};_agff +=_edcdf .RowStride ;};};if _bgef {for _eddfd =0;_eddfd < _cebg ;_eddfd ++{_edcdf .Data [_aedaa ]=_dcde (_edcdf .Data [_aedaa ],0xff,_cddc );_aedaa +=_edcdf .RowStride ;};};case PixNotDst :for _eddfd =0;_eddfd < _cebg ;_eddfd ++{_edcdf .Data [_afgfg ]=_dcde (_edcdf .Data [_afgfg ],^_edcdf .Data [_afgfg ],_bgbgb );
|
|
_afgfg +=_edcdf .RowStride ;};if _deba {for _eddfd =0;_eddfd < _cebg ;_eddfd ++{for _bfbg =0;_bfbg < _faagb ;_bfbg ++{_edcdf .Data [_agff +_bfbg ]=^(_edcdf .Data [_agff +_bfbg ]);};_agff +=_edcdf .RowStride ;};};if _bgef {for _eddfd =0;_eddfd < _cebg ;
|
|
_eddfd ++{_edcdf .Data [_aedaa ]=_dcde (_edcdf .Data [_aedaa ],^_edcdf .Data [_aedaa ],_cddc );_aedaa +=_edcdf .RowStride ;};};};};func _fadfg ()[]int {_gaba :=make ([]int ,256);for _gdfd :=0;_gdfd <=0xff;_gdfd ++{_beda :=byte (_gdfd );_gaba [_beda ]=int (_beda &0x1)+(int (_beda >>1)&0x1)+(int (_beda >>2)&0x1)+(int (_beda >>3)&0x1)+(int (_beda >>4)&0x1)+(int (_beda >>5)&0x1)+(int (_beda >>6)&0x1)+(int (_beda >>7)&0x1);
|
|
};return _gaba ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_dbaa :=_fgaad (h ,w ,"");_dbaa .setOrigin (cy ,cx );var _agae ,_bbbgc int ;for _agae =0;_agae < h ;_agae ++{for _bbbgc =0;_bbbgc < w ;_bbbgc ++{_dbaa .Data [_agae ][_bbbgc ]=tp ;
|
|
};};return _dbaa ;};func _ae (_be ,_ga *Bitmap )(_acf error ){const _dc ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_aca :=_ga .RowStride ;_cd :=_be .RowStride ;_cf :=_ga .RowStride *4-_be .RowStride ;
|
|
var (_bde ,_ed byte ;_eg uint32 ;_bf ,_acd ,_ge ,_fea ,_ec ,_de ,_cdb int ;);for _ge =0;_ge < _ga .Height ;_ge ++{_bf =_ge *_aca ;_acd =4*_ge *_cd ;for _fea =0;_fea < _aca ;_fea ++{_bde =_ga .Data [_bf +_fea ];_eg =_dbdd [_bde ];_de =_acd +_fea *4;if _cf !=0&&(_fea +1)*4> _be .RowStride {for _ec =_cf ;
|
|
_ec > 0;_ec --{_ed =byte ((_eg >>uint (_ec *8))&0xff);_cdb =_de +(_cf -_ec );if _acf =_be .SetByte (_cdb ,_ed );_acf !=nil {return _g .Wrapf (_acf ,_dc ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_ec );
|
|
};};}else if _acf =_be .setFourBytes (_de ,_eg );_acf !=nil {return _g .Wrap (_acf ,_dc ,"");};if _acf =_be .setFourBytes (_acd +_fea *4,_dbdd [_ga .Data [_bf +_fea ]]);_acf !=nil {return _g .Wrap (_acf ,_dc ,"");};};for _ec =1;_ec < 4;_ec ++{for _fea =0;
|
|
_fea < _cd ;_fea ++{if _acf =_be .SetByte (_acd +_ec *_cd +_fea ,_be .Data [_acd +_fea ]);_acf !=nil {return _g .Wrapf (_acf ,_dc ,"\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",_ec ,_fea );
|
|
};};};};return nil ;};func (_bgacc Points )YSorter ()func (_gbgb ,_bcbe int )bool {return func (_afbe ,_acda int )bool {return _bgacc [_afbe ].Y < _bgacc [_acda ].Y };};func (_fafbg *byWidth )Less (i ,j int )bool {return _fafbg .Values [i ].Width < _fafbg .Values [j ].Width };
|
|
func _aga (_cbgac ,_cef *Bitmap ,_ccge int ,_fac []byte ,_eef int )(_gdbe error ){const _aag ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_fggb ,_ega ,_bdd ,_cea ,_ade ,_deeb ,_dae ,_gb int ;
|
|
_dcg ,_feag uint32 ;_gae ,_faae byte ;_ffd uint16 ;);_gdef :=make ([]byte ,4);_cgf :=make ([]byte ,4);for _bdd =0;_bdd < _cbgac .Height -1;_bdd ,_cea =_bdd +2,_cea +1{_fggb =_bdd *_cbgac .RowStride ;_ega =_cea *_cef .RowStride ;for _ade ,_deeb =0,0;_ade < _eef ;
|
|
_ade ,_deeb =_ade +4,_deeb +1{for _dae =0;_dae < 4;_dae ++{_gb =_fggb +_ade +_dae ;if _gb <=len (_cbgac .Data )-1&&_gb < _fggb +_cbgac .RowStride {_gdef [_dae ]=_cbgac .Data [_gb ];}else {_gdef [_dae ]=0x00;};_gb =_fggb +_cbgac .RowStride +_ade +_dae ;
|
|
if _gb <=len (_cbgac .Data )-1&&_gb < _fggb +(2*_cbgac .RowStride ){_cgf [_dae ]=_cbgac .Data [_gb ];}else {_cgf [_dae ]=0x00;};};_dcg =_ac .BigEndian .Uint32 (_gdef );_feag =_ac .BigEndian .Uint32 (_cgf );_feag &=_dcg ;_feag &=_feag <<1;_feag &=0xaaaaaaaa;
|
|
_dcg =_feag |(_feag <<7);_gae =byte (_dcg >>24);_faae =byte ((_dcg >>8)&0xff);_gb =_ega +_deeb ;if _gb +1==len (_cef .Data )-1||_gb +1>=_ega +_cef .RowStride {_cef .Data [_gb ]=_fac [_gae ];if _gdbe =_cef .SetByte (_gb ,_fac [_gae ]);_gdbe !=nil {return _g .Wrapf (_gdbe ,_aag ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gb );
|
|
};}else {_ffd =(uint16 (_fac [_gae ])<<8)|uint16 (_fac [_faae ]);if _gdbe =_cef .setTwoBytes (_gb ,_ffd );_gdbe !=nil {return _g .Wrapf (_gdbe ,_aag ,"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",_gb );
|
|
};_deeb ++;};};};return nil ;};func _agedf (_ebefc *Bitmap ,_cbfgd ,_ecfff ,_bgced ,_dfdf int ,_cacbb RasterOperator ,_agbd *Bitmap ,_fgfec ,_ebceg int )error {const _bbcfe ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
|
|
if _ebefc ==nil {return _g .Error (_bbcfe ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _cacbb ==PixDst {return nil ;};switch _cacbb {case PixClr ,PixSet ,PixNotDst :_acff (_ebefc ,_cbfgd ,_ecfff ,_bgced ,_dfdf ,_cacbb );
|
|
return nil ;};if _agbd ==nil {_eb .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 _g .Error (_bbcfe ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _adee :=_fagb (_ebefc ,_cbfgd ,_ecfff ,_bgced ,_dfdf ,_cacbb ,_agbd ,_fgfec ,_ebceg );_adee !=nil {return _g .Wrap (_adee ,_bbcfe ,"");
|
|
};return nil ;};func (_cceea *byWidth )Len ()int {return len (_cceea .Values )};func TstOSymbol (t *_b .T ,scale ...int )*Bitmap {_cadg ,_ccbe :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_fg .NoError (t ,_ccbe );return TstGetScaledSymbol (t ,_cadg ,scale ...);
|
|
};func (_gac *Bitmap )GetChocolateData ()[]byte {if _gac .Color ==Vanilla {_gac .inverseData ();};return _gac .Data ;};func (_aabfd *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _bfge ="\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 >=_aabfd .IntSlice .Size (){return 0,_g .Errorf (_bfge ,"\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 (_aabfd .YAtIndex (i )),nil ;};func init (){const _bbfg ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_baab =New (50,40);var _ddeca error ;_baab ,_ddeca =_baab .AddBorder (2,1);
|
|
if _ddeca !=nil {panic (_g .Wrap (_ddeca ,_bbfg ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_ddcfc ,_ddeca =NewWithData (50,22,_affd );if _ddeca !=nil {panic (_g .Wrap (_ddeca ,_bbfg ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
|
|
};};func (_bdfga *ClassedPoints )XAtIndex (i int )float32 {return (*_bdfga .Points )[_bdfga .IntSlice [i ]].X };func _bdbcf (_adfe ,_fgbg *Bitmap ,_bbdf *Selection )(*Bitmap ,error ){const _abgge ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";
|
|
var _aggc ,_cbad int ;if _fgbg ==nil {return nil ,_g .Error (_abgge ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _bbdf ==nil {return nil ,_g .Error (_abgge ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};_aggc =_bbdf .Width ;_cbad =_bbdf .Height ;if _aggc ==0||_cbad ==0{return nil ,_g .Error (_abgge ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _adfe ==nil {return _fgbg .createTemplate (),nil ;};if _gagd :=_adfe .resizeImageData (_fgbg );
|
|
_gagd !=nil {return nil ,_gagd ;};return _adfe ,nil ;};func TstESymbol (t *_b .T ,scale ...int )*Bitmap {_dfca ,_ccea :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_fg .NoError (t ,_ccea );return TstGetScaledSymbol (t ,_dfca ,scale ...);};const (MopDilation MorphOperation =iota ;
|
|
MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _eegfa (oldByte ,newByte ,op );};type fillSegment struct{_agede int ;
|
|
_cfcfb int ;_ggcec int ;_cbcag int ;};func (_geg *Bitmap )SizesEqual (s *Bitmap )bool {if _geg ==s {return true ;};if _geg .Width !=s .Width ||_geg .Height !=s .Height {return false ;};return true ;};func (_affa *Bitmap )connComponentsBB (_afgf int )(_gafcg *Boxes ,_acbf error ){const _gcgg ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";
|
|
if _afgf !=4&&_afgf !=8{return nil ,_g .Error (_gcgg ,"\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 _affa .Zero (){return &Boxes {},nil ;
|
|
};_affa .setPadBits (0);_fcgg ,_acbf :=_adfb (nil ,_affa );if _acbf !=nil {return nil ,_g .Wrap (_acbf ,_gcgg ,"\u0062\u006d\u0031");};_gbbfc :=&_e .Stack {};_gbbfc .Aux =&_e .Stack {};_gafcg =&Boxes {};var (_ggfd ,_cabe int ;_bacdf _c .Point ;_dgea bool ;
|
|
_caa *_c .Rectangle ;);for {if _bacdf ,_dgea ,_acbf =_fcgg .nextOnPixel (_cabe ,_ggfd );_acbf !=nil {return nil ,_g .Wrap (_acbf ,_gcgg ,"");};if !_dgea {break ;};if _caa ,_acbf =_fgdd (_fcgg ,_gbbfc ,_bacdf .X ,_bacdf .Y ,_afgf );_acbf !=nil {return nil ,_g .Wrap (_acbf ,_gcgg ,"");
|
|
};if _acbf =_gafcg .Add (_caa );_acbf !=nil {return nil ,_g .Wrap (_acbf ,_gcgg ,"");};_cabe =_bacdf .X ;_ggfd =_bacdf .Y ;};return _gafcg ,nil ;};func TstImageBitmap ()*Bitmap {return _ddcfc .Copy ()};func (_dcee *ClassedPoints )validateIntSlice ()error {const _faed ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";
|
|
for _ ,_cdbed :=range _dcee .IntSlice {if _cdbed >=(_dcee .Points .Size ()){return _g .Errorf (_faed ,"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",_cdbed ,_dcee .Points .Size ());
|
|
};};return nil ;};func TstTSymbol (t *_b .T ,scale ...int )*Bitmap {_ccff ,_edaf :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_fg .NoError (t ,_edaf );return TstGetScaledSymbol (t ,_ccff ,scale ...);};type SelectionValue int ;func (_cdgdf *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _cbcgfa ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";
|
|
if _cdgdf ==nil {return nil ,_g .Error (_cbcgfa ,"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 (_cdgdf .Values )-1{return nil ,_g .Errorf (_cbcgfa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return _cdgdf .Values [i ],nil ;};func (_cggeb *Bitmaps )Size ()int {return len (_cggeb .Values )};func (_cgda *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _dggaa ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _cgda ==nil {return nil ,_g .Error (_dggaa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
|
|
};if i > len (_cgda .Values )-1{return nil ,_g .Errorf (_dggaa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _cgda .Values [i ],nil ;};func _cg (_ce ,_ca *Bitmap )(_ab error ){const _ag ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";
|
|
_acc :=_ca .RowStride ;_accf :=_ce .RowStride ;var (_gf byte ;_ced uint16 ;_af ,_eba ,_d ,_fed ,_ba int ;);for _d =0;_d < _ca .Height ;_d ++{_af =_d *_acc ;_eba =2*_d *_accf ;for _fed =0;_fed < _acc ;_fed ++{_gf =_ca .Data [_af +_fed ];_ced =_aab [_gf ];
|
|
_ba =_eba +_fed *2;if _ce .RowStride !=_ca .RowStride *2&&(_fed +1)*2> _ce .RowStride {_ab =_ce .SetByte (_ba ,byte (_ced >>8));}else {_ab =_ce .setTwoBytes (_ba ,_ced );};if _ab !=nil {return _g .Wrap (_ab ,_ag ,"");};};for _fed =0;_fed < _accf ;_fed ++{_ba =_eba +_accf +_fed ;
|
|
_gf =_ce .Data [_eba +_fed ];if _ab =_ce .SetByte (_ba ,_gf );_ab !=nil {return _g .Wrapf (_ab ,_ag ,"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",_eba +_fed ,_eba +_accf +_fed );
|
|
};};};return nil ;};type shift int ;func _fbgf (_ccfe ,_aged *Bitmap ,_abce ,_fgba int )(*Bitmap ,error ){const _gadeg ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _aged ==nil {return nil ,_g .Error (_gadeg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
|
|
};if _abce < 1&&_fgba < 1{return nil ,_g .Error (_gadeg ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _abce ==1&&_fgba ==1{return _aged .Copy (),nil ;};if _abce ==1||_fgba ==1{var _feda error ;
|
|
_gbdba :=SelCreateBrick (_fgba ,_abce ,_fgba /2,_abce /2,SelHit );_ccfe ,_feda =_aacd (_ccfe ,_aged ,_gbdba );if _feda !=nil {return nil ,_g .Wrap (_feda ,_gadeg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _ccfe ,nil ;};_acgc :=SelCreateBrick (1,_abce ,0,_abce /2,SelHit );_ddce :=SelCreateBrick (_fgba ,1,_fgba /2,0,SelHit );_bddf ,_cace :=_dcab (nil ,_aged ,_acgc );if _cace !=nil {return nil ,_g .Wrap (_cace ,_gadeg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};_ccfe ,_cace =_dcab (_ccfe ,_bddf ,_ddce );if _cace !=nil {return nil ,_g .Wrap (_cace ,_gadeg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_cace =_gaeb (_bddf ,_ccfe ,_acgc );if _cace !=nil {return nil ,_g .Wrap (_cace ,_gadeg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};_ ,_cace =_gaeb (_ccfe ,_bddf ,_ddce );if _cace !=nil {return nil ,_g .Wrap (_cace ,_gadeg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _ccfe ,nil ;};func (_bebf *Bitmap )setTwoBytes (_bcbd int ,_cdbcae uint16 )error {if _bcbd +1> len (_bebf .Data )-1{return _g .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",_bcbd );
|
|
};_bebf .Data [_bcbd ]=byte ((_cdbcae &0xff00)>>8);_bebf .Data [_bcbd +1]=byte (_cdbcae &0xff);return nil ;};func Extract (roi _c .Rectangle ,src *Bitmap )(*Bitmap ,error ){_def :=New (roi .Dx (),roi .Dy ());_gcf :=roi .Min .X &0x07;_eefd :=8-_gcf ;_eaef :=uint (8-_def .Width &0x07);
|
|
_ecaa :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_gaagg :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_efbf :=_def .RowStride ==_gaagg +1-_ecaa ;var _beeg int ;for _ggfa :=roi .Min .Y ;_ggfa < roi .Max .Y ;_ggfa ++{_egcf :=_ecaa ;_ebee :=_beeg ;
|
|
switch {case _ecaa ==_gaagg :_eddf ,_gagb :=src .GetByte (_egcf );if _gagb !=nil {return nil ,_gagb ;};_eddf <<=uint (_gcf );_gagb =_def .SetByte (_ebee ,_aede (_eaef ,_eddf ));if _gagb !=nil {return nil ,_gagb ;};case _gcf ==0:for _cebc :=_ecaa ;_cebc <=_gaagg ;
|
|
_cebc ++{_efebd ,_ddef :=src .GetByte (_egcf );if _ddef !=nil {return nil ,_ddef ;};_egcf ++;if _cebc ==_gaagg &&_efbf {_efebd =_aede (_eaef ,_efebd );};_ddef =_def .SetByte (_ebee ,_efebd );if _ddef !=nil {return nil ,_ddef ;};_ebee ++;};default:_bcbde :=_fffb (src ,_def ,uint (_gcf ),uint (_eefd ),_eaef ,_ecaa ,_gaagg ,_efbf ,_egcf ,_ebee );
|
|
if _bcbde !=nil {return nil ,_bcbde ;};};_ecaa +=src .RowStride ;_gaagg +=src .RowStride ;_beeg +=_def .RowStride ;};return _def ,nil ;};func TstPSymbol (t *_b .T )*Bitmap {t .Helper ();_aadd :=New (5,8);_fg .NoError (t ,_aadd .SetPixel (0,0,1));_fg .NoError (t ,_aadd .SetPixel (1,0,1));
|
|
_fg .NoError (t ,_aadd .SetPixel (2,0,1));_fg .NoError (t ,_aadd .SetPixel (3,0,1));_fg .NoError (t ,_aadd .SetPixel (4,1,1));_fg .NoError (t ,_aadd .SetPixel (0,1,1));_fg .NoError (t ,_aadd .SetPixel (4,2,1));_fg .NoError (t ,_aadd .SetPixel (0,2,1));
|
|
_fg .NoError (t ,_aadd .SetPixel (4,3,1));_fg .NoError (t ,_aadd .SetPixel (0,3,1));_fg .NoError (t ,_aadd .SetPixel (0,4,1));_fg .NoError (t ,_aadd .SetPixel (1,4,1));_fg .NoError (t ,_aadd .SetPixel (2,4,1));_fg .NoError (t ,_aadd .SetPixel (3,4,1));
|
|
_fg .NoError (t ,_aadd .SetPixel (0,5,1));_fg .NoError (t ,_aadd .SetPixel (0,6,1));_fg .NoError (t ,_aadd .SetPixel (0,7,1));return _aadd ;};func _gaeb (_ggbbg *Bitmap ,_feeg *Bitmap ,_fccf *Selection )(*Bitmap ,error ){var (_cbac *Bitmap ;_ccca error ;
|
|
);_ggbbg ,_ccca =_dbbgf (_ggbbg ,_feeg ,_fccf ,&_cbac );if _ccca !=nil {return nil ,_ccca ;};if _ccca =_ggbbg .clearAll ();_ccca !=nil {return nil ,_ccca ;};var _ecdd SelectionValue ;for _afb :=0;_afb < _fccf .Height ;_afb ++{for _afbb :=0;_afbb < _fccf .Width ;
|
|
_afbb ++{_ecdd =_fccf .Data [_afb ][_afbb ];if _ecdd ==SelHit {if _ccca =_ggbbg .RasterOperation (_afbb -_fccf .Cx ,_afb -_fccf .Cy ,_feeg .Width ,_feeg .Height ,PixSrcOrDst ,_cbac ,0,0);_ccca !=nil {return nil ,_ccca ;};};};};return _ggbbg ,nil ;}; |