mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-02 22:17:06 +08:00
656 lines
196 KiB
Go
656 lines
196 KiB
Go
//
|
|
// Copyright 2020 FoxyUtils ehf. All rights reserved.
|
|
//
|
|
// This is a commercial product and requires a license to operate.
|
|
// A trial license can be obtained at https://unidoc.io
|
|
//
|
|
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
|
|
//
|
|
// Use of this source code is governed by the UniDoc End User License Agreement
|
|
// terms that can be accessed at https://unidoc.io/eula/
|
|
|
|
package bitmap ;import (_de "encoding/binary";_f "github.com/stretchr/testify/require";_gb "github.com/unidoc/unipdf/v3/common";_ba "github.com/unidoc/unipdf/v3/internal/bitwise";_gf "github.com/unidoc/unipdf/v3/internal/imageutil";_d "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
|
|
_c "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_da "image";_a "math";_cd "sort";_gd "strings";_b "testing";);func (_caabc *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_daacg *Boxes ,_adfd error ){const _afab ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
|
|
if _caabc ==nil {return nil ,_c .Error (_afab ,"\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 ,_c .Error (_afab ,"\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 _daacg ,_adfd =_caabc .connComponentsBB (connectivity );_adfd !=nil {return nil ,_c .Wrap (_adfd ,_afab ,"");};}else {if _daacg ,_adfd =_caabc .connComponentsBitmapsBB (bms ,connectivity );_adfd !=nil {return nil ,_c .Wrap (_adfd ,_afab ,"");
|
|
};};return _daacg ,nil ;};func (_ebea *Boxes )Add (box *_da .Rectangle )error {if _ebea ==nil {return _c .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");
|
|
};*_ebea =append (*_ebea ,box );return nil ;};type BoundaryCondition int ;func MakePixelCentroidTab8 ()[]int {return _cbfb ()};func (_bgg *Bitmap )CountPixels ()int {return _bgg .countPixels ()};func (_dff *Bitmap )setEightPartlyBytes (_cbg ,_agfg int ,_fbb uint64 )(_cca error ){var (_ebee byte ;
|
|
_gcdb int ;);const _fcdb ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _ccg :=1;_ccg <=_agfg ;_ccg ++{_gcdb =64-_ccg *8;_ebee =byte (_fbb >>uint (_gcdb )&0xff);_gb .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",_ebee ,_cbg ,_cbg +_ccg -1,_agfg ,_gcdb );
|
|
if _cca =_dff .SetByte (_cbg +_ccg -1,_ebee );_cca !=nil {return _c .Wrap (_cca ,_fcdb ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_ebdf :=_dff .RowStride *8-_dff .Width ;if _ebdf ==0{return nil ;};_gcdb -=8;_ebee =byte (_fbb >>uint (_gcdb )&0xff)<<uint (_ebdf );
|
|
if _cca =_dff .SetByte (_cbg +_agfg ,_ebee );_cca !=nil {return _c .Wrap (_cca ,_fcdb ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func (_aecb *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_afc *Boxes ,_ageg error ){const _gcbg ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
|
|
if _aecb ==nil {return nil ,_c .Error (_gcbg ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_aecb )==0{return _aecb ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_gcbg ,"\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 ,_c .Errorf (_gcbg ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
|
|
};_cega :=_aecb .makeSizeIndicator (width ,height ,tp ,relation );_ggad ,_ageg :=_aecb .selectWithIndicator (_cega );if _ageg !=nil {return nil ,_c .Wrap (_ageg ,_gcbg ,"");};return _ggad ,nil ;};type SizeComparison int ;var _acbf =[5]int {1,2,3,0,4};func (_bgb *Bitmap )String ()string {var _feb ="\u000a";
|
|
for _cgg :=0;_cgg < _bgb .Height ;_cgg ++{var _gffc string ;for _ece :=0;_ece < _bgb .Width ;_ece ++{_fba :=_bgb .GetPixel (_ece ,_cgg );if _fba {_gffc +="\u0031";}else {_gffc +="\u0030";};};_feb +=_gffc +"\u000a";};return _feb ;};type Getter interface{GetBitmap ()*Bitmap ;
|
|
};func _abdb (_gfcg ,_fbcb *Bitmap ,_egag ,_abe ,_ccfa uint ,_egba ,_eadb int ,_gebf bool ,_efgcc ,_aadad int )error {for _ceff :=_egba ;_ceff < _eadb ;_ceff ++{if _efgcc +1< len (_gfcg .Data ){_afgg :=_ceff +1==_eadb ;_fcaa ,_fade :=_gfcg .GetByte (_efgcc );
|
|
if _fade !=nil {return _fade ;};_efgcc ++;_fcaa <<=_egag ;_gdgg ,_fade :=_gfcg .GetByte (_efgcc );if _fade !=nil {return _fade ;};_gdgg >>=_abe ;_bgff :=_fcaa |_gdgg ;if _afgg &&!_gebf {_bgff =_fcfa (_ccfa ,_bgff );};_fade =_fbcb .SetByte (_aadad ,_bgff );
|
|
if _fade !=nil {return _fade ;};_aadad ++;if _afgg &&_gebf {_fbf ,_aebd :=_gfcg .GetByte (_efgcc );if _aebd !=nil {return _aebd ;};_fbf <<=_egag ;_bgff =_fcfa (_ccfa ,_fbf );if _aebd =_fbcb .SetByte (_aadad ,_bgff );_aebd !=nil {return _aebd ;};};continue ;
|
|
};_agdf ,_efba :=_gfcg .GetByte (_efgcc );if _efba !=nil {_gb .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",_efgcc ,_efba );
|
|
return _efba ;};_agdf <<=_egag ;_efgcc ++;_efba =_fbcb .SetByte (_aadad ,_agdf );if _efba !=nil {return _efba ;};_aadad ++;};return nil ;};func TstRSymbol (t *_b .T ,scale ...int )*Bitmap {_ecadf ,_feabf :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});
|
|
_f .NoError (t ,_feabf );return TstGetScaledSymbol (t ,_ecadf ,scale ...);};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);type ClassedPoints struct{*Points ;_d .IntSlice ;
|
|
_efea func (_gaeg ,_bced int )bool ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _dda (oldByte ,newByte ,op );};func _fb ()(_cgc [256]uint16 ){for _ged :=0;_ged < 256;_ged ++{if _ged &0x01!=0{_cgc [_ged ]|=0x3;};if _ged &0x02!=0{_cgc [_ged ]|=0xc;
|
|
};if _ged &0x04!=0{_cgc [_ged ]|=0x30;};if _ged &0x08!=0{_cgc [_ged ]|=0xc0;};if _ged &0x10!=0{_cgc [_ged ]|=0x300;};if _ged &0x20!=0{_cgc [_ged ]|=0xc00;};if _ged &0x40!=0{_cgc [_ged ]|=0x3000;};if _ged &0x80!=0{_cgc [_ged ]|=0xc000;};};return _cgc ;};
|
|
func init (){for _aeb :=0;_aeb < 256;_aeb ++{_ebc [_aeb ]=uint8 (_aeb &0x1)+(uint8 (_aeb >>1)&0x1)+(uint8 (_aeb >>2)&0x1)+(uint8 (_aeb >>3)&0x1)+(uint8 (_aeb >>4)&0x1)+(uint8 (_aeb >>5)&0x1)+(uint8 (_aeb >>6)&0x1)+(uint8 (_aeb >>7)&0x1);};};func _dgcda (_aadf *Bitmap ,_deaab *Bitmap ,_ebdd *Selection ,_cdgd **Bitmap )(*Bitmap ,error ){const _beed ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";
|
|
if _deaab ==nil {return nil ,_c .Error (_beed ,"\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 _ebdd ==nil {return nil ,_c .Error (_beed ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");
|
|
};_ccc ,_fecgf :=_ebdd .Height ,_ebdd .Width ;if _ccc ==0||_fecgf ==0{return nil ,_c .Error (_beed ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _aadf ==nil {_aadf =_deaab .createTemplate ();
|
|
*_cdgd =_deaab ;return _aadf ,nil ;};_aadf .Width =_deaab .Width ;_aadf .Height =_deaab .Height ;_aadf .RowStride =_deaab .RowStride ;_aadf .Color =_deaab .Color ;_aadf .Data =make ([]byte ,_deaab .RowStride *_deaab .Height );if _aadf ==_deaab {*_cdgd =_deaab .Copy ();
|
|
}else {*_cdgd =_deaab ;};return _aadf ,nil ;};func (_aca *Bitmap )GetPixel (x ,y int )bool {_cfce :=_aca .GetByteIndex (x ,y );_fca :=_aca .GetBitOffset (x );_fafe :=uint (7-_fca );if _cfce > len (_aca .Data )-1{_gb .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 ,_aca );
|
|
return false ;};if (_aca .Data [_cfce ]>>_fafe )&0x01>=1{return true ;};return false ;};func (_cdgbb MorphProcess )getWidthHeight ()(_daecf ,_abgd int ){return _cdgbb .Arguments [0],_cdgbb .Arguments [1];};func _dbe ()(_ccdf []byte ){_ccdf =make ([]byte ,256);
|
|
for _ccbb :=0;_ccbb < 256;_ccbb ++{_geag :=byte (_ccbb );_ccdf [_geag ]=(_geag &0x01)|((_geag &0x04)>>1)|((_geag &0x10)>>2)|((_geag &0x40)>>3)|((_geag &0x02)<<3)|((_geag &0x08)<<2)|((_geag &0x20)<<1)|(_geag &0x80);};return _ccdf ;};func (_fbfe *Selection )setOrigin (_aadg ,_adfb int ){_fbfe .Cy ,_fbfe .Cx =_aadg ,_adfb };
|
|
func (_cdede *byWidth )Swap (i ,j int ){_cdede .Values [i ],_cdede .Values [j ]=_cdede .Values [j ],_cdede .Values [i ];if _cdede .Boxes !=nil {_cdede .Boxes [i ],_cdede .Boxes [j ]=_cdede .Boxes [j ],_cdede .Boxes [i ];};};func (_ddgd *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _aebg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";
|
|
if _ddgd ==nil {return nil ,_c .Error (_aebg ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_c .Error (_aebg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
|
|
};_ccbbe :=len (_ddgd .Values );_eaad :=&Bitmaps {Values :make ([]*Bitmap ,_ccbbe ),Boxes :make ([]*_da .Rectangle ,_ccbbe )};var (_ggea ,_fagd *Bitmap ;_fbfce *_da .Rectangle ;_bbae error ;);for _afcag :=0;_afcag < _ccbbe ;_afcag ++{if _ggea ,_bbae =_ddgd .GetBitmap (_afcag );
|
|
_bbae !=nil {return nil ,_c .Wrap (_bbae ,_aebg ,"");};if _fbfce ,_bbae =_ddgd .GetBox (_afcag );_bbae !=nil {return nil ,_c .Wrap (_bbae ,_aebg ,"");};if _fagd ,_bbae =s .clipRectangle (_fbfce ,nil );_bbae !=nil {return nil ,_c .Wrap (_bbae ,_aebg ,"");
|
|
};if _fagd ,_bbae =_fagd .And (_ggea );_bbae !=nil {return nil ,_c .Wrap (_bbae ,_aebg ,"");};_eaad .Values [_afcag ]=_fagd ;_eaad .Boxes [_afcag ]=_fbfce ;};return _eaad ,nil ;};func (_fabf *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _cbegag ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";
|
|
if _fabf ==nil {return nil ,_c .Error (_cbegag ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_fabf .Values )-1{return nil ,_c .Errorf (_cbegag ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return _fabf .Values [i ],nil ;};func TstWriteSymbols (t *_b .T ,bms *Bitmaps ,src *Bitmap ){for _gdfc :=0;_gdfc < bms .Size ();_gdfc ++{_fbfbf :=bms .Values [_gdfc ];_ddbd :=bms .Boxes [_gdfc ];_dcaf :=src .RasterOperation (_ddbd .Min .X ,_ddbd .Min .Y ,_fbfbf .Width ,_fbfbf .Height ,PixSrc ,_fbfbf ,0,0);
|
|
_f .NoError (t ,_dcaf );};};func (_adde *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _edcd ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _adde ==nil {return nil ,_c .Error (_edcd ,"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 (_adde .Values )-1{return nil ,_c .Errorf (_edcd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _adde .Values [i ],nil ;};func TstAddSymbol (t *_b .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );
|
|
_cbdga :=_da .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_cbdga );*x +=sym .Width +space ;};func _cfbb (_gfbga *_d .Stack )(_eggd *fillSegment ,_gbdg error ){const _bcedg ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";
|
|
if _gfbga ==nil {return nil ,_c .Error (_bcedg ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _gfbga .Aux ==nil {return nil ,_c .Error (_bcedg ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");
|
|
};_ccab ,_aggcg :=_gfbga .Pop ();if !_aggcg {return nil ,nil ;};_efef ,_aggcg :=_ccab .(*fillSegment );if !_aggcg {return nil ,_c .Error (_bcedg ,"\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");
|
|
};_eggd =&fillSegment {_efef ._egef ,_efef ._gbdb ,_efef ._afegc +_efef ._aafag ,_efef ._aafag };_gfbga .Aux .Push (_efef );return _eggd ,nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_ccef float64 ,_eged error ){const _ededa ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
|
|
if bm1 ==nil ||bm2 ==nil {return 0,_c .Error (_ededa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_c .Error (_ededa ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
|
|
};if area1 <=0||area2 <=0{return 0,_c .Error (_ededa ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_eegb ,_gac :=bm1 .Width ,bm1 .Height ;_dge ,_gfcf :=bm2 .Width ,bm2 .Height ;
|
|
_cbdg :=_eca (_eegb -_dge );if _cbdg > maxDiffW {return 0,nil ;};_eaab :=_eca (_gac -_gfcf );if _eaab > maxDiffH {return 0,nil ;};var _bcfd ,_edfb int ;if delX >=0{_bcfd =int (delX +0.5);}else {_bcfd =int (delX -0.5);};if delY >=0{_edfb =int (delY +0.5);
|
|
}else {_edfb =int (delY -0.5);};_gdac :=_ddc (_edfb ,0);_egffa :=_bfgf (_gfcf +_edfb ,_gac );_gddff :=bm1 .RowStride *_gdac ;_ecaa :=bm2 .RowStride *(_gdac -_edfb );_fedb :=_ddc (_bcfd ,0);_ddfe :=_bfgf (_dge +_bcfd ,_eegb );_aegg :=bm2 .RowStride ;var _dccg ,_bcga int ;
|
|
if _bcfd >=8{_dccg =_bcfd >>3;_gddff +=_dccg ;_fedb -=_dccg <<3;_ddfe -=_dccg <<3;_bcfd &=7;}else if _bcfd <=-8{_bcga =-((_bcfd +7)>>3);_ecaa +=_bcga ;_aegg -=_bcga ;_bcfd +=_bcga <<3;};if _fedb >=_ddfe ||_gdac >=_egffa {return 0,nil ;};_cacf :=(_ddfe +7)>>3;
|
|
var (_ecgg ,_fbg ,_eacc byte ;_fgfc ,_aeac ,_cafa int ;);switch {case _bcfd ==0:for _cafa =_gdac ;_cafa < _egffa ;_cafa ,_gddff ,_ecaa =_cafa +1,_gddff +bm1 .RowStride ,_ecaa +bm2 .RowStride {for _aeac =0;_aeac < _cacf ;_aeac ++{_eacc =bm1 .Data [_gddff +_aeac ]&bm2 .Data [_ecaa +_aeac ];
|
|
_fgfc +=tab [_eacc ];};};case _bcfd > 0:if _aegg < _cacf {for _cafa =_gdac ;_cafa < _egffa ;_cafa ,_gddff ,_ecaa =_cafa +1,_gddff +bm1 .RowStride ,_ecaa +bm2 .RowStride {_ecgg ,_fbg =bm1 .Data [_gddff ],bm2 .Data [_ecaa ]>>uint (_bcfd );_eacc =_ecgg &_fbg ;
|
|
_fgfc +=tab [_eacc ];for _aeac =1;_aeac < _aegg ;_aeac ++{_ecgg ,_fbg =bm1 .Data [_gddff +_aeac ],(bm2 .Data [_ecaa +_aeac ]>>uint (_bcfd ))|(bm2 .Data [_ecaa +_aeac -1]<<uint (8-_bcfd ));_eacc =_ecgg &_fbg ;_fgfc +=tab [_eacc ];};_ecgg =bm1 .Data [_gddff +_aeac ];
|
|
_fbg =bm2 .Data [_ecaa +_aeac -1]<<uint (8-_bcfd );_eacc =_ecgg &_fbg ;_fgfc +=tab [_eacc ];};}else {for _cafa =_gdac ;_cafa < _egffa ;_cafa ,_gddff ,_ecaa =_cafa +1,_gddff +bm1 .RowStride ,_ecaa +bm2 .RowStride {_ecgg ,_fbg =bm1 .Data [_gddff ],bm2 .Data [_ecaa ]>>uint (_bcfd );
|
|
_eacc =_ecgg &_fbg ;_fgfc +=tab [_eacc ];for _aeac =1;_aeac < _cacf ;_aeac ++{_ecgg =bm1 .Data [_gddff +_aeac ];_fbg =(bm2 .Data [_ecaa +_aeac ]>>uint (_bcfd ))|(bm2 .Data [_ecaa +_aeac -1]<<uint (8-_bcfd ));_eacc =_ecgg &_fbg ;_fgfc +=tab [_eacc ];};};
|
|
};default:if _cacf < _aegg {for _cafa =_gdac ;_cafa < _egffa ;_cafa ,_gddff ,_ecaa =_cafa +1,_gddff +bm1 .RowStride ,_ecaa +bm2 .RowStride {for _aeac =0;_aeac < _cacf ;_aeac ++{_ecgg =bm1 .Data [_gddff +_aeac ];_fbg =bm2 .Data [_ecaa +_aeac ]<<uint (-_bcfd );
|
|
_fbg |=bm2 .Data [_ecaa +_aeac +1]>>uint (8+_bcfd );_eacc =_ecgg &_fbg ;_fgfc +=tab [_eacc ];};};}else {for _cafa =_gdac ;_cafa < _egffa ;_cafa ,_gddff ,_ecaa =_cafa +1,_gddff +bm1 .RowStride ,_ecaa +bm2 .RowStride {for _aeac =0;_aeac < _cacf -1;_aeac ++{_ecgg =bm1 .Data [_gddff +_aeac ];
|
|
_fbg =bm2 .Data [_ecaa +_aeac ]<<uint (-_bcfd );_fbg |=bm2 .Data [_ecaa +_aeac +1]>>uint (8+_bcfd );_eacc =_ecgg &_fbg ;_fgfc +=tab [_eacc ];};_ecgg =bm1 .Data [_gddff +_aeac ];_fbg =bm2 .Data [_ecaa +_aeac ]<<uint (-_bcfd );_eacc =_ecgg &_fbg ;_fgfc +=tab [_eacc ];
|
|
};};};_ccef =float64 (_fgfc )*float64 (_fgfc )/(float64 (area1 )*float64 (area2 ));return _ccef ,nil ;};var (_adfg =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_agdg =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _gbed (src ,sequence ...);
|
|
};func (_dgd *Bitmap )equivalent (_adfe *Bitmap )bool {if _dgd ==_adfe {return true ;};if !_dgd .SizesEqual (_adfe ){return false ;};_beeb :=_ddgf (_dgd ,_adfe ,CmbOpXor );_aed :=_dgd .countPixels ();_ggb :=int (0.25*float32 (_aed ));if _beeb .thresholdPixelSum (_ggb ){return false ;
|
|
};var (_bdf [9][9]int ;_dfce [18][9]int ;_deaa [9][18]int ;_fgd int ;_ddfd int ;);_aedb :=9;_bddc :=_dgd .Height /_aedb ;_dde :=_dgd .Width /_aedb ;_cge ,_bff :=_bddc /2,_dde /2;if _bddc < _dde {_cge =_dde /2;_bff =_bddc /2;};_dcba :=float64 (_cge )*float64 (_bff )*_a .Pi ;
|
|
_dedf :=int (float64 (_bddc *_dde /2)*0.9);_aae :=int (float64 (_dde *_bddc /2)*0.9);for _fafff :=0;_fafff < _aedb ;_fafff ++{_ggd :=_dde *_fafff +_fgd ;var _aggg int ;if _fafff ==_aedb -1{_fgd =0;_aggg =_dgd .Width ;}else {_aggg =_ggd +_dde ;if ((_dgd .Width -_fgd )%_aedb )> 0{_fgd ++;
|
|
_aggg ++;};};for _cfbd :=0;_cfbd < _aedb ;_cfbd ++{_efee :=_bddc *_cfbd +_ddfd ;var _dbd int ;if _cfbd ==_aedb -1{_ddfd =0;_dbd =_dgd .Height ;}else {_dbd =_efee +_bddc ;if (_dgd .Height -_ddfd )%_aedb > 0{_ddfd ++;_dbd ++;};};var _bcdbg ,_gbgg ,_fae ,_gad int ;
|
|
_gcfc :=(_ggd +_aggg )/2;_afbb :=(_efee +_dbd )/2;for _ecbf :=_ggd ;_ecbf < _aggg ;_ecbf ++{for _dfbg :=_efee ;_dfbg < _dbd ;_dfbg ++{if _beeb .GetPixel (_ecbf ,_dfbg ){if _ecbf < _gcfc {_bcdbg ++;}else {_gbgg ++;};if _dfbg < _afbb {_gad ++;}else {_fae ++;
|
|
};};};};_bdf [_fafff ][_cfbd ]=_bcdbg +_gbgg ;_dfce [_fafff *2][_cfbd ]=_bcdbg ;_dfce [_fafff *2+1][_cfbd ]=_gbgg ;_deaa [_fafff ][_cfbd *2]=_gad ;_deaa [_fafff ][_cfbd *2+1]=_fae ;};};for _ggbb :=0;_ggbb < _aedb *2-1;_ggbb ++{for _eceb :=0;_eceb < (_aedb -1);
|
|
_eceb ++{var _ecde int ;for _bbe :=0;_bbe < 2;_bbe ++{for _cfa :=0;_cfa < 2;_cfa ++{_ecde +=_dfce [_ggbb +_bbe ][_eceb +_cfa ];};};if _ecde > _aae {return false ;};};};for _daee :=0;_daee < (_aedb -1);_daee ++{for _cbf :=0;_cbf < ((_aedb *2)-1);_cbf ++{var _ceec int ;
|
|
for _fgeg :=0;_fgeg < 2;_fgeg ++{for _beb :=0;_beb < 2;_beb ++{_ceec +=_deaa [_daee +_fgeg ][_cbf +_beb ];};};if _ceec > _dedf {return false ;};};};for _gggf :=0;_gggf < (_aedb -2);_gggf ++{for _bdde :=0;_bdde < (_aedb -2);_bdde ++{var _ffgb ,_gbce int ;
|
|
for _fde :=0;_fde < 3;_fde ++{for _eeca :=0;_eeca < 3;_eeca ++{if _fde ==_eeca {_ffgb +=_bdf [_gggf +_fde ][_bdde +_eeca ];};if (2-_fde )==_eeca {_gbce +=_bdf [_gggf +_fde ][_bdde +_eeca ];};};};if _ffgb > _aae ||_gbce > _aae {return false ;};};};for _ddfa :=0;
|
|
_ddfa < (_aedb -1);_ddfa ++{for _dcfc :=0;_dcfc < (_aedb -1);_dcfc ++{var _adaed int ;for _deg :=0;_deg < 2;_deg ++{for _bgba :=0;_bgba < 2;_bgba ++{_adaed +=_bdf [_ddfa +_deg ][_dcfc +_bgba ];};};if float64 (_adaed )> _dcba {return false ;};};};return true ;
|
|
};func (_bafd *Boxes )Get (i int )(*_da .Rectangle ,error ){const _aea ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _bafd ==nil {return nil ,_c .Error (_aea ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if i > len (*_bafd )-1{return nil ,_c .Errorf (_aea ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_bafd )[i ],nil ;};func (_eafb *Bitmap )connComponentsBB (_dbdc int )(_bgdc *Boxes ,_edee error ){const _dadb ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";
|
|
if _dbdc !=4&&_dbdc !=8{return nil ,_c .Error (_dadb ,"\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 _eafb .Zero (){return &Boxes {},nil ;
|
|
};_eafb .setPadBits (0);_eea ,_edee :=_gcag (nil ,_eafb );if _edee !=nil {return nil ,_c .Wrap (_edee ,_dadb ,"\u0062\u006d\u0031");};_aaeg :=&_d .Stack {};_aaeg .Aux =&_d .Stack {};_bgdc =&Boxes {};var (_adcfc ,_daec int ;_bebfb _da .Point ;_cce bool ;
|
|
_gdad *_da .Rectangle ;);for {if _bebfb ,_cce ,_edee =_eea .nextOnPixel (_daec ,_adcfc );_edee !=nil {return nil ,_c .Wrap (_edee ,_dadb ,"");};if !_cce {break ;};if _gdad ,_edee =_eefd (_eea ,_aaeg ,_bebfb .X ,_bebfb .Y ,_dbdc );_edee !=nil {return nil ,_c .Wrap (_edee ,_dadb ,"");
|
|
};if _edee =_bgdc .Add (_gdad );_edee !=nil {return nil ,_c .Wrap (_edee ,_dadb ,"");};_daec =_bebfb .X ;_adcfc =_bebfb .Y ;};return _bgdc ,nil ;};var (_ffca *Bitmap ;_baagf *Bitmap ;);const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func TstWordBitmapWithSpaces (t *_b .T ,scale ...int )*Bitmap {_edcbf :=1;
|
|
if len (scale )> 0{_edcbf =scale [0];};_cbaa :=3;_ebfa :=9+7+15+2*_cbaa +2*_cbaa ;_bceea :=5+_cbaa +5+2*_cbaa ;_gbbc :=New (_ebfa *_edcbf ,_bceea *_edcbf );_gcaf :=&Bitmaps {};var _decg *int ;_cbaa *=_edcbf ;_bcece :=_cbaa ;_decg =&_bcece ;_dcef :=_cbaa ;
|
|
_eabf :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,1*_edcbf );_eabf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,_cbaa );_eabf =TstISymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,1*_edcbf );
|
|
_eabf =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,_cbaa );_eabf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,1*_edcbf );_eabf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,1*_edcbf );
|
|
_eabf =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,0);*_decg =_cbaa ;_dcef =5*_edcbf +_cbaa ;_eabf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,1*_edcbf );_eabf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,_cbaa );
|
|
_eabf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,1*_edcbf );_eabf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,1*_edcbf );_eabf =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,1*_edcbf );
|
|
_eabf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,1*_edcbf );_eabf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gcaf ,_eabf ,_decg ,_dcef ,0);TstWriteSymbols (t ,_gcaf ,_gbbc );return _gbbc ;};func (_dgg *Bitmap )SetPadBits (value int ){_dgg .setPadBits (value )};
|
|
const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func (_dfae *Points )AddPoint (x ,y float32 ){*_dfae =append (*_dfae ,Point {x ,y })};func _cbfb ()[]int {_cedb :=make ([]int ,256);_cedb [0]=0;
|
|
_cedb [1]=7;var _fagc int ;for _fagc =2;_fagc < 4;_fagc ++{_cedb [_fagc ]=_cedb [_fagc -2]+6;};for _fagc =4;_fagc < 8;_fagc ++{_cedb [_fagc ]=_cedb [_fagc -4]+5;};for _fagc =8;_fagc < 16;_fagc ++{_cedb [_fagc ]=_cedb [_fagc -8]+4;};for _fagc =16;_fagc < 32;
|
|
_fagc ++{_cedb [_fagc ]=_cedb [_fagc -16]+3;};for _fagc =32;_fagc < 64;_fagc ++{_cedb [_fagc ]=_cedb [_fagc -32]+2;};for _fagc =64;_fagc < 128;_fagc ++{_cedb [_fagc ]=_cedb [_fagc -64]+1;};for _fagc =128;_fagc < 256;_fagc ++{_cedb [_fagc ]=_cedb [_fagc -128];
|
|
};return _cedb ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _feaab (d ,s ,hSize ,vSize )};var MorphBC BoundaryCondition ;func (_bcf *Bitmap )nextOnPixel (_agff ,_ggga int )(_dgca _da .Point ,_gdcd bool ,_agcg error ){const _dcbc ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";
|
|
_dgca ,_gdcd ,_agcg =_bcf .nextOnPixelLow (_bcf .Width ,_bcf .Height ,_bcf .RowStride ,_agff ,_ggga );if _agcg !=nil {return _dgca ,false ,_c .Wrap (_agcg ,_dcbc ,"");};return _dgca ,_gdcd ,nil ;};func (_bdcc *Bitmap )SetByte (index int ,v byte )error {if index > len (_bdcc .Data )-1||index < 0{return _c .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 );
|
|
};_bdcc .Data [index ]=v ;return nil ;};func _ffd (_bdad ,_ffb ,_aede *Bitmap )(*Bitmap ,error ){const _gfbg ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _ffb ==nil {return nil ,_c .Error (_gfbg ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
|
|
};if _aede ==nil {return nil ,_c .Error (_gfbg ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _abb error ;switch {case _bdad ==_ffb :if _abb =_bdad .RasterOperation (0,0,_ffb .Width ,_ffb .Height ,PixNotSrcAndDst ,_aede ,0,0);_abb !=nil {return nil ,_c .Wrap (_abb ,_gfbg ,"\u0064 \u003d\u003d\u0020\u0073\u0031");
|
|
};case _bdad ==_aede :if _abb =_bdad .RasterOperation (0,0,_ffb .Width ,_ffb .Height ,PixNotSrcAndDst ,_ffb ,0,0);_abb !=nil {return nil ,_c .Wrap (_abb ,_gfbg ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_bdad ,_abb =_gcag (_bdad ,_ffb );if _abb !=nil {return nil ,_c .Wrap (_abb ,_gfbg ,"");
|
|
};if _abb =_bdad .RasterOperation (0,0,_ffb .Width ,_ffb .Height ,PixNotSrcAndDst ,_aede ,0,0);_abb !=nil {return nil ,_c .Wrap (_abb ,_gfbg ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _bdad ,nil ;};func _eefd (_ggbbc *Bitmap ,_bfga *_d .Stack ,_bgdbc ,_cegg ,_dbeb int )(_aag *_da .Rectangle ,_effa error ){const _agfec ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
|
|
if _ggbbc ==nil {return nil ,_c .Error (_agfec ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _bfga ==nil {return nil ,_c .Error (_agfec ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
|
|
};switch _dbeb {case 4:if _aag ,_effa =_dbddf (_ggbbc ,_bfga ,_bgdbc ,_cegg );_effa !=nil {return nil ,_c .Wrap (_effa ,_agfec ,"");};return _aag ,nil ;case 8:if _aag ,_effa =_ecce (_ggbbc ,_bfga ,_bgdbc ,_cegg );_effa !=nil {return nil ,_c .Wrap (_effa ,_agfec ,"");
|
|
};return _aag ,nil ;default:return nil ,_c .Errorf (_agfec ,"\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",_dbeb );
|
|
};};func (_bee *Bitmap )GetVanillaData ()[]byte {if _bee .Color ==Chocolate {_bee .inverseData ();};return _bee .Data ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;
|
|
);func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_bgad float64 ,_dcdf error ){const _egage ="\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 _bgad ,_c .Error (_egage ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _bgad ,_c .Error (_egage ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if area1 ==0||area2 ==0{return _bgad ,_c .Error (_egage ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_debb ,_edbd :=bm1 .Width ,bm1 .Height ;_adea ,_efde :=bm2 .Width ,bm2 .Height ;
|
|
if _eca (_debb -_adea )> maxDiffW {return 0,nil ;};if _eca (_edbd -_efde )> maxDiffH {return 0,nil ;};var _fdee ,_gged int ;if delX >=0{_fdee =int (delX +0.5);}else {_fdee =int (delX -0.5);};if delY >=0{_gged =int (delY +0.5);}else {_gged =int (delY -0.5);
|
|
};_ecf :=bm1 .createTemplate ();if _dcdf =_ecf .RasterOperation (_fdee ,_gged ,_adea ,_efde ,PixSrc ,bm2 ,0,0);_dcdf !=nil {return _bgad ,_c .Wrap (_dcdf ,_egage ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _dcdf =_ecf .RasterOperation (0,0,_debb ,_edbd ,PixSrcAndDst ,bm1 ,0,0);
|
|
_dcdf !=nil {return _bgad ,_c .Wrap (_dcdf ,_egage ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_bega :=_ecf .countPixels ();_bgad =float64 (_bega )*float64 (_bega )/(float64 (area1 )*float64 (area2 ));return _bgad ,nil ;};func (_ecg *Bitmap )inverseData (){if _cada :=_ecg .RasterOperation (0,0,_ecg .Width ,_ecg .Height ,PixNotDst ,nil ,0,0);
|
|
_cada !=nil {_gb .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_cada );};if _ecg .Color ==Chocolate {_ecg .Color =Vanilla ;}else {_ecg .Color =Chocolate ;};};func _bbc (_bbb *Bitmap ,_cf ,_adf int )(*Bitmap ,error ){const _gg ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";
|
|
if _bbb ==nil {return nil ,_c .Error (_gg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cf <=0||_adf <=0{return nil ,_c .Error (_gg ,"\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 _cf ==_adf {if _cf ==1{_dc ,_cg :=_gcag (nil ,_bbb );if _cg !=nil {return nil ,_c .Wrap (_cg ,_gg ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _dc ,nil ;};if _cf ==2||_cf ==4||_cf ==8{_bfdd ,_add :=_geb (_bbb ,_cf );
|
|
if _add !=nil {return nil ,_c .Wrap (_add ,_gg ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _bfdd ,nil ;};};_ada :=_cf *_bbb .Width ;_dfg :=_adf *_bbb .Height ;_ecd :=New (_ada ,_dfg );_fdc :=_ecd .RowStride ;
|
|
var (_cfb ,_adb ,_cdg ,_ecdb ,_gde int ;_baae byte ;_dfb error ;);for _adb =0;_adb < _bbb .Height ;_adb ++{_cfb =_adf *_adb *_fdc ;for _cdg =0;_cdg < _bbb .Width ;_cdg ++{if _eg :=_bbb .GetPixel (_cdg ,_adb );_eg {_gde =_cf *_cdg ;for _ecdb =0;_ecdb < _cf ;
|
|
_ecdb ++{_ecd .setBit (_cfb *8+_gde +_ecdb );};};};for _ecdb =1;_ecdb < _adf ;_ecdb ++{_ef :=_cfb +_ecdb *_fdc ;for _agg :=0;_agg < _fdc ;_agg ++{if _baae ,_dfb =_ecd .GetByte (_cfb +_agg );_dfb !=nil {return nil ,_c .Wrapf (_dfb ,_gg ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_ecdb );
|
|
};if _dfb =_ecd .SetByte (_ef +_agg ,_baae );_dfb !=nil {return nil ,_c .Wrap (_dfb ,_gg ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _ecd ,nil ;};func (_ggg *Bitmap )InverseData (){_ggg .inverseData ()};
|
|
func _dbddf (_baec *Bitmap ,_bbdc *_d .Stack ,_efcfg ,_agbg int )(_gfag *_da .Rectangle ,_afee error ){const _dddaf ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _baec ==nil {return nil ,_c .Error (_dddaf ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
|
|
};if _bbdc ==nil {return nil ,_c .Error (_dddaf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_bebfa ,_degb :=_baec .Width ,_baec .Height ;_ccfb :=_bebfa -1;_cadb :=_degb -1;if _efcfg < 0||_efcfg > _ccfb ||_agbg < 0||_agbg > _cadb ||!_baec .GetPixel (_efcfg ,_agbg ){return nil ,nil ;
|
|
};var _faba *_da .Rectangle ;_faba ,_afee =Rect (100000,100000,0,0);if _afee !=nil {return nil ,_c .Wrap (_afee ,_dddaf ,"");};if _afee =_cagb (_bbdc ,_efcfg ,_efcfg ,_agbg ,1,_cadb ,_faba );_afee !=nil {return nil ,_c .Wrap (_afee ,_dddaf ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
|
|
};if _afee =_cagb (_bbdc ,_efcfg ,_efcfg ,_agbg +1,-1,_cadb ,_faba );_afee !=nil {return nil ,_c .Wrap (_afee ,_dddaf ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_faba .Min .X ,_faba .Max .X =_efcfg ,_efcfg ;
|
|
_faba .Min .Y ,_faba .Max .Y =_agbg ,_agbg ;var (_bbcd *fillSegment ;_agga int ;);for _bbdc .Len ()> 0{if _bbcd ,_afee =_cfbb (_bbdc );_afee !=nil {return nil ,_c .Wrap (_afee ,_dddaf ,"");};_agbg =_bbcd ._afegc ;for _efcfg =_bbcd ._egef ;_efcfg >=0&&_baec .GetPixel (_efcfg ,_agbg );
|
|
_efcfg --{if _afee =_baec .SetPixel (_efcfg ,_agbg ,0);_afee !=nil {return nil ,_c .Wrap (_afee ,_dddaf ,"");};};if _efcfg >=_bbcd ._egef {for _efcfg ++;_efcfg <=_bbcd ._gbdb &&_efcfg <=_ccfb &&!_baec .GetPixel (_efcfg ,_agbg );_efcfg ++{};_agga =_efcfg ;
|
|
if !(_efcfg <=_bbcd ._gbdb &&_efcfg <=_ccfb ){continue ;};}else {_agga =_efcfg +1;if _agga < _bbcd ._egef -1{if _afee =_cagb (_bbdc ,_agga ,_bbcd ._egef -1,_bbcd ._afegc ,-_bbcd ._aafag ,_cadb ,_faba );_afee !=nil {return nil ,_c .Wrap (_afee ,_dddaf ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
|
|
};};_efcfg =_bbcd ._egef +1;};for {for ;_efcfg <=_ccfb &&_baec .GetPixel (_efcfg ,_agbg );_efcfg ++{if _afee =_baec .SetPixel (_efcfg ,_agbg ,0);_afee !=nil {return nil ,_c .Wrap (_afee ,_dddaf ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _afee =_cagb (_bbdc ,_agga ,_efcfg -1,_bbcd ._afegc ,_bbcd ._aafag ,_cadb ,_faba );
|
|
_afee !=nil {return nil ,_c .Wrap (_afee ,_dddaf ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _efcfg > _bbcd ._gbdb +1{if _afee =_cagb (_bbdc ,_bbcd ._gbdb +1,_efcfg -1,_bbcd ._afegc ,-_bbcd ._aafag ,_cadb ,_faba );_afee !=nil {return nil ,_c .Wrap (_afee ,_dddaf ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};for _efcfg ++;_efcfg <=_bbcd ._gbdb &&_efcfg <=_ccfb &&!_baec .GetPixel (_efcfg ,_agbg );_efcfg ++{};_agga =_efcfg ;if !(_efcfg <=_bbcd ._gbdb &&_efcfg <=_ccfb ){break ;};};};_faba .Max .X ++;_faba .Max .Y ++;return _faba ,nil ;};func _eacce (_bged ,_aaabd *Bitmap ,_acab ,_agca int )(_ffeb error ){const _agea ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";
|
|
var (_afcca ,_bdac ,_dcdc ,_bfdf int ;_ccbd ,_ggcd ,_gdfb ,_edcba ,_fecc ,_bbcg ,_bbfd ,_cdece byte ;);for _afcca =0;_afcca < _acab ;_afcca ++{_dcdc =_afcca *_bged .RowStride ;_bfdf =_afcca *_aaabd .RowStride ;for _bdac =0;_bdac < _agca ;_bdac ++{if _ccbd ,_ffeb =_bged .GetByte (_dcdc +_bdac );
|
|
_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _ggcd ,_ffeb =_aaabd .GetByte (_bfdf +_bdac );_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");
|
|
};if _afcca > 0{if _gdfb ,_ffeb =_bged .GetByte (_dcdc -_bged .RowStride +_bdac );_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_ccbd |=_gdfb |(_gdfb <<1)|(_gdfb >>1);if _bdac > 0{if _cdece ,_ffeb =_bged .GetByte (_dcdc -_bged .RowStride +_bdac -1);
|
|
_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_ccbd |=_cdece <<7;};if _bdac < _agca -1{if _cdece ,_ffeb =_bged .GetByte (_dcdc -_bged .RowStride +_bdac +1);
|
|
_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_ccbd |=_cdece >>7;};};if _bdac > 0{if _edcba ,_ffeb =_bged .GetByte (_dcdc +_bdac -1);_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\u006a\u0020\u003e \u0030");
|
|
};_ccbd |=_edcba <<7;};_ccbd &=_ggcd ;if _ccbd ==0||^_ccbd ==0{if _ffeb =_bged .SetByte (_dcdc +_bdac ,_ccbd );_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_bbfd =_ccbd ;
|
|
_ccbd =(_ccbd |(_ccbd >>1)|(_ccbd <<1))&_ggcd ;if (_ccbd ^_bbfd )==0{if _ffeb =_bged .SetByte (_dcdc +_bdac ,_ccbd );_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
|
|
};break ;};};};};for _afcca =_acab -1;_afcca >=0;_afcca --{_dcdc =_afcca *_bged .RowStride ;_bfdf =_afcca *_aaabd .RowStride ;for _bdac =_agca -1;_bdac >=0;_bdac --{if _ccbd ,_ffeb =_bged .GetByte (_dcdc +_bdac );_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
|
|
};if _ggcd ,_ffeb =_aaabd .GetByte (_bfdf +_bdac );_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _afcca < _acab -1{if _fecc ,_ffeb =_bged .GetByte (_dcdc +_bged .RowStride +_bdac );
|
|
_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_ccbd |=_fecc |(_fecc <<1)|_fecc >>1;if _bdac > 0{if _cdece ,_ffeb =_bged .GetByte (_dcdc +_bged .RowStride +_bdac -1);
|
|
_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\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");};_ccbd |=_cdece <<7;};if _bdac < _agca -1{if _cdece ,_ffeb =_bged .GetByte (_dcdc +_bged .RowStride +_bdac +1);
|
|
_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\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");
|
|
};_ccbd |=_cdece >>7;};};if _bdac < _agca -1{if _bbcg ,_ffeb =_bged .GetByte (_dcdc +_bdac +1);_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\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");
|
|
};_ccbd |=_bbcg >>7;};_ccbd &=_ggcd ;if _ccbd ==0||(^_ccbd )==0{if _ffeb =_bged .SetByte (_dcdc +_bdac ,_ccbd );_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_bbfd =_ccbd ;
|
|
_ccbd =(_ccbd |(_ccbd >>1)|(_ccbd <<1))&_ggcd ;if (_ccbd ^_bbfd )==0{if _ffeb =_bged .SetByte (_dcdc +_bdac ,_ccbd );_ffeb !=nil {return _c .Wrap (_ffeb ,_agea ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
|
|
};break ;};};};};return nil ;};func _ebag (_dfgf ,_afcc *Bitmap ,_cff *Selection )(*Bitmap ,error ){const _cage ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _dfcda ,_gbfbb int ;if _afcc ==nil {return nil ,_c .Error (_cage ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
|
|
};if _cff ==nil {return nil ,_c .Error (_cage ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_dfcda =_cff .Width ;_gbfbb =_cff .Height ;if _dfcda ==0||_gbfbb ==0{return nil ,_c .Error (_cage ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
|
|
};if _dfgf ==nil {return _afcc .createTemplate (),nil ;};if _cagaf :=_dfgf .resizeImageData (_afcc );_cagaf !=nil {return nil ,_cagaf ;};return _dfgf ,nil ;};func (_fcd *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _fcd .Copy (),nil ;
|
|
};_gae ,_gef :=_fcd .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _gef !=nil {return nil ,_c .Wrap (_gef ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _gae ,nil ;};func (_gffea Points )XSorter ()func (_ggbf ,_faceb int )bool {return func (_gdde ,_acgf int )bool {return _gffea [_gdde ].X < _gffea [_acgf ].X };
|
|
};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func TstDSymbol (t *_b .T ,scale ...int )*Bitmap {_bffc ,_gfcfa :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_f .NoError (t ,_gfcfa );return TstGetScaledSymbol (t ,_bffc ,scale ...);
|
|
};func _eca (_ced int )int {if _ced < 0{return -_ced ;};return _ced ;};type Component int ;const _fgad =5000;func (_gcbb *Bitmaps )SortByHeight (){_fbaf :=(*byHeight )(_gcbb );_cd .Sort (_fbaf )};func (_eaaa Points )YSorter ()func (_bccf ,_acfg int )bool {return func (_gebb ,_fabe int )bool {return _eaaa [_gebb ].Y < _eaaa [_fabe ].Y };
|
|
};func (_eec *Bitmap )ToImage ()_da .Image {_facb ,_bge :=_gf .NewImage (_eec .Width ,_eec .Height ,1,1,_eec .Data ,nil ,nil );if _bge !=nil {_gb .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",_bge );
|
|
};return _facb ;};func _ggcb (_daff ,_caad *Bitmap ,_dcee ,_ggede int )(*Bitmap ,error ){const _dgea ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _caad ==nil {return nil ,_c .Error (_dgea ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
|
|
};if _dcee < 1&&_ggede < 1{return nil ,_c .Error (_dgea ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _dcee ==1&&_ggede ==1{return _caad .Copy (),nil ;};if _dcee ==1||_ggede ==1{var _bfag error ;
|
|
_babff :=SelCreateBrick (_ggede ,_dcee ,_ggede /2,_dcee /2,SelHit );_daff ,_bfag =_eccb (_daff ,_caad ,_babff );if _bfag !=nil {return nil ,_c .Wrap (_bfag ,_dgea ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _daff ,nil ;};_bbde :=SelCreateBrick (1,_dcee ,0,_dcee /2,SelHit );_gagc :=SelCreateBrick (_ggede ,1,_ggede /2,0,SelHit );_fecf ,_cbega :=_cbc (nil ,_caad ,_bbde );if _cbega !=nil {return nil ,_c .Wrap (_cbega ,_dgea ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};_daff ,_cbega =_cbc (_daff ,_fecf ,_gagc );if _cbega !=nil {return nil ,_c .Wrap (_cbega ,_dgea ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_cbega =_edbg (_fecf ,_daff ,_bbde );if _cbega !=nil {return nil ,_c .Wrap (_cbega ,_dgea ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};_ ,_cbega =_edbg (_daff ,_fecf ,_gagc );if _cbega !=nil {return nil ,_c .Wrap (_cbega ,_dgea ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _daff ,nil ;};func _bfgf (_gcdc ,_acf int )int {if _gcdc < _acf {return _gcdc ;};return _acf ;
|
|
};func (_gcb *Bitmap )Equivalent (s *Bitmap )bool {return _gcb .equivalent (s )};func (_cdca *ClassedPoints )Len ()int {return _cdca .IntSlice .Size ()};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;
|
|
MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_fgcc *Bitmaps )AddBox (box *_da .Rectangle ){_fgcc .Boxes =append (_fgcc .Boxes ,box )};func (_facae *Boxes )selectWithIndicator (_dbccb *_d .NumSlice )(_afef *Boxes ,_debca error ){const _dggd ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _facae ==nil {return nil ,_c .Error (_dggd ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _dbccb ==nil {return nil ,_c .Error (_dggd ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if len (*_dbccb )!=len (*_facae ){return nil ,_c .Error (_dggd ,"\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 _eecb ,_aadd int ;for _ddda :=0;_ddda < len (*_dbccb );_ddda ++{if _eecb ,_debca =_dbccb .GetInt (_ddda );_debca !=nil {return nil ,_c .Wrap (_debca ,_dggd ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _eecb ==1{_aadd ++;
|
|
};};if _aadd ==len (*_facae ){return _facae ,nil ;};_gddf :=Boxes {};for _gge :=0;_gge < len (*_dbccb );_gge ++{_eecb =int ((*_dbccb )[_gge ]);if _eecb ==0{continue ;};_gddf =append (_gddf ,(*_facae )[_gge ]);};_afef =&_gddf ;return _afef ,nil ;};func _fbbb (_aeg ,_daeeb *Bitmap ,_bcfg ,_egff ,_acd ,_aab ,_caga ,_caac ,_bedd ,_dbcec int ,_aaac CombinationOperator ,_cgcb int )error {var _daea int ;
|
|
_ddfdf :=func (){_daea ++;_acd +=_daeeb .RowStride ;_aab +=_aeg .RowStride ;_caga +=_aeg .RowStride };for _daea =_bcfg ;_daea < _egff ;_ddfdf (){var _cda uint16 ;_abf :=_acd ;for _aadec :=_aab ;_aadec <=_caga ;_aadec ++{_ecad ,_feab :=_daeeb .GetByte (_abf );
|
|
if _feab !=nil {return _feab ;};_fda ,_feab :=_aeg .GetByte (_aadec );if _feab !=nil {return _feab ;};_cda =(_cda |(uint16 (_fda )&0xff))<<uint (_dbcec );_fda =byte (_cda >>8);if _feab =_daeeb .SetByte (_abf ,_dda (_ecad ,_fda ,_aaac ));_feab !=nil {return _feab ;
|
|
};_abf ++;_cda <<=uint (_bedd );if _aadec ==_caga {_fda =byte (_cda >>(8-uint8 (_dbcec )));if _cgcb !=0{_fda =_fcfa (uint (8+_caac ),_fda );};_ecad ,_feab =_daeeb .GetByte (_abf );if _feab !=nil {return _feab ;};if _feab =_daeeb .SetByte (_abf ,_dda (_ecad ,_fda ,_aaac ));
|
|
_feab !=nil {return _feab ;};};};};return nil ;};func (_eacdf *byHeight )Len ()int {return len (_eacdf .Values )};type shift int ;func (_addde Points )Size ()int {return len (_addde )};func _baaf (_gdb ,_ea *Bitmap )(_ecc error ){const _bc ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";
|
|
_bce :=_ea .RowStride ;_bf :=_gdb .RowStride ;_acb :=_ea .RowStride *4-_gdb .RowStride ;var (_ag ,_ga byte ;_gbg uint32 ;_gff ,_eb ,_gcg ,_db ,_bb ,_af ,_fd int ;);for _gcg =0;_gcg < _ea .Height ;_gcg ++{_gff =_gcg *_bce ;_eb =4*_gcg *_bf ;for _db =0;_db < _bce ;
|
|
_db ++{_ag =_ea .Data [_gff +_db ];_gbg =_fgga [_ag ];_af =_eb +_db *4;if _acb !=0&&(_db +1)*4> _gdb .RowStride {for _bb =_acb ;_bb > 0;_bb --{_ga =byte ((_gbg >>uint (_bb *8))&0xff);_fd =_af +(_acb -_bb );if _ecc =_gdb .SetByte (_fd ,_ga );_ecc !=nil {return _c .Wrapf (_ecc ,_bc ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_bb );
|
|
};};}else if _ecc =_gdb .setFourBytes (_af ,_gbg );_ecc !=nil {return _c .Wrap (_ecc ,_bc ,"");};if _ecc =_gdb .setFourBytes (_eb +_db *4,_fgga [_ea .Data [_gff +_db ]]);_ecc !=nil {return _c .Wrap (_ecc ,_bc ,"");};};for _bb =1;_bb < 4;_bb ++{for _db =0;
|
|
_db < _bf ;_db ++{if _ecc =_gdb .SetByte (_eb +_bb *_bf +_db ,_gdb .Data [_eb +_db ]);_ecc !=nil {return _c .Wrapf (_ecc ,_bc ,"\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",_bb ,_db );
|
|
};};};};return nil ;};func (_fbef Points )GetIntY (i int )(int ,error ){if i >=len (_fbef ){return 0,_c .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 (_fbef [i ].Y ),nil ;};func (_agd *Bitmap )setAll ()error {_afba :=_gbcec (_agd ,0,0,_agd .Width ,_agd .Height ,PixSet ,nil ,0,0);if _afba !=nil {return _c .Wrap (_afba ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func (_bfdb *Boxes )makeSizeIndicator (_dab ,_ecbfg int ,_bebb LocationFilter ,_dddd SizeComparison )*_d .NumSlice {_eba :=&_d .NumSlice {};
|
|
var _cae ,_cbfg ,_gdf int ;for _ ,_gaf :=range *_bfdb {_cae =0;_cbfg ,_gdf =_gaf .Dx (),_gaf .Dy ();switch _bebb {case LocSelectWidth :if (_dddd ==SizeSelectIfLT &&_cbfg < _dab )||(_dddd ==SizeSelectIfGT &&_cbfg > _dab )||(_dddd ==SizeSelectIfLTE &&_cbfg <=_dab )||(_dddd ==SizeSelectIfGTE &&_cbfg >=_dab ){_cae =1;
|
|
};case LocSelectHeight :if (_dddd ==SizeSelectIfLT &&_gdf < _ecbfg )||(_dddd ==SizeSelectIfGT &&_gdf > _ecbfg )||(_dddd ==SizeSelectIfLTE &&_gdf <=_ecbfg )||(_dddd ==SizeSelectIfGTE &&_gdf >=_ecbfg ){_cae =1;};case LocSelectIfEither :if (_dddd ==SizeSelectIfLT &&(_gdf < _ecbfg ||_cbfg < _dab ))||(_dddd ==SizeSelectIfGT &&(_gdf > _ecbfg ||_cbfg > _dab ))||(_dddd ==SizeSelectIfLTE &&(_gdf <=_ecbfg ||_cbfg <=_dab ))||(_dddd ==SizeSelectIfGTE &&(_gdf >=_ecbfg ||_cbfg >=_dab )){_cae =1;
|
|
};case LocSelectIfBoth :if (_dddd ==SizeSelectIfLT &&(_gdf < _ecbfg &&_cbfg < _dab ))||(_dddd ==SizeSelectIfGT &&(_gdf > _ecbfg &&_cbfg > _dab ))||(_dddd ==SizeSelectIfLTE &&(_gdf <=_ecbfg &&_cbfg <=_dab ))||(_dddd ==SizeSelectIfGTE &&(_gdf >=_ecbfg &&_cbfg >=_dab )){_cae =1;
|
|
};};_eba .AddInt (_cae );};return _eba ;};func _fcg (_ccf *Bitmap ,_daa *Bitmap ,_ffa int )(_caa error ){const _ffaf ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _ffa {case 2:_caa =_e (_ccf ,_daa );
|
|
case 4:_caa =_baaf (_ccf ,_daa );case 8:_caa =_bfd (_ccf ,_daa );default:return _c .Error (_ffaf ,"\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 _caa !=nil {_caa =_c .Wrap (_caa ,_ffaf ,"");};return _caa ;};func (_eadd *Bitmap )thresholdPixelSum (_fafa int )bool {var (_bad int ;_eccc uint8 ;_afeb byte ;_bfb int ;);_fdgf :=_eadd .RowStride ;_cfaa :=uint (_eadd .Width &0x07);if _cfaa !=0{_eccc =uint8 ((0xff<<(8-_cfaa ))&0xff);
|
|
_fdgf --;};for _gaac :=0;_gaac < _eadd .Height ;_gaac ++{for _bfb =0;_bfb < _fdgf ;_bfb ++{_afeb =_eadd .Data [_gaac *_eadd .RowStride +_bfb ];_bad +=int (_ebc [_afeb ]);};if _cfaa !=0{_afeb =_eadd .Data [_gaac *_eadd .RowStride +_bfb ]&_eccc ;_bad +=int (_ebc [_afeb ]);
|
|
};if _bad > _fafa {return true ;};};return false ;};const (Vanilla Color =iota ;Chocolate ;);func (_bbca *Bitmap )setFourBytes (_dgcf int ,_eaa uint32 )error {if _dgcf +3> len (_bbca .Data )-1{return _c .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",_dgcf );
|
|
};_bbca .Data [_dgcf ]=byte ((_eaa &0xff000000)>>24);_bbca .Data [_dgcf +1]=byte ((_eaa &0xff0000)>>16);_bbca .Data [_dgcf +2]=byte ((_eaa &0xff00)>>8);_bbca .Data [_dgcf +3]=byte (_eaa &0xff);return nil ;};func New (width ,height int )*Bitmap {_efgc :=_aadb (width ,height );
|
|
_efgc .Data =make ([]byte ,height *_efgc .RowStride );return _efgc ;};func TstISymbol (t *_b .T ,scale ...int )*Bitmap {_cgcg ,_dcda :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_f .NoError (t ,_dcda );return TstGetScaledSymbol (t ,_cgcg ,scale ...);
|
|
};func (_dbce *Bitmap )setEightBytes (_agcc int ,_dacg uint64 )error {_gaae :=_dbce .RowStride -(_agcc %_dbce .RowStride );if _dbce .RowStride !=_dbce .Width >>3{_gaae --;};if _gaae >=8{return _dbce .setEightFullBytes (_agcc ,_dacg );};return _dbce .setEightPartlyBytes (_agcc ,_gaae ,_dacg );
|
|
};type Points []Point ;func (_ddaad CombinationOperator )String ()string {var _acbbf string ;switch _ddaad {case CmbOpOr :_acbbf ="\u004f\u0052";case CmbOpAnd :_acbbf ="\u0041\u004e\u0044";case CmbOpXor :_acbbf ="\u0058\u004f\u0052";case CmbOpXNor :_acbbf ="\u0058\u004e\u004f\u0052";
|
|
case CmbOpReplace :_acbbf ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_acbbf ="\u004e\u004f\u0054";};return _acbbf ;};func (_cabb Points )GetGeometry (i int )(_gbfg ,_bcdd float32 ,_eacd error ){if i > len (_cabb )-1{return 0,0,_c .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 );
|
|
};_cafac :=_cabb [i ];return _cafac .X ,_cafac .Y ,nil ;};func (_cgb *Bitmap )Copy ()*Bitmap {_ded :=make ([]byte ,len (_cgb .Data ));copy (_ded ,_cgb .Data );return &Bitmap {Width :_cgb .Width ,Height :_cgb .Height ,RowStride :_cgb .RowStride ,Data :_ded ,Color :_cgb .Color ,Text :_cgb .Text ,BitmapNumber :_cgb .BitmapNumber ,Special :_cgb .Special };
|
|
};func (_ddg *Bitmap )SizesEqual (s *Bitmap )bool {if _ddg ==s {return true ;};if _ddg .Width !=s .Width ||_ddg .Height !=s .Height {return false ;};return true ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _debc ,_gggc int ;
|
|
_ebbc :=src .RowStride -1;if x < 0{_gggc =-x ;x =0;}else if x +src .Width > dst .Width {_ebbc -=src .Width +x -dst .Width ;};if y < 0{_debc =-y ;y =0;_gggc +=src .RowStride ;_ebbc +=src .RowStride ;}else if y +src .Height > dst .Height {_debc =src .Height +y -dst .Height ;
|
|
};var (_eed int ;_abca error ;);_bdgd :=x &0x07;_edg :=8-_bdgd ;_bfgga :=src .Width &0x07;_gda :=_edg -_bfgga ;_afeg :=_edg &0x07!=0;_fec :=src .Width <=((_ebbc -_gggc )<<3)+_edg ;_beaa :=dst .GetByteIndex (x ,y );_beg :=_debc +dst .Height ;if src .Height > _beg {_eed =_beg ;
|
|
}else {_eed =src .Height ;};switch {case !_afeg :_abca =_bffa (src ,dst ,_debc ,_eed ,_beaa ,_gggc ,_ebbc ,op );case _fec :_abca =_dfgb (src ,dst ,_debc ,_eed ,_beaa ,_gggc ,_ebbc ,_gda ,_bdgd ,_edg ,op );default:_abca =_fbbb (src ,dst ,_debc ,_eed ,_beaa ,_gggc ,_ebbc ,_gda ,_bdgd ,_edg ,op ,_bfgga );
|
|
};return _abca ;};func _fcfa (_fgfa uint ,_faaa byte )byte {return _faaa >>_fgfa <<_fgfa };func (_dacd *Bitmap )connComponentsBitmapsBB (_dbdd *Bitmaps ,_aaff int )(_ddbg *Boxes ,_babfc error ){const _afgc ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";
|
|
if _aaff !=4&&_aaff !=8{return nil ,_c .Error (_afgc ,"\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 _dbdd ==nil {return nil ,_c .Error (_afgc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
|
|
};if len (_dbdd .Values )> 0{return nil ,_c .Error (_afgc ,"\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 _dacd .Zero (){return &Boxes {},nil ;};
|
|
var (_def ,_bdgg ,_fgbg ,_bfec *Bitmap ;);_dacd .setPadBits (0);if _def ,_babfc =_gcag (nil ,_dacd );_babfc !=nil {return nil ,_c .Wrap (_babfc ,_afgc ,"\u0062\u006d\u0031");};if _bdgg ,_babfc =_gcag (nil ,_dacd );_babfc !=nil {return nil ,_c .Wrap (_babfc ,_afgc ,"\u0062\u006d\u0032");
|
|
};_gagg :=&_d .Stack {};_gagg .Aux =&_d .Stack {};_ddbg =&Boxes {};var (_fdba ,_bbg int ;_ccbbb _da .Point ;_bga bool ;_eeac *_da .Rectangle ;);for {if _ccbbb ,_bga ,_babfc =_def .nextOnPixel (_fdba ,_bbg );_babfc !=nil {return nil ,_c .Wrap (_babfc ,_afgc ,"");
|
|
};if !_bga {break ;};if _eeac ,_babfc =_eefd (_def ,_gagg ,_ccbbb .X ,_ccbbb .Y ,_aaff );_babfc !=nil {return nil ,_c .Wrap (_babfc ,_afgc ,"");};if _babfc =_ddbg .Add (_eeac );_babfc !=nil {return nil ,_c .Wrap (_babfc ,_afgc ,"");};if _fgbg ,_babfc =_def .clipRectangle (_eeac ,nil );
|
|
_babfc !=nil {return nil ,_c .Wrap (_babfc ,_afgc ,"\u0062\u006d\u0033");};if _bfec ,_babfc =_bdgg .clipRectangle (_eeac ,nil );_babfc !=nil {return nil ,_c .Wrap (_babfc ,_afgc ,"\u0062\u006d\u0034");};if _ ,_babfc =_gfdg (_fgbg ,_fgbg ,_bfec );_babfc !=nil {return nil ,_c .Wrap (_babfc ,_afgc ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");
|
|
};if _babfc =_bdgg .RasterOperation (_eeac .Min .X ,_eeac .Min .Y ,_eeac .Dx (),_eeac .Dy (),PixSrcXorDst ,_fgbg ,0,0);_babfc !=nil {return nil ,_c .Wrap (_babfc ,_afgc ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");
|
|
};_dbdd .AddBitmap (_fgbg );_fdba =_ccbbb .X ;_bbg =_ccbbb .Y ;};_dbdd .Boxes =*_ddbg ;return _ddbg ,nil ;};func TstASymbol (t *_b .T )*Bitmap {t .Helper ();_bdda :=New (6,6);_f .NoError (t ,_bdda .SetPixel (1,0,1));_f .NoError (t ,_bdda .SetPixel (2,0,1));
|
|
_f .NoError (t ,_bdda .SetPixel (3,0,1));_f .NoError (t ,_bdda .SetPixel (4,0,1));_f .NoError (t ,_bdda .SetPixel (5,1,1));_f .NoError (t ,_bdda .SetPixel (1,2,1));_f .NoError (t ,_bdda .SetPixel (2,2,1));_f .NoError (t ,_bdda .SetPixel (3,2,1));_f .NoError (t ,_bdda .SetPixel (4,2,1));
|
|
_f .NoError (t ,_bdda .SetPixel (5,2,1));_f .NoError (t ,_bdda .SetPixel (0,3,1));_f .NoError (t ,_bdda .SetPixel (5,3,1));_f .NoError (t ,_bdda .SetPixel (0,4,1));_f .NoError (t ,_bdda .SetPixel (5,4,1));_f .NoError (t ,_bdda .SetPixel (1,5,1));_f .NoError (t ,_bdda .SetPixel (2,5,1));
|
|
_f .NoError (t ,_bdda .SetPixel (3,5,1));_f .NoError (t ,_bdda .SetPixel (4,5,1));_f .NoError (t ,_bdda .SetPixel (5,5,1));return _bdda ;};func _bfd (_eeg ,_bd *Bitmap )(_bcd error ){const _gdg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";
|
|
_age :=_bd .RowStride ;_ed :=_eeg .RowStride ;var _bda ,_ca ,_df ,_bfa ,_dgb int ;for _df =0;_df < _bd .Height ;_df ++{_bda =_df *_age ;_ca =8*_df *_ed ;for _bfa =0;_bfa < _age ;_bfa ++{if _bcd =_eeg .setEightBytes (_ca +_bfa *8,_dgbf [_bd .Data [_bda +_bfa ]]);
|
|
_bcd !=nil {return _c .Wrap (_bcd ,_gdg ,"");};};for _dgb =1;_dgb < 8;_dgb ++{for _bfa =0;_bfa < _ed ;_bfa ++{if _bcd =_eeg .SetByte (_ca +_dgb *_ed +_bfa ,_eeg .Data [_ca +_bfa ]);_bcd !=nil {return _c .Wrap (_bcd ,_gdg ,"");};};};};return nil ;};type SizeSelection int ;
|
|
func _dfe (_fdf ,_gbf *Bitmap ,_aff int ,_acc []byte ,_edc int )(_bbf error ){const _dgba ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_gea ,_cb ,_dbc ,_gfc ,_ccb ,_bbfa ,_ecb ,_bcee int ;
|
|
_cbd ,_dadf uint32 ;_aa ,_fab byte ;_aac uint16 ;);_dd :=make ([]byte ,4);_gbbf :=make ([]byte ,4);for _dbc =0;_dbc < _fdf .Height -1;_dbc ,_gfc =_dbc +2,_gfc +1{_gea =_dbc *_fdf .RowStride ;_cb =_gfc *_gbf .RowStride ;for _ccb ,_bbfa =0,0;_ccb < _edc ;
|
|
_ccb ,_bbfa =_ccb +4,_bbfa +1{for _ecb =0;_ecb < 4;_ecb ++{_bcee =_gea +_ccb +_ecb ;if _bcee <=len (_fdf .Data )-1&&_bcee < _gea +_fdf .RowStride {_dd [_ecb ]=_fdf .Data [_bcee ];}else {_dd [_ecb ]=0x00;};_bcee =_gea +_fdf .RowStride +_ccb +_ecb ;if _bcee <=len (_fdf .Data )-1&&_bcee < _gea +(2*_fdf .RowStride ){_gbbf [_ecb ]=_fdf .Data [_bcee ];
|
|
}else {_gbbf [_ecb ]=0x00;};};_cbd =_de .BigEndian .Uint32 (_dd );_dadf =_de .BigEndian .Uint32 (_gbbf );_dadf |=_cbd ;_dadf |=_dadf <<1;_dadf &=0xaaaaaaaa;_cbd =_dadf |(_dadf <<7);_aa =byte (_cbd >>24);_fab =byte ((_cbd >>8)&0xff);_bcee =_cb +_bbfa ;if _bcee +1==len (_gbf .Data )-1||_bcee +1>=_cb +_gbf .RowStride {_gbf .Data [_bcee ]=_acc [_aa ];
|
|
}else {_aac =(uint16 (_acc [_aa ])<<8)|uint16 (_acc [_fab ]);if _bbf =_gbf .setTwoBytes (_bcee ,_aac );_bbf !=nil {return _c .Wrapf (_bbf ,_dgba ,"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",_bcee );
|
|
};_bbfa ++;};};};return nil ;};func TstPSymbol (t *_b .T )*Bitmap {t .Helper ();_dfdb :=New (5,8);_f .NoError (t ,_dfdb .SetPixel (0,0,1));_f .NoError (t ,_dfdb .SetPixel (1,0,1));_f .NoError (t ,_dfdb .SetPixel (2,0,1));_f .NoError (t ,_dfdb .SetPixel (3,0,1));
|
|
_f .NoError (t ,_dfdb .SetPixel (4,1,1));_f .NoError (t ,_dfdb .SetPixel (0,1,1));_f .NoError (t ,_dfdb .SetPixel (4,2,1));_f .NoError (t ,_dfdb .SetPixel (0,2,1));_f .NoError (t ,_dfdb .SetPixel (4,3,1));_f .NoError (t ,_dfdb .SetPixel (0,3,1));_f .NoError (t ,_dfdb .SetPixel (0,4,1));
|
|
_f .NoError (t ,_dfdb .SetPixel (1,4,1));_f .NoError (t ,_dfdb .SetPixel (2,4,1));_f .NoError (t ,_dfdb .SetPixel (3,4,1));_f .NoError (t ,_dfdb .SetPixel (0,5,1));_f .NoError (t ,_dfdb .SetPixel (0,6,1));_f .NoError (t ,_dfdb .SetPixel (0,7,1));return _dfdb ;
|
|
};func (_dfbb *Bitmap )setBit (_gege int ){_dfbb .Data [(_gege >>3)]|=0x80>>uint (_gege &7)};func (_fefba *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_eegg *Bitmaps ,_abec error ){const _cddcb ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
|
|
if _fefba ==nil {return nil ,_c .Error (_cddcb ,"\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 ,_c .Errorf (_cddcb ,"\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 ,_c .Errorf (_cddcb ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
|
|
};_cgbe ,_abec :=_fefba .makeSizeIndicator (width ,height ,tp ,relation );if _abec !=nil {return nil ,_c .Wrap (_abec ,_cddcb ,"");};_eegg ,_abec =_fefba .selectByIndicator (_cgbe );if _abec !=nil {return nil ,_c .Wrap (_abec ,_cddcb ,"");};return _eegg ,nil ;
|
|
};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_fedc bool ,_dcdga error ){const _dade ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_cggb ,_beef :=p1 .Width ,p1 .Height ;
|
|
_cfd ,_dfba :=p3 .Width ,p3 .Height ;if _d .Abs (_cggb -_cfd )> maxDiffW {return false ,nil ;};if _d .Abs (_beef -_dfba )> maxDiffH {return false ,nil ;};_dfcg :=int (float32 (area1 )*(1.0-rank )+0.5);_effe :=int (float32 (area3 )*(1.0-rank )+0.5);var _cga ,_fbdg int ;
|
|
if delX >=0{_cga =int (delX +0.5);}else {_cga =int (delX -0.5);};if delY >=0{_fbdg =int (delY +0.5);}else {_fbdg =int (delY -0.5);};_cafd :=p1 .CreateTemplate ();if _dcdga =_cafd .RasterOperation (0,0,_cggb ,_beef ,PixSrc ,p1 ,0,0);_dcdga !=nil {return false ,_c .Wrap (_dcdga ,_dade ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");
|
|
};if _dcdga =_cafd .RasterOperation (_cga ,_fbdg ,_cggb ,_beef ,PixNotSrcAndDst ,p4 ,0,0);_dcdga !=nil {return false ,_c .Wrap (_dcdga ,_dade ,"\u0074 \u0026\u0020\u0021\u0070\u0034");};_fedc ,_dcdga =_cafd .ThresholdPixelSum (_dfcg ,tab8 );if _dcdga !=nil {return false ,_c .Wrap (_dcdga ,_dade ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");
|
|
};if _fedc {return false ,nil ;};if _dcdga =_cafd .RasterOperation (_cga ,_fbdg ,_cfd ,_dfba ,PixSrc ,p3 ,0,0);_dcdga !=nil {return false ,_c .Wrap (_dcdga ,_dade ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _dcdga =_cafd .RasterOperation (0,0,_cfd ,_dfba ,PixNotSrcAndDst ,p2 ,0,0);
|
|
_dcdga !=nil {return false ,_c .Wrap (_dcdga ,_dade ,"\u0074 \u0026\u0020\u0021\u0070\u0032");};_fedc ,_dcdga =_cafd .ThresholdPixelSum (_effe ,tab8 );if _dcdga !=nil {return false ,_c .Wrap (_dcdga ,_dade ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");
|
|
};return !_fedc ,nil ;};func MakePixelSumTab8 ()[]int {return _gdca ()};func (_fddf *ClassedPoints )SortByY (){_fddf ._efea =_fddf .ySortFunction ();_cd .Sort (_fddf )};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _ceb ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
|
|
_dbaf ,_aeggf :=p1 .Width ,p1 .Height ;_dadbg ,_fdbf :=p3 .Width ,p3 .Height ;if _d .Abs (_dbaf -_dadbg )> maxDiffW {return false ,nil ;};if _d .Abs (_aeggf -_fdbf )> maxDiffH {return false ,nil ;};_egfg :=int (delX +_d .Sign (delX )*0.5);_dged :=int (delY +_d .Sign (delY )*0.5);
|
|
var _ddccc error ;_agdfe :=p1 .CreateTemplate ();if _ddccc =_agdfe .RasterOperation (0,0,_dbaf ,_aeggf ,PixSrc ,p1 ,0,0);_ddccc !=nil {return false ,_c .Wrap (_ddccc ,_ceb ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ddccc =_agdfe .RasterOperation (_egfg ,_dged ,_dbaf ,_aeggf ,PixNotSrcAndDst ,p4 ,0,0);
|
|
_ddccc !=nil {return false ,_c .Wrap (_ddccc ,_ceb ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _agdfe .Zero (){return false ,nil ;};if _ddccc =_agdfe .RasterOperation (_egfg ,_dged ,_dadbg ,_fdbf ,PixSrc ,p3 ,0,0);_ddccc !=nil {return false ,_c .Wrap (_ddccc ,_ceb ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");
|
|
};if _ddccc =_agdfe .RasterOperation (0,0,_dadbg ,_fdbf ,PixNotSrcAndDst ,p2 ,0,0);_ddccc !=nil {return false ,_c .Wrap (_ddccc ,_ceb ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _agdfe .Zero (),nil ;};func _bcec (_fbdc ,_bgeb *Bitmap ,_egfgg ,_beee int )(*Bitmap ,error ){const _abfc ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";
|
|
if _bgeb ==nil {return nil ,_c .Error (_abfc ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _egfgg < 1||_beee < 1{return nil ,_c .Error (_abfc ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
|
|
};if _egfgg ==1&&_beee ==1{return _gcag (_fbdc ,_bgeb );};if MorphBC ==SymmetricMorphBC {_aedbg ,_abed :=_efbc (_fbdc ,_bgeb ,_egfgg ,_beee );if _abed !=nil {return nil ,_c .Wrap (_abed ,_abfc ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");
|
|
};return _aedbg ,nil ;};_bcda :=_ddc (_egfgg /2,_beee /2);_egdbe :=8*((_bcda +7)/8);_beeaf ,_addf :=_bgeb .AddBorder (_egdbe ,0);if _addf !=nil {return nil ,_c .Wrapf (_addf ,_abfc ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_egdbe );
|
|
};var _fgfb ,_fbcg *Bitmap ;if _egfgg ==1||_beee ==1{_gbec :=SelCreateBrick (_beee ,_egfgg ,_beee /2,_egfgg /2,SelHit );_fgfb ,_addf =_eagc (nil ,_beeaf ,_gbec );if _addf !=nil {return nil ,_c .Wrap (_addf ,_abfc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};}else {_caba :=SelCreateBrick (1,_egfgg ,0,_egfgg /2,SelHit );_aggd ,_efcfe :=_edbg (nil ,_beeaf ,_caba );if _efcfe !=nil {return nil ,_c .Wrap (_efcfe ,_abfc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");
|
|
};_gecdd :=SelCreateBrick (_beee ,1,_beee /2,0,SelHit );_fgfb ,_efcfe =_edbg (nil ,_aggd ,_gecdd );if _efcfe !=nil {return nil ,_c .Wrap (_efcfe ,_abfc ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};if _ ,_efcfe =_cbc (_aggd ,_fgfb ,_caba );_efcfe !=nil {return nil ,_c .Wrap (_efcfe ,_abfc ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_efcfe =_cbc (_fgfb ,_aggd ,_gecdd );_efcfe !=nil {return nil ,_c .Wrap (_efcfe ,_abfc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
|
|
};};if _fbcg ,_addf =_fgfb .RemoveBorder (_egdbe );_addf !=nil {return nil ,_c .Wrap (_addf ,_abfc ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _fbdc ==nil {return _fbcg ,nil ;};if _ ,_addf =_gcag (_fbdc ,_fbcg );_addf !=nil {return nil ,_addf ;};return _fbdc ,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 _gbed (_afdd *Bitmap ,_gaeb ...MorphProcess )(_afeba *Bitmap ,_bbgdg error ){const _cbgb ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";
|
|
if _afdd ==nil {return nil ,_c .Error (_cbgb ,"\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 (_gaeb )==0{return nil ,_c .Error (_cbgb ,"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 _bbgdg =_dffe (_gaeb ...);
|
|
_bbgdg !=nil {return nil ,_c .Wrap (_bbgdg ,_cbgb ,"");};var _fggad ,_acdd ,_edfd int ;_afeba =_afdd .Copy ();for _ ,_begc :=range _gaeb {switch _begc .Operation {case MopDilation :_fggad ,_acdd =_begc .getWidthHeight ();_afeba ,_bbgdg =DilateBrick (nil ,_afeba ,_fggad ,_acdd );
|
|
if _bbgdg !=nil {return nil ,_c .Wrap (_bbgdg ,_cbgb ,"");};case MopErosion :_fggad ,_acdd =_begc .getWidthHeight ();_afeba ,_bbgdg =_abee (nil ,_afeba ,_fggad ,_acdd );if _bbgdg !=nil {return nil ,_c .Wrap (_bbgdg ,_cbgb ,"");};case MopOpening :_fggad ,_acdd =_begc .getWidthHeight ();
|
|
_afeba ,_bbgdg =_ggcb (nil ,_afeba ,_fggad ,_acdd );if _bbgdg !=nil {return nil ,_c .Wrap (_bbgdg ,_cbgb ,"");};case MopClosing :_fggad ,_acdd =_begc .getWidthHeight ();_afeba ,_bbgdg =_bcec (nil ,_afeba ,_fggad ,_acdd );if _bbgdg !=nil {return nil ,_c .Wrap (_bbgdg ,_cbgb ,"");
|
|
};case MopRankBinaryReduction :_afeba ,_bbgdg =_cgca (_afeba ,_begc .Arguments ...);if _bbgdg !=nil {return nil ,_c .Wrap (_bbgdg ,_cbgb ,"");};case MopReplicativeBinaryExpansion :_afeba ,_bbgdg =_ebbcc (_afeba ,_begc .Arguments [0]);if _bbgdg !=nil {return nil ,_c .Wrap (_bbgdg ,_cbgb ,"");
|
|
};case MopAddBorder :_edfd =_begc .Arguments [0];_afeba ,_bbgdg =_afeba .AddBorder (_edfd ,0);if _bbgdg !=nil {return nil ,_c .Wrap (_bbgdg ,_cbgb ,"");};default:return nil ,_c .Error (_cbgb ,"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 _edfd > 0{_afeba ,_bbgdg =_afeba .RemoveBorder (_edfd );if _bbgdg !=nil {return nil ,_c .Wrap (_bbgdg ,_cbgb ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _afeba ,nil ;};type Color int ;func (_bfgg *Bitmap )Equals (s *Bitmap )bool {if len (_bfgg .Data )!=len (s .Data )||_bfgg .Width !=s .Width ||_bfgg .Height !=s .Height {return false ;
|
|
};for _fcf :=0;_fcf < _bfgg .Height ;_fcf ++{_eafd :=_fcf *_bfgg .RowStride ;for _dgcg :=0;_dgcg < _bfgg .RowStride ;_dgcg ++{if _bfgg .Data [_eafd +_dgcg ]!=s .Data [_eafd +_dgcg ]{return false ;};};};return true ;};func (_acfe MorphProcess )verify (_bcaac int ,_feg ,_ebga *int )error {const _egaf ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";
|
|
switch _acfe .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_acfe .Arguments )!=2{return _c .Error (_egaf ,"\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");
|
|
};_feba ,_aabf :=_acfe .getWidthHeight ();if _feba <=0||_aabf <=0{return _c .Error (_egaf ,"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 :_aece :=len (_acfe .Arguments );*_feg +=_aece ;if _aece < 1||_aece > 4{return _c .Error (_egaf ,"\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 _ffab :=0;_ffab < _aece ;_ffab ++{if _acfe .Arguments [_ffab ]< 1||_acfe .Arguments [_ffab ]> 4{return _c .Error (_egaf ,"\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 (_acfe .Arguments )==0{return _c .Error (_egaf ,"\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");
|
|
};_aecg :=_acfe .Arguments [0];if _aecg !=2&&_aecg !=4&&_aecg !=8{return _c .Error (_egaf ,"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");
|
|
};*_feg -=_acbf [_aecg /4];case MopAddBorder :if len (_acfe .Arguments )==0{return _c .Error (_egaf ,"\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");
|
|
};_dgf :=_acfe .Arguments [0];if _bcaac > 0{return _c .Error (_egaf ,"\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 _dgf < 1{return _c .Error (_egaf ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_ebga =_dgf ;};return nil ;};type Bitmaps struct{Values []*Bitmap ;
|
|
Boxes []*_da .Rectangle ;};func TstFrameBitmapData ()[]byte {return _ffca .Data };func _edbg (_daae *Bitmap ,_edefg *Bitmap ,_dbdce *Selection )(*Bitmap ,error ){var (_ecda *Bitmap ;_gecde error ;);_daae ,_gecde =_dgcda (_daae ,_edefg ,_dbdce ,&_ecda );
|
|
if _gecde !=nil {return nil ,_gecde ;};if _gecde =_daae .clearAll ();_gecde !=nil {return nil ,_gecde ;};var _abcg SelectionValue ;for _aecgd :=0;_aecgd < _dbdce .Height ;_aecgd ++{for _cefg :=0;_cefg < _dbdce .Width ;_cefg ++{_abcg =_dbdce .Data [_aecgd ][_cefg ];
|
|
if _abcg ==SelHit {if _gecde =_daae .RasterOperation (_cefg -_dbdce .Cx ,_aecgd -_dbdce .Cy ,_edefg .Width ,_edefg .Height ,PixSrcOrDst ,_ecda ,0,0);_gecde !=nil {return nil ,_gecde ;};};};};return _daae ,nil ;};func (_eada *Bitmap )Zero ()bool {_febc :=_eada .Width /8;
|
|
_dbbf :=_eada .Width &7;var _gggg byte ;if _dbbf !=0{_gggg =byte (0xff<<uint (8-_dbbf ));};var _bdcf ,_faa ,_dfcc int ;for _faa =0;_faa < _eada .Height ;_faa ++{_bdcf =_eada .RowStride *_faa ;for _dfcc =0;_dfcc < _febc ;_dfcc ,_bdcf =_dfcc +1,_bdcf +1{if _eada .Data [_bdcf ]!=0{return false ;
|
|
};};if _dbbf > 0{if _eada .Data [_bdcf ]&_gggg !=0{return false ;};};};return true ;};func _ddgf (_ccdd ,_cbba *Bitmap ,_ecee CombinationOperator )*Bitmap {_deca :=New (_ccdd .Width ,_ccdd .Height );for _cbec :=0;_cbec < len (_deca .Data );_cbec ++{_deca .Data [_cbec ]=_dda (_ccdd .Data [_cbec ],_cbba .Data [_cbec ],_ecee );
|
|
};return _deca ;};func (_bcag *Bitmap )countPixels ()int {var (_efcf int ;_cgbf uint8 ;_eab byte ;_ddf int ;);_daca :=_bcag .RowStride ;_dddf :=uint (_bcag .Width &0x07);if _dddf !=0{_cgbf =uint8 ((0xff<<(8-_dddf ))&0xff);_daca --;};for _eadg :=0;_eadg < _bcag .Height ;
|
|
_eadg ++{for _ddf =0;_ddf < _daca ;_ddf ++{_eab =_bcag .Data [_eadg *_bcag .RowStride +_ddf ];_efcf +=int (_ebc [_eab ]);};if _dddf !=0{_efcf +=int (_ebc [_bcag .Data [_eadg *_bcag .RowStride +_ddf ]&_cgbf ]);};};return _efcf ;};var _efcg =[]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 _dda (_afaa ,_gcfd byte ,_ebbb CombinationOperator )byte {switch _ebbb {case CmbOpOr :return _gcfd |_afaa ;case CmbOpAnd :return _gcfd &_afaa ;case CmbOpXor :return _gcfd ^_afaa ;case CmbOpXNor :return ^(_gcfd ^_afaa );case CmbOpNot :return ^(_gcfd );
|
|
default:return _gcfd ;};};func _afdde (_bccb *Bitmap ,_gbd ,_fccc ,_gcbc ,_edge int ,_dbad RasterOperator ,_aga *Bitmap ,_gafc ,_fcb int )error {var (_bfebb byte ;_bgda int ;_ebecf int ;_beaac ,_afae int ;_cdbf ,_aegff int ;);_aeag :=_gcbc >>3;_dfeg :=_gcbc &7;
|
|
if _dfeg > 0{_bfebb =_adfg [_dfeg ];};_bgda =_aga .RowStride *_fcb +(_gafc >>3);_ebecf =_bccb .RowStride *_fccc +(_gbd >>3);switch _dbad {case PixSrc :for _cdbf =0;_cdbf < _edge ;_cdbf ++{_beaac =_bgda +_cdbf *_aga .RowStride ;_afae =_ebecf +_cdbf *_bccb .RowStride ;
|
|
for _aegff =0;_aegff < _aeag ;_aegff ++{_bccb .Data [_afae ]=_aga .Data [_beaac ];_afae ++;_beaac ++;};if _dfeg > 0{_bccb .Data [_afae ]=_efca (_bccb .Data [_afae ],_aga .Data [_beaac ],_bfebb );};};case PixNotSrc :for _cdbf =0;_cdbf < _edge ;_cdbf ++{_beaac =_bgda +_cdbf *_aga .RowStride ;
|
|
_afae =_ebecf +_cdbf *_bccb .RowStride ;for _aegff =0;_aegff < _aeag ;_aegff ++{_bccb .Data [_afae ]=^(_aga .Data [_beaac ]);_afae ++;_beaac ++;};if _dfeg > 0{_bccb .Data [_afae ]=_efca (_bccb .Data [_afae ],^_aga .Data [_beaac ],_bfebb );};};case PixSrcOrDst :for _cdbf =0;
|
|
_cdbf < _edge ;_cdbf ++{_beaac =_bgda +_cdbf *_aga .RowStride ;_afae =_ebecf +_cdbf *_bccb .RowStride ;for _aegff =0;_aegff < _aeag ;_aegff ++{_bccb .Data [_afae ]|=_aga .Data [_beaac ];_afae ++;_beaac ++;};if _dfeg > 0{_bccb .Data [_afae ]=_efca (_bccb .Data [_afae ],_aga .Data [_beaac ]|_bccb .Data [_afae ],_bfebb );
|
|
};};case PixSrcAndDst :for _cdbf =0;_cdbf < _edge ;_cdbf ++{_beaac =_bgda +_cdbf *_aga .RowStride ;_afae =_ebecf +_cdbf *_bccb .RowStride ;for _aegff =0;_aegff < _aeag ;_aegff ++{_bccb .Data [_afae ]&=_aga .Data [_beaac ];_afae ++;_beaac ++;};if _dfeg > 0{_bccb .Data [_afae ]=_efca (_bccb .Data [_afae ],_aga .Data [_beaac ]&_bccb .Data [_afae ],_bfebb );
|
|
};};case PixSrcXorDst :for _cdbf =0;_cdbf < _edge ;_cdbf ++{_beaac =_bgda +_cdbf *_aga .RowStride ;_afae =_ebecf +_cdbf *_bccb .RowStride ;for _aegff =0;_aegff < _aeag ;_aegff ++{_bccb .Data [_afae ]^=_aga .Data [_beaac ];_afae ++;_beaac ++;};if _dfeg > 0{_bccb .Data [_afae ]=_efca (_bccb .Data [_afae ],_aga .Data [_beaac ]^_bccb .Data [_afae ],_bfebb );
|
|
};};case PixNotSrcOrDst :for _cdbf =0;_cdbf < _edge ;_cdbf ++{_beaac =_bgda +_cdbf *_aga .RowStride ;_afae =_ebecf +_cdbf *_bccb .RowStride ;for _aegff =0;_aegff < _aeag ;_aegff ++{_bccb .Data [_afae ]|=^(_aga .Data [_beaac ]);_afae ++;_beaac ++;};if _dfeg > 0{_bccb .Data [_afae ]=_efca (_bccb .Data [_afae ],^(_aga .Data [_beaac ])|_bccb .Data [_afae ],_bfebb );
|
|
};};case PixNotSrcAndDst :for _cdbf =0;_cdbf < _edge ;_cdbf ++{_beaac =_bgda +_cdbf *_aga .RowStride ;_afae =_ebecf +_cdbf *_bccb .RowStride ;for _aegff =0;_aegff < _aeag ;_aegff ++{_bccb .Data [_afae ]&=^(_aga .Data [_beaac ]);_afae ++;_beaac ++;};if _dfeg > 0{_bccb .Data [_afae ]=_efca (_bccb .Data [_afae ],^(_aga .Data [_beaac ])&_bccb .Data [_afae ],_bfebb );
|
|
};};case PixSrcOrNotDst :for _cdbf =0;_cdbf < _edge ;_cdbf ++{_beaac =_bgda +_cdbf *_aga .RowStride ;_afae =_ebecf +_cdbf *_bccb .RowStride ;for _aegff =0;_aegff < _aeag ;_aegff ++{_bccb .Data [_afae ]=_aga .Data [_beaac ]|^(_bccb .Data [_afae ]);_afae ++;
|
|
_beaac ++;};if _dfeg > 0{_bccb .Data [_afae ]=_efca (_bccb .Data [_afae ],_aga .Data [_beaac ]|^(_bccb .Data [_afae ]),_bfebb );};};case PixSrcAndNotDst :for _cdbf =0;_cdbf < _edge ;_cdbf ++{_beaac =_bgda +_cdbf *_aga .RowStride ;_afae =_ebecf +_cdbf *_bccb .RowStride ;
|
|
for _aegff =0;_aegff < _aeag ;_aegff ++{_bccb .Data [_afae ]=_aga .Data [_beaac ]&^(_bccb .Data [_afae ]);_afae ++;_beaac ++;};if _dfeg > 0{_bccb .Data [_afae ]=_efca (_bccb .Data [_afae ],_aga .Data [_beaac ]&^(_bccb .Data [_afae ]),_bfebb );};};case PixNotPixSrcOrDst :for _cdbf =0;
|
|
_cdbf < _edge ;_cdbf ++{_beaac =_bgda +_cdbf *_aga .RowStride ;_afae =_ebecf +_cdbf *_bccb .RowStride ;for _aegff =0;_aegff < _aeag ;_aegff ++{_bccb .Data [_afae ]=^(_aga .Data [_beaac ]|_bccb .Data [_afae ]);_afae ++;_beaac ++;};if _dfeg > 0{_bccb .Data [_afae ]=_efca (_bccb .Data [_afae ],^(_aga .Data [_beaac ]|_bccb .Data [_afae ]),_bfebb );
|
|
};};case PixNotPixSrcAndDst :for _cdbf =0;_cdbf < _edge ;_cdbf ++{_beaac =_bgda +_cdbf *_aga .RowStride ;_afae =_ebecf +_cdbf *_bccb .RowStride ;for _aegff =0;_aegff < _aeag ;_aegff ++{_bccb .Data [_afae ]=^(_aga .Data [_beaac ]&_bccb .Data [_afae ]);_afae ++;
|
|
_beaac ++;};if _dfeg > 0{_bccb .Data [_afae ]=_efca (_bccb .Data [_afae ],^(_aga .Data [_beaac ]&_bccb .Data [_afae ]),_bfebb );};};case PixNotPixSrcXorDst :for _cdbf =0;_cdbf < _edge ;_cdbf ++{_beaac =_bgda +_cdbf *_aga .RowStride ;_afae =_ebecf +_cdbf *_bccb .RowStride ;
|
|
for _aegff =0;_aegff < _aeag ;_aegff ++{_bccb .Data [_afae ]=^(_aga .Data [_beaac ]^_bccb .Data [_afae ]);_afae ++;_beaac ++;};if _dfeg > 0{_bccb .Data [_afae ]=_efca (_bccb .Data [_afae ],^(_aga .Data [_beaac ]^_bccb .Data [_afae ]),_bfebb );};};default:_gb .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",_dbad );
|
|
return _c .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 (_acba Points )GetIntX (i int )(int ,error ){if i >=len (_acba ){return 0,_c .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 (_acba [i ].X ),nil ;};func (_fbebf *Bitmaps )String ()string {_ecgc :=_gd .Builder {};for _ ,_bbcge :=range _fbebf .Values {_ecgc .WriteString (_bbcge .String ());_ecgc .WriteRune ('\n');};return _ecgc .String ();};func (_cgff *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _gfbc ="\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 >=_cgff .IntSlice .Size (){return 0,_c .Errorf (_gfbc ,"\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 (_cgff .XAtIndex (i )),nil ;};func (_aegb *Bitmaps )makeSizeIndicator (_egfbb ,_cdedd int ,_ccde LocationFilter ,_eecgc SizeComparison )(_ebcac *_d .NumSlice ,_debcd error ){const _agaecd ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _aegb ==nil {return nil ,_c .Error (_agaecd ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _ccde {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_agaecd ,"\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",_ccde );
|
|
};switch _eecgc {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_c .Errorf (_agaecd ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_eecgc );
|
|
};_ebcac =&_d .NumSlice {};var (_gecdg ,_acfc ,_aeeea int ;_fced *Bitmap ;);for _ ,_fced =range _aegb .Values {_gecdg =0;_acfc ,_aeeea =_fced .Width ,_fced .Height ;switch _ccde {case LocSelectWidth :if (_eecgc ==SizeSelectIfLT &&_acfc < _egfbb )||(_eecgc ==SizeSelectIfGT &&_acfc > _egfbb )||(_eecgc ==SizeSelectIfLTE &&_acfc <=_egfbb )||(_eecgc ==SizeSelectIfGTE &&_acfc >=_egfbb )||(_eecgc ==SizeSelectIfEQ &&_acfc ==_egfbb ){_gecdg =1;
|
|
};case LocSelectHeight :if (_eecgc ==SizeSelectIfLT &&_aeeea < _cdedd )||(_eecgc ==SizeSelectIfGT &&_aeeea > _cdedd )||(_eecgc ==SizeSelectIfLTE &&_aeeea <=_cdedd )||(_eecgc ==SizeSelectIfGTE &&_aeeea >=_cdedd )||(_eecgc ==SizeSelectIfEQ &&_aeeea ==_cdedd ){_gecdg =1;
|
|
};case LocSelectIfEither :if (_eecgc ==SizeSelectIfLT &&(_acfc < _egfbb ||_aeeea < _cdedd ))||(_eecgc ==SizeSelectIfGT &&(_acfc > _egfbb ||_aeeea > _cdedd ))||(_eecgc ==SizeSelectIfLTE &&(_acfc <=_egfbb ||_aeeea <=_cdedd ))||(_eecgc ==SizeSelectIfGTE &&(_acfc >=_egfbb ||_aeeea >=_cdedd ))||(_eecgc ==SizeSelectIfEQ &&(_acfc ==_egfbb ||_aeeea ==_cdedd )){_gecdg =1;
|
|
};case LocSelectIfBoth :if (_eecgc ==SizeSelectIfLT &&(_acfc < _egfbb &&_aeeea < _cdedd ))||(_eecgc ==SizeSelectIfGT &&(_acfc > _egfbb &&_aeeea > _cdedd ))||(_eecgc ==SizeSelectIfLTE &&(_acfc <=_egfbb &&_aeeea <=_cdedd ))||(_eecgc ==SizeSelectIfGTE &&(_acfc >=_egfbb &&_aeeea >=_cdedd ))||(_eecgc ==SizeSelectIfEQ &&(_acfc ==_egfbb &&_aeeea ==_cdedd )){_gecdg =1;
|
|
};};_ebcac .AddInt (_gecdg );};return _ebcac ,nil ;};func (_bac *Bitmap )nextOnPixelLow (_afd ,_fefa ,_egg ,_aggc ,_aade int )(_ebb _da .Point ,_bdb bool ,_deef error ){const _fdca ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
|
|
var (_cgf int ;_eff byte ;);_bdge :=_aade *_egg ;_cfcee :=_bdge +(_aggc /8);if _eff ,_deef =_bac .GetByte (_cfcee );_deef !=nil {return _ebb ,false ,_c .Wrap (_deef ,_fdca ,"\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 _eff !=0{_edeg :=_aggc -(_aggc %8)+7;for _cgf =_aggc ;_cgf <=_edeg &&_cgf < _afd ;_cgf ++{if _bac .GetPixel (_cgf ,_aade ){_ebb .X =_cgf ;_ebb .Y =_aade ;return _ebb ,true ,nil ;};};};_agcb :=(_aggc /8)+1;_cgf =8*_agcb ;var _fea int ;for _cfcee =_bdge +_agcb ;
|
|
_cgf < _afd ;_cfcee ,_cgf =_cfcee +1,_cgf +8{if _eff ,_deef =_bac .GetByte (_cfcee );_deef !=nil {return _ebb ,false ,_c .Wrap (_deef ,_fdca ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _eff ==0{continue ;
|
|
};for _fea =0;_fea < 8&&_cgf < _afd ;_fea ,_cgf =_fea +1,_cgf +1{if _bac .GetPixel (_cgf ,_aade ){_ebb .X =_cgf ;_ebb .Y =_aade ;return _ebb ,true ,nil ;};};};for _bae :=_aade +1;_bae < _fefa ;_bae ++{_bdge =_bae *_egg ;for _cfcee ,_cgf =_bdge ,0;_cgf < _afd ;
|
|
_cfcee ,_cgf =_cfcee +1,_cgf +8{if _eff ,_deef =_bac .GetByte (_cfcee );_deef !=nil {return _ebb ,false ,_c .Wrap (_deef ,_fdca ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _eff ==0{continue ;};for _fea =0;_fea < 8&&_cgf < _afd ;
|
|
_fea ,_cgf =_fea +1,_cgf +1{if _bac .GetPixel (_cgf ,_bae ){_ebb .X =_cgf ;_ebb .Y =_bae ;return _ebb ,true ,nil ;};};};};return _ebb ,false ,nil ;};type byHeight Bitmaps ;func _degg (_eece *Bitmap ,_abbd ,_cdef int ,_cfg ,_baafd int ,_dfeag RasterOperator ){var (_cbegab int ;
|
|
_dfcf byte ;_cffg ,_cfge int ;_bceee int ;);_cacbg :=_cfg >>3;_beae :=_cfg &7;if _beae > 0{_dfcf =_adfg [_beae ];};_cbegab =_eece .RowStride *_cdef +(_abbd >>3);switch _dfeag {case PixClr :for _cffg =0;_cffg < _baafd ;_cffg ++{_bceee =_cbegab +_cffg *_eece .RowStride ;
|
|
for _cfge =0;_cfge < _cacbg ;_cfge ++{_eece .Data [_bceee ]=0x0;_bceee ++;};if _beae > 0{_eece .Data [_bceee ]=_efca (_eece .Data [_bceee ],0x0,_dfcf );};};case PixSet :for _cffg =0;_cffg < _baafd ;_cffg ++{_bceee =_cbegab +_cffg *_eece .RowStride ;for _cfge =0;
|
|
_cfge < _cacbg ;_cfge ++{_eece .Data [_bceee ]=0xff;_bceee ++;};if _beae > 0{_eece .Data [_bceee ]=_efca (_eece .Data [_bceee ],0xff,_dfcf );};};case PixNotDst :for _cffg =0;_cffg < _baafd ;_cffg ++{_bceee =_cbegab +_cffg *_eece .RowStride ;for _cfge =0;
|
|
_cfge < _cacbg ;_cfge ++{_eece .Data [_bceee ]=^_eece .Data [_bceee ];_bceee ++;};if _beae > 0{_eece .Data [_bceee ]=_efca (_eece .Data [_bceee ],^_eece .Data [_bceee ],_dfcf );};};};};func (_fbccb *BitmapsArray )GetBox (i int )(*_da .Rectangle ,error ){const _efce ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";
|
|
if _fbccb ==nil {return nil ,_c .Error (_efce ,"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 (_fbccb .Boxes )-1{return nil ,_c .Errorf (_efce ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return _fbccb .Boxes [i ],nil ;};func _eccb (_dead ,_aaea *Bitmap ,_gcdfe *Selection )(*Bitmap ,error ){const _fafac ="\u006f\u0070\u0065\u006e";var _fbbe error ;_dead ,_fbbe =_ebag (_dead ,_aaea ,_gcdfe );if _fbbe !=nil {return nil ,_c .Wrap (_fbbe ,_fafac ,"");
|
|
};_fce ,_fbbe :=_cbc (nil ,_aaea ,_gcdfe );if _fbbe !=nil {return nil ,_c .Wrap (_fbbe ,_fafac ,"");};_ ,_fbbe =_edbg (_dead ,_fce ,_gcdfe );if _fbbe !=nil {return nil ,_c .Wrap (_fbbe ,_fafac ,"");};return _dead ,nil ;};func (_gcba *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _ddaab ="\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 >=_gcba .IntSlice .Size (){return 0,_c .Errorf (_ddaab ,"\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 (_gcba .YAtIndex (i )),nil ;};func (_cdcg *Points )Add (pt *Points )error {const _aeff ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _cdcg ==nil {return _c .Error (_aeff ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if pt ==nil {return _c .Error (_aeff ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_cdcg =append (*_cdcg ,*pt ...);return nil ;};func (_aacf *Bitmap )removeBorderGeneral (_ddgc ,_bgbc ,_gebg ,_eddb int )(*Bitmap ,error ){const _eef ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
|
|
if _ddgc < 0||_bgbc < 0||_gebg < 0||_eddb < 0{return nil ,_c .Error (_eef ,"\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");};_cggg ,_cdcc :=_aacf .Width ,_aacf .Height ;
|
|
_dadg :=_cggg -_ddgc -_bgbc ;_fgdc :=_cdcc -_gebg -_eddb ;if _dadg <=0{return nil ,_c .Errorf (_eef ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_dadg );};if _fgdc <=0{return nil ,_c .Errorf (_eef ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_fgdc );
|
|
};_egcd :=New (_dadg ,_fgdc );_egcd .Color =_aacf .Color ;_caab :=_egcd .RasterOperation (0,0,_dadg ,_fgdc ,PixSrc ,_aacf ,_ddgc ,_gebg );if _caab !=nil {return nil ,_c .Wrap (_caab ,_eef ,"");};return _egcd ,nil ;};func _bffa (_geac ,_gdge *Bitmap ,_bdgea ,_babf ,_ddbb ,_ebg ,_cfe int ,_eggg CombinationOperator )error {var _gfa int ;
|
|
_cddb :=func (){_gfa ++;_ddbb +=_gdge .RowStride ;_ebg +=_geac .RowStride ;_cfe +=_geac .RowStride };for _gfa =_bdgea ;_gfa < _babf ;_cddb (){_aacb :=_ddbb ;for _dgdd :=_ebg ;_dgdd <=_cfe ;_dgdd ++{_agfe ,_ccdb :=_gdge .GetByte (_aacb );if _ccdb !=nil {return _ccdb ;
|
|
};_ebde ,_ccdb :=_geac .GetByte (_dgdd );if _ccdb !=nil {return _ccdb ;};if _ccdb =_gdge .SetByte (_aacb ,_dda (_agfe ,_ebde ,_eggg ));_ccdb !=nil {return _ccdb ;};_aacb ++;};};return nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _gcag (d ,s )};
|
|
func TstGetScaledSymbol (t *_b .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_gadfe ,_cfcd :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_f .NoError (t ,_cfcd );
|
|
return _gadfe ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_fefb :=_cdaf (h ,w ,"");_fefb .setOrigin (cy ,cx );var _eaag ,_bdef int ;for _eaag =0;_eaag < h ;_eaag ++{for _bdef =0;_bdef < w ;_bdef ++{_fefb .Data [_eaag ][_bdef ]=tp ;
|
|
};};return _fefb ;};func (_cgcd *Bitmap )clearAll ()error {return _cgcd .RasterOperation (0,0,_cgcd .Width ,_cgcd .Height ,PixClr ,nil ,0,0);};func TstOSymbol (t *_b .T ,scale ...int )*Bitmap {_efcgc ,_cegc :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});
|
|
_f .NoError (t ,_cegc );return TstGetScaledSymbol (t ,_efcgc ,scale ...);};func _cgca (_ebd *Bitmap ,_gbb ...int )(_fdd *Bitmap ,_ceg error ){const _adg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
|
|
if _ebd ==nil {return nil ,_c .Error (_adg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_gbb )==0||len (_gbb )> 4{return nil ,_c .Error (_adg ,"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 _gbb [0]<=0{_gb .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");_fdd ,_ceg =_gcag (nil ,_ebd );if _ceg !=nil {return nil ,_c .Wrap (_ceg ,_adg ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
|
|
};return _fdd ,nil ;};_ccd :=_dbe ();_fdd =_ebd ;for _bfe ,_dbb :=range _gbb {if _dbb <=0{break ;};_fdd ,_ceg =_gdec (_fdd ,_dbb ,_ccd );if _ceg !=nil {return nil ,_c .Wrapf (_ceg ,_adg ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_bfe );
|
|
};};return _fdd ,nil ;};func _addda (_bdff *Bitmap ,_ffgf *Bitmap ,_abfe int )(_agdcf error ){const _gfgf ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_bafc :=_bfgf (_bdff .Height ,_ffgf .Height );
|
|
_eade :=_bfgf (_bdff .RowStride ,_ffgf .RowStride );switch _abfe {case 4:_agdcf =_gbbe (_bdff ,_ffgf ,_bafc ,_eade );case 8:_agdcf =_eacce (_bdff ,_ffgf ,_bafc ,_eade );default:return _c .Errorf (_gfgf ,"\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",_abfe );
|
|
};if _agdcf !=nil {return _c .Wrap (_agdcf ,_gfgf ,"");};return nil ;};func _cagb (_dgaa *_d .Stack ,_ggda ,_abedb ,_adbc ,_geaf ,_aced int ,_ffde *_da .Rectangle )(_caed error ){const _fded ="\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 _dgaa ==nil {return _c .Error (_fded ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _ffde ==nil {return _c .Error (_fded ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
|
|
};_ffde .Min .X =_d .Min (_ffde .Min .X ,_ggda );_ffde .Max .X =_d .Max (_ffde .Max .X ,_abedb );_ffde .Min .Y =_d .Min (_ffde .Min .Y ,_adbc );_ffde .Max .Y =_d .Max (_ffde .Max .Y ,_adbc );if !(_adbc +_geaf >=0&&_adbc +_geaf <=_aced ){return nil ;};if _dgaa .Aux ==nil {return _c .Error (_fded ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");
|
|
};var _beafb *fillSegment ;_aeaa ,_ggcbb :=_dgaa .Aux .Pop ();if _ggcbb {if _beafb ,_ggcbb =_aeaa .(*fillSegment );!_ggcbb {return _c .Error (_fded ,"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 {_beafb =&fillSegment {};};_beafb ._egef =_ggda ;_beafb ._gbdb =_abedb ;_beafb ._afegc =_adbc ;_beafb ._aafag =_geaf ;_dgaa .Push (_beafb );return nil ;};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;
|
|
};type CombinationOperator int ;type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func NewClassedPoints (points *Points ,classes _d .IntSlice )(*ClassedPoints ,error ){const _acfed ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
|
|
if points ==nil {return nil ,_c .Error (_acfed ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_c .Error (_acfed ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
|
|
};_efbd :=&ClassedPoints {Points :points ,IntSlice :classes };if _bcdg :=_efbd .validateIntSlice ();_bcdg !=nil {return nil ,_c .Wrap (_bcdg ,_acfed ,"");};return _efbd ,nil ;};type fillSegment struct{_egef int ;_gbdb int ;_afegc int ;_aafag int ;};func (_edcfe *byHeight )Less (i ,j int )bool {return _edcfe .Values [i ].Height < _edcfe .Values [j ].Height };
|
|
func _abee (_baab ,_aegc *Bitmap ,_geff ,_aacd int )(*Bitmap ,error ){const _agcf ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _aegc ==nil {return nil ,_c .Error (_agcf ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _geff < 1||_aacd < 1{return nil ,_c .Error (_agcf ,"\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 _geff ==1&&_aacd ==1{_caaa ,_beca :=_gcag (_baab ,_aegc );if _beca !=nil {return nil ,_c .Wrap (_beca ,_agcf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _caaa ,nil ;};if _geff ==1||_aacd ==1{_cgd :=SelCreateBrick (_aacd ,_geff ,_aacd /2,_geff /2,SelHit );_abdg ,_bfeb :=_cbc (_baab ,_aegc ,_cgd );if _bfeb !=nil {return nil ,_c .Wrap (_bfeb ,_agcf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _abdg ,nil ;};_eccg :=SelCreateBrick (1,_geff ,0,_geff /2,SelHit );_bgbd :=SelCreateBrick (_aacd ,1,_aacd /2,0,SelHit );_bfc ,_abdc :=_cbc (nil ,_aegc ,_eccg );if _abdc !=nil {return nil ,_c .Wrap (_abdc ,_agcf ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};_baab ,_abdc =_cbc (_baab ,_bfc ,_bgbd );if _abdc !=nil {return nil ,_c .Wrap (_abdc ,_agcf ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _baab ,nil ;};func (_dbgda *Bitmaps )AddBitmap (bm *Bitmap ){_dbgda .Values =append (_dbgda .Values ,bm )};
|
|
func _dfgg (_cdge ,_cad *Bitmap ,_affd int ,_aad []byte ,_fbe int )(_ddd error ){const _abc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";var (_ebdg ,_gbfc ,_aaa ,_ega ,_dfc ,_aec ,_cec ,_fdb int ;
|
|
_ead ,_gffe ,_dgc ,_aggf uint32 ;_adac ,_ede byte ;_deb uint16 ;);_gabe :=make ([]byte ,4);_dee :=make ([]byte ,4);for _aaa =0;_aaa < _cdge .Height -1;_aaa ,_ega =_aaa +2,_ega +1{_ebdg =_aaa *_cdge .RowStride ;_gbfc =_ega *_cad .RowStride ;for _dfc ,_aec =0,0;
|
|
_dfc < _fbe ;_dfc ,_aec =_dfc +4,_aec +1{for _cec =0;_cec < 4;_cec ++{_fdb =_ebdg +_dfc +_cec ;if _fdb <=len (_cdge .Data )-1&&_fdb < _ebdg +_cdge .RowStride {_gabe [_cec ]=_cdge .Data [_fdb ];}else {_gabe [_cec ]=0x00;};_fdb =_ebdg +_cdge .RowStride +_dfc +_cec ;
|
|
if _fdb <=len (_cdge .Data )-1&&_fdb < _ebdg +(2*_cdge .RowStride ){_dee [_cec ]=_cdge .Data [_fdb ];}else {_dee [_cec ]=0x00;};};_ead =_de .BigEndian .Uint32 (_gabe );_gffe =_de .BigEndian .Uint32 (_dee );_dgc =_ead &_gffe ;_dgc |=_dgc <<1;_aggf =_ead |_gffe ;
|
|
_aggf &=_aggf <<1;_gffe =_dgc |_aggf ;_gffe &=0xaaaaaaaa;_ead =_gffe |(_gffe <<7);_adac =byte (_ead >>24);_ede =byte ((_ead >>8)&0xff);_fdb =_gbfc +_aec ;if _fdb +1==len (_cad .Data )-1||_fdb +1>=_gbfc +_cad .RowStride {if _ddd =_cad .SetByte (_fdb ,_aad [_adac ]);
|
|
_ddd !=nil {return _c .Wrapf (_ddd ,_abc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_fdb );};}else {_deb =(uint16 (_aad [_adac ])<<8)|uint16 (_aad [_ede ]);if _ddd =_cad .setTwoBytes (_fdb ,_deb );_ddd !=nil {return _c .Wrapf (_ddd ,_abc ,"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",_fdb );
|
|
};_aec ++;};};};return nil ;};func (_egd *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _egd .addBorderGeneral (left ,right ,top ,bot ,val );};func (_efgf *ClassedPoints )ySortFunction ()func (_beac int ,_bde int )bool {return func (_ageb ,_afdee int )bool {return _efgf .YAtIndex (_ageb )< _efgf .YAtIndex (_afdee )};
|
|
};func _aadb (_aacc ,_dac int )*Bitmap {return &Bitmap {Width :_aacc ,Height :_dac ,RowStride :(_aacc +7)>>3};};func ClipBoxToRectangle (box *_da .Rectangle ,wi ,hi int )(_baea *_da .Rectangle ,_bfbe error ){const _efab ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";
|
|
if box ==nil {return nil ,_c .Error (_efab ,"\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 ,_c .Error (_efab ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");
|
|
};_fdef :=*box ;_baea =&_fdef ;if _baea .Min .X < 0{_baea .Max .X +=_baea .Min .X ;_baea .Min .X =0;};if _baea .Min .Y < 0{_baea .Max .Y +=_baea .Min .Y ;_baea .Min .Y =0;};if _baea .Max .X > wi {_baea .Max .X =wi ;};if _baea .Max .Y > hi {_baea .Max .Y =hi ;
|
|
};return _baea ,nil ;};func _efca (_bgca ,_aaab ,_gbde byte )byte {return (_bgca &^(_gbde ))|(_aaab &_gbde )};func (_fbfdb *Bitmaps )selectByIndicator (_fedf *_d .NumSlice )(_ffefg *Bitmaps ,_ggcbc error ){const _cbge ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _fbfdb ==nil {return nil ,_c .Error (_cbge ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _fedf ==nil {return nil ,_c .Error (_cbge ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
|
|
};if len (_fbfdb .Values )==0{return _fbfdb ,nil ;};if len (*_fedf )!=len (_fbfdb .Values ){return nil ,_c .Errorf (_cbge ,"\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 (*_fedf ),len (_fbfdb .Values ));
|
|
};var _aadbc ,_bgdbg ,_gbgc int ;for _bgdbg =0;_bgdbg < len (*_fedf );_bgdbg ++{if _aadbc ,_ggcbc =_fedf .GetInt (_bgdbg );_ggcbc !=nil {return nil ,_c .Wrap (_ggcbc ,_cbge ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _aadbc ==1{_gbgc ++;
|
|
};};if _gbgc ==len (_fbfdb .Values ){return _fbfdb ,nil ;};_ffefg =&Bitmaps {};_edfa :=len (_fbfdb .Values )==len (_fbfdb .Boxes );for _bgdbg =0;_bgdbg < len (*_fedf );_bgdbg ++{if _aadbc =int ((*_fedf )[_bgdbg ]);_aadbc ==0{continue ;};_ffefg .Values =append (_ffefg .Values ,_fbfdb .Values [_bgdbg ]);
|
|
if _edfa {_ffefg .Boxes =append (_ffefg .Boxes ,_fbfdb .Boxes [_bgdbg ]);};};return _ffefg ,nil ;};func _efff (_gaaf ,_geec ,_egdg *Bitmap ,_ddcg int )(*Bitmap ,error ){const _ggdd ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";
|
|
if _geec ==nil {return nil ,_c .Error (_ggdd ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _egdg ==nil {return nil ,_c .Error (_ggdd ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
|
|
};if _ddcg !=4&&_ddcg !=8{return nil ,_c .Error (_ggdd ,"\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 _bbcc error ;_gaaf ,_bbcc =_gcag (_gaaf ,_geec );
|
|
if _bbcc !=nil {return nil ,_c .Wrap (_bbcc ,_ggdd ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_eafg :=_geec .createTemplate ();_egdg .setPadBits (0);for _gaed :=0;_gaed < _fgad ;_gaed ++{_eafg ,_bbcc =_gcag (_eafg ,_gaaf );
|
|
if _bbcc !=nil {return nil ,_c .Wrapf (_bbcc ,_ggdd ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gaed );};if _bbcc =_addda (_gaaf ,_egdg ,_ddcg );_bbcc !=nil {return nil ,_c .Wrapf (_bbcc ,_ggdd ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gaed );
|
|
};if _eafg .Equals (_gaaf ){break ;};};return _gaaf ,nil ;};func TstESymbol (t *_b .T ,scale ...int )*Bitmap {_bef ,_cbed :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_f .NoError (t ,_cbed );return TstGetScaledSymbol (t ,_bef ,scale ...);};func _ddc (_adba ,_bfbb int )int {if _adba > _bfbb {return _adba ;
|
|
};return _bfbb ;};func _eagc (_ffafd ,_bbgd *Bitmap ,_cfdc *Selection )(*Bitmap ,error ){const _eddd ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _gfe error ;if _ffafd ,_gfe =_ebag (_ffafd ,_bbgd ,_cfdc );_gfe !=nil {return nil ,_gfe ;
|
|
};_dfab ,_gfe :=_edbg (nil ,_bbgd ,_cfdc );if _gfe !=nil {return nil ,_c .Wrap (_gfe ,_eddd ,"");};if _ ,_gfe =_cbc (_ffafd ,_dfab ,_cfdc );_gfe !=nil {return nil ,_c .Wrap (_gfe ,_eddd ,"");};return _ffafd ,nil ;};func (_ecab *ClassedPoints )xSortFunction ()func (_fcc int ,_baff int )bool {return func (_fbad ,_cefd int )bool {return _ecab .XAtIndex (_fbad )< _ecab .XAtIndex (_cefd )};
|
|
};func (_dgfb *byHeight )Swap (i ,j int ){_dgfb .Values [i ],_dgfb .Values [j ]=_dgfb .Values [j ],_dgfb .Values [i ];if _dgfb .Boxes !=nil {_dgfb .Boxes [i ],_dgfb .Boxes [j ]=_dgfb .Boxes [j ],_dgfb .Boxes [i ];};};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _cdb ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
|
|
_dbed :=_aadb (width ,height );_dbed .Data =data ;if _fabc :=((width *height )+7)>>3;len (data )< _fabc {return nil ,_c .Errorf (_cdb ,"\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 ),_fabc );
|
|
};if _fac :=_dbed .addPadBits ();_fac !=nil {return nil ,_c .Wrap (_fac ,_cdb ,"");};return _dbed ,nil ;};func (_bcef *Bitmap )setPadBits (_cbb int ){_bcfb :=8-_bcef .Width %8;if _bcfb ==8{return ;};_fcfd :=_bcef .Width /8;_egde :=_agdg [_bcfb ];if _cbb ==0{_egde ^=_egde ;
|
|
};var _cab int ;for _dbdb :=0;_dbdb < _bcef .Height ;_dbdb ++{_cab =_dbdb *_bcef .RowStride +_fcfd ;if _cbb ==0{_bcef .Data [_cab ]&=_egde ;}else {_bcef .Data [_cab ]|=_egde ;};};};func _gdca ()[]int {_fedd :=make ([]int ,256);for _ebec :=0;_ebec <=0xff;
|
|
_ebec ++{_egcf :=byte (_ebec );_fedd [_egcf ]=int (_egcf &0x1)+(int (_egcf >>1)&0x1)+(int (_egcf >>2)&0x1)+(int (_egcf >>3)&0x1)+(int (_egcf >>4)&0x1)+(int (_egcf >>5)&0x1)+(int (_egcf >>6)&0x1)+(int (_egcf >>7)&0x1);};return _fedd ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _ggf ="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 ,_c .Error (_ggf ,"\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 ,_c .Error (_ggf ,"\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 ,_c .Error (_ggf ,"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 ,_c .Error (_ggf ,"\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 ,_c .Error (_ggf ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
|
|
};_afggd ,_aegf :=bm1 .Width ,bm1 .Height ;_fbdac ,_ddgg :=bm2 .Width ,bm2 .Height ;if _d .Abs (_afggd -_fbdac )> maxDiffW {return false ,nil ;};if _d .Abs (_aegf -_ddgg )> maxDiffH {return false ,nil ;};_eefe :=int (delX +_d .Sign (delX )*0.5);_beab :=int (delY +_d .Sign (delY )*0.5);
|
|
_acfd :=int (_a .Ceil (_a .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_ggbg :=bm2 .RowStride ;_dgeg :=_ddc (_beab ,0);_gfg :=_bfgf (_ddgg +_beab ,_aegf );_deeff :=bm1 .RowStride *_dgeg ;_afca :=bm2 .RowStride *(_dgeg -_beab );
|
|
var _bag int ;if _gfg <=_aegf {_bag =downcount [_gfg -1];};_daag :=_ddc (_eefe ,0);_aee :=_bfgf (_fbdac +_eefe ,_afggd );var _ecgbc ,_aefg int ;if _eefe >=8{_ecgbc =_eefe >>3;_deeff +=_ecgbc ;_daag -=_ecgbc <<3;_aee -=_ecgbc <<3;_eefe &=7;}else if _eefe <=-8{_aefg =-((_eefe +7)>>3);
|
|
_afca +=_aefg ;_ggbg -=_aefg ;_eefe +=_aefg <<3;};var (_efdee ,_efeef ,_efada int ;_gefg ,_fgdf ,_addd byte ;);if _daag >=_aee ||_dgeg >=_gfg {return false ,nil ;};_fbfb :=(_aee +7)>>3;switch {case _eefe ==0:for _efeef =_dgeg ;_efeef < _gfg ;_efeef ,_deeff ,_afca =_efeef +1,_deeff +bm1 .RowStride ,_afca +bm2 .RowStride {for _efada =0;
|
|
_efada < _fbfb ;_efada ++{_gefg =bm1 .Data [_deeff +_efada ]&bm2 .Data [_afca +_efada ];_efdee +=tab [_gefg ];};if _efdee >=_acfd {return true ,nil ;};if _dfefc :=_efdee +downcount [_efeef ]-_bag ;_dfefc < _acfd {return false ,nil ;};};case _eefe > 0&&_ggbg < _fbfb :for _efeef =_dgeg ;
|
|
_efeef < _gfg ;_efeef ,_deeff ,_afca =_efeef +1,_deeff +bm1 .RowStride ,_afca +bm2 .RowStride {_fgdf =bm1 .Data [_deeff ];_addd =bm2 .Data [_afca ]>>uint (_eefe );_gefg =_fgdf &_addd ;_efdee +=tab [_gefg ];for _efada =1;_efada < _ggbg ;_efada ++{_fgdf =bm1 .Data [_deeff +_efada ];
|
|
_addd =bm2 .Data [_afca +_efada ]>>uint (_eefe )|bm2 .Data [_afca +_efada -1]<<uint (8-_eefe );_gefg =_fgdf &_addd ;_efdee +=tab [_gefg ];};_fgdf =bm1 .Data [_deeff +_efada ];_addd =bm2 .Data [_afca +_efada -1]<<uint (8-_eefe );_gefg =_fgdf &_addd ;_efdee +=tab [_gefg ];
|
|
if _efdee >=_acfd {return true ,nil ;}else if _efdee +downcount [_efeef ]-_bag < _acfd {return false ,nil ;};};case _eefe > 0&&_ggbg >=_fbfb :for _efeef =_dgeg ;_efeef < _gfg ;_efeef ,_deeff ,_afca =_efeef +1,_deeff +bm1 .RowStride ,_afca +bm2 .RowStride {_fgdf =bm1 .Data [_deeff ];
|
|
_addd =bm2 .Data [_afca ]>>uint (_eefe );_gefg =_fgdf &_addd ;_efdee +=tab [_gefg ];for _efada =1;_efada < _fbfb ;_efada ++{_fgdf =bm1 .Data [_deeff +_efada ];_addd =bm2 .Data [_afca +_efada ]>>uint (_eefe );_addd |=bm2 .Data [_afca +_efada -1]<<uint (8-_eefe );
|
|
_gefg =_fgdf &_addd ;_efdee +=tab [_gefg ];};if _efdee >=_acfd {return true ,nil ;}else if _efdee +downcount [_efeef ]-_bag < _acfd {return false ,nil ;};};case _fbfb < _ggbg :for _efeef =_dgeg ;_efeef < _gfg ;_efeef ,_deeff ,_afca =_efeef +1,_deeff +bm1 .RowStride ,_afca +bm2 .RowStride {for _efada =0;
|
|
_efada < _fbfb ;_efada ++{_fgdf =bm1 .Data [_deeff +_efada ];_addd =bm2 .Data [_afca +_efada ]<<uint (-_eefe );_addd |=bm2 .Data [_afca +_efada +1]>>uint (8+_eefe );_gefg =_fgdf &_addd ;_efdee +=tab [_gefg ];};if _efdee >=_acfd {return true ,nil ;}else if _efge :=_efdee +downcount [_efeef ]-_bag ;
|
|
_efge < _acfd {return false ,nil ;};};case _ggbg >=_fbfb :for _efeef =_dgeg ;_efeef < _gfg ;_efeef ,_deeff ,_afca =_efeef +1,_deeff +bm1 .RowStride ,_afca +bm2 .RowStride {for _efada =0;_efada < _fbfb ;_efada ++{_fgdf =bm1 .Data [_deeff +_efada ];_addd =bm2 .Data [_afca +_efada ]<<uint (-_eefe );
|
|
_addd |=bm2 .Data [_afca +_efada +1]>>uint (8+_eefe );_gefg =_fgdf &_addd ;_efdee +=tab [_gefg ];};_fgdf =bm1 .Data [_deeff +_efada ];_addd =bm2 .Data [_afca +_efada ]<<uint (-_eefe );_gefg =_fgdf &_addd ;_efdee +=tab [_gefg ];if _efdee >=_acfd {return true ,nil ;
|
|
}else if _efdee +downcount [_efeef ]-_bag < _acfd {return false ,nil ;};};};_gaaa :=float32 (_efdee )*float32 (_efdee )/(float32 (area1 )*float32 (area2 ));if _gaaa >=scoreThreshold {_gb .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",_efdee ,_acfd ,_gaaa ,scoreThreshold );
|
|
};return false ,nil ;};func _gdec (_gab *Bitmap ,_bca int ,_bcc []byte )(_ffe *Bitmap ,_ffee error ){const _ae ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _gab ==nil {return nil ,_c .Error (_ae ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
|
|
};if _bca < 1||_bca > 4{return nil ,_c .Error (_ae ,"\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 _gab .Height <=1{return nil ,_c .Errorf (_ae ,"\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",_gab .Height );
|
|
};_ffe =New (_gab .Width /2,_gab .Height /2);if _bcc ==nil {_bcc =_dbe ();};_bgc :=_bfgf (_gab .RowStride ,2*_ffe .RowStride );switch _bca {case 1:_ffee =_dfe (_gab ,_ffe ,_bca ,_bcc ,_bgc );case 2:_ffee =_dfgg (_gab ,_ffe ,_bca ,_bcc ,_bgc );case 3:_ffee =_dga (_gab ,_ffe ,_bca ,_bcc ,_bgc );
|
|
case 4:_ffee =_fddc (_gab ,_ffe ,_bca ,_bcc ,_bgc );};if _ffee !=nil {return nil ,_ffee ;};return _ffe ,nil ;};func (_fggab *ClassedPoints )XAtIndex (i int )float32 {return (*_fggab .Points )[_fggab .IntSlice [i ]].X };func (_cee *Bitmap )GetByteIndex (x ,y int )int {return y *_cee .RowStride +(x >>3)};
|
|
func TstFrameBitmap ()*Bitmap {return _ffca .Copy ()};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func _efbc (_ffcg ,_fbfg *Bitmap ,_cddc ,_dfag int )(*Bitmap ,error ){const _fcgg ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";
|
|
if _fbfg ==nil {return nil ,_c .Error (_fcgg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cddc < 1||_dfag < 1{return nil ,_c .Error (_fcgg ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
|
|
};if _cddc ==1&&_dfag ==1{return _fbfg .Copy (),nil ;};if _cddc ==1||_dfag ==1{_bfdeb :=SelCreateBrick (_dfag ,_cddc ,_dfag /2,_cddc /2,SelHit );var _eegc error ;_ffcg ,_eegc =_eagc (_ffcg ,_fbfg ,_bfdeb );if _eegc !=nil {return nil ,_c .Wrap (_eegc ,_fcgg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _ffcg ,nil ;};_gbff :=SelCreateBrick (1,_cddc ,0,_cddc /2,SelHit );_edcg :=SelCreateBrick (_dfag ,1,_dfag /2,0,SelHit );_ceac ,_fdbg :=_edbg (nil ,_fbfg ,_gbff );if _fdbg !=nil {return nil ,_c .Wrap (_fdbg ,_fcgg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};if _ffcg ,_fdbg =_edbg (_ffcg ,_ceac ,_edcg );_fdbg !=nil {return nil ,_c .Wrap (_fdbg ,_fcgg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_fdbg =_cbc (_ceac ,_ffcg ,_gbff );_fdbg !=nil {return nil ,_c .Wrap (_fdbg ,_fcgg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};if _ ,_fdbg =_cbc (_ffcg ,_ceac ,_edcg );_fdbg !=nil {return nil ,_c .Wrap (_fdbg ,_fcgg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _ffcg ,nil ;};func _dacdb (_fdcg *Bitmap ,_bfgfg ,_gafa ,_gcgf ,_fgc int ,_addb RasterOperator ){if _bfgfg < 0{_gcgf +=_bfgfg ;
|
|
_bfgfg =0;};_dfgad :=_bfgfg +_gcgf -_fdcg .Width ;if _dfgad > 0{_gcgf -=_dfgad ;};if _gafa < 0{_fgc +=_gafa ;_gafa =0;};_ceag :=_gafa +_fgc -_fdcg .Height ;if _ceag > 0{_fgc -=_ceag ;};if _gcgf <=0||_fgc <=0{return ;};if (_bfgfg &7)==0{_degg (_fdcg ,_bfgfg ,_gafa ,_gcgf ,_fgc ,_addb );
|
|
}else {_gbfa (_fdcg ,_bfgfg ,_gafa ,_gcgf ,_fgc ,_addb );};};func _dbae (_abbe *Bitmap )(_dced *Bitmap ,_bdae int ,_baeb error ){const _dgdg ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
|
|
if _abbe ==nil {return nil ,0,_c .Errorf (_dgdg ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _aedc ,_gfff *Bitmap ;if _aedc ,_baeb =_gcag (nil ,_abbe );_baeb !=nil {return nil ,0,_c .Wrap (_baeb ,_dgdg ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
|
|
};var (_egbab [13]int ;_gdff ,_afde int ;);_fgfg :=12;_gecc :=_d .NewNumSlice (_fgfg +1);_bcfe :=_d .NewNumSlice (_fgfg +1);var _gade *Boxes ;for _ggbc :=0;_ggbc <=_fgfg ;_ggbc ++{if _ggbc ==0{if _gfff ,_baeb =_gcag (nil ,_aedc );_baeb !=nil {return nil ,0,_c .Wrap (_baeb ,_dgdg ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
|
|
};}else {if _gfff ,_baeb =_gbed (_aedc ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_baeb !=nil {return nil ,0,_c .Wrap (_baeb ,_dgdg ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _gade ,_baeb =_gfff .connComponentsBB (4);
|
|
_baeb !=nil {return nil ,0,_c .Wrap (_baeb ,_dgdg ,"");};_egbab [_ggbc ]=len (*_gade );_gecc .AddInt (_egbab [_ggbc ]);switch _ggbc {case 0:_gdff =_egbab [0];default:_afde =_egbab [_ggbc -1]-_egbab [_ggbc ];_bcfe .AddInt (_afde );};_aedc =_gfff ;};_beea :=true ;
|
|
_ecdec :=2;var _ddccb ,_bebg int ;for _fbcbg :=1;_fbcbg < len (*_bcfe );_fbcbg ++{if _ddccb ,_baeb =_gecc .GetInt (_fbcbg );_baeb !=nil {return nil ,0,_c .Wrap (_baeb ,_dgdg ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
|
|
};if _beea &&_ddccb < int (0.3*float32 (_gdff )){_ecdec =_fbcbg +1;_beea =false ;};if _afde ,_baeb =_bcfe .GetInt (_fbcbg );_baeb !=nil {return nil ,0,_c .Wrap (_baeb ,_dgdg ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
|
|
};if _afde > _bebg {_bebg =_afde ;};};_dbgg :=_abbe .XResolution ;if _dbgg ==0{_dbgg =150;};if _dbgg > 110{_ecdec ++;};if _ecdec < 2{_gb .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");
|
|
_ecdec =2;};_bdae =_ecdec +1;if _dced ,_baeb =_efbc (nil ,_abbe ,_ecdec +1,1);_baeb !=nil {return nil ,0,_c .Wrap (_baeb ,_dgdg ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _dced ,_bdae ,nil ;
|
|
};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_da .Rectangle ;};func TstWSymbol (t *_b .T ,scale ...int )*Bitmap {_ffdbc ,_gacb :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_f .NoError (t ,_gacb );return TstGetScaledSymbol (t ,_ffdbc ,scale ...);
|
|
};func (_adef *byWidth )Less (i ,j int )bool {return _adef .Values [i ].Width < _adef .Values [j ].Width };func (_abeeb *ClassedPoints )SortByX (){_abeeb ._efea =_abeeb .xSortFunction ();_cd .Sort (_abeeb )};func (_dadgg *BitmapsArray )AddBitmaps (bm *Bitmaps ){_dadgg .Values =append (_dadgg .Values ,bm )};
|
|
func _fcff (_dbdgg *Bitmap ,_gafd ,_dfagc int ,_ebceg ,_cadd int ,_fbgd RasterOperator ,_cefe *Bitmap ,_gggfa ,_ccddc int )error {var _cdgc ,_eegcb ,_cfae ,_edeb int ;if _gafd < 0{_gggfa -=_gafd ;_ebceg +=_gafd ;_gafd =0;};if _gggfa < 0{_gafd -=_gggfa ;
|
|
_ebceg +=_gggfa ;_gggfa =0;};_cdgc =_gafd +_ebceg -_dbdgg .Width ;if _cdgc > 0{_ebceg -=_cdgc ;};_eegcb =_gggfa +_ebceg -_cefe .Width ;if _eegcb > 0{_ebceg -=_eegcb ;};if _dfagc < 0{_ccddc -=_dfagc ;_cadd +=_dfagc ;_dfagc =0;};if _ccddc < 0{_dfagc -=_ccddc ;
|
|
_cadd +=_ccddc ;_ccddc =0;};_cfae =_dfagc +_cadd -_dbdgg .Height ;if _cfae > 0{_cadd -=_cfae ;};_edeb =_ccddc +_cadd -_cefe .Height ;if _edeb > 0{_cadd -=_edeb ;};if _ebceg <=0||_cadd <=0{return nil ;};var _cfec error ;switch {case _gafd &7==0&&_gggfa &7==0:_cfec =_afdde (_dbdgg ,_gafd ,_dfagc ,_ebceg ,_cadd ,_fbgd ,_cefe ,_gggfa ,_ccddc );
|
|
case _gafd &7==_gggfa &7:_cfec =_eafa (_dbdgg ,_gafd ,_dfagc ,_ebceg ,_cadd ,_fbgd ,_cefe ,_gggfa ,_ccddc );default:_cfec =_ebcd (_dbdgg ,_gafd ,_dfagc ,_ebceg ,_cadd ,_fbgd ,_cefe ,_gggfa ,_ccddc );};if _cfec !=nil {return _c .Wrap (_cfec ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");
|
|
};return nil ;};func (_bebd *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _febgg ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_bebd .Values )==0{return nil ,_c .Error (_febgg ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
|
|
};_ecfb :=&BitmapsArray {};_bebd .SortByWidth ();_addfe :=-1;_feda :=-1;for _cbag :=0;_cbag < len (_bebd .Values );_cbag ++{_ebdfc :=_bebd .Values [_cbag ].Width ;if _ebdfc > _addfe {_addfe =_ebdfc ;_feda ++;_ecfb .Values =append (_ecfb .Values ,&Bitmaps {});
|
|
};_ecfb .Values [_feda ].AddBitmap (_bebd .Values [_cbag ]);};return _ecfb ,nil ;};func _eafa (_cefef *Bitmap ,_fabda ,_deda ,_fbfd ,_agae int ,_bdaa RasterOperator ,_efdea *Bitmap ,_egcfc ,_cfbdc int )error {var (_baga bool ;_gebce bool ;_agdc int ;_gegd int ;
|
|
_fbcd int ;_eae bool ;_bceb byte ;_cfaf int ;_egeg int ;_cccc int ;_cedbe ,_cbecf int ;);_afcd :=8-(_fabda &7);_cdcab :=_agdg [_afcd ];_ebgd :=_cefef .RowStride *_deda +(_fabda >>3);_dggf :=_efdea .RowStride *_cfbdc +(_egcfc >>3);if _fbfd < _afcd {_baga =true ;
|
|
_cdcab &=_adfg [8-_afcd +_fbfd ];};if !_baga {_agdc =(_fbfd -_afcd )>>3;if _agdc > 0{_gebce =true ;_gegd =_ebgd +1;_fbcd =_dggf +1;};};_cfaf =(_fabda +_fbfd )&7;if !(_baga ||_cfaf ==0){_eae =true ;_bceb =_adfg [_cfaf ];_egeg =_ebgd +1+_agdc ;_cccc =_dggf +1+_agdc ;
|
|
};switch _bdaa {case PixSrc :for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_ebgd ]=_efca (_cefef .Data [_ebgd ],_efdea .Data [_dggf ],_cdcab );_ebgd +=_cefef .RowStride ;_dggf +=_efdea .RowStride ;};if _gebce {for _cedbe =0;_cedbe < _agae ;_cedbe ++{for _cbecf =0;
|
|
_cbecf < _agdc ;_cbecf ++{_cefef .Data [_gegd +_cbecf ]=_efdea .Data [_fbcd +_cbecf ];};_gegd +=_cefef .RowStride ;_fbcd +=_efdea .RowStride ;};};if _eae {for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_egeg ]=_efca (_cefef .Data [_egeg ],_efdea .Data [_cccc ],_bceb );
|
|
_egeg +=_cefef .RowStride ;_cccc +=_efdea .RowStride ;};};case PixNotSrc :for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_ebgd ]=_efca (_cefef .Data [_ebgd ],^_efdea .Data [_dggf ],_cdcab );_ebgd +=_cefef .RowStride ;_dggf +=_efdea .RowStride ;};
|
|
if _gebce {for _cedbe =0;_cedbe < _agae ;_cedbe ++{for _cbecf =0;_cbecf < _agdc ;_cbecf ++{_cefef .Data [_gegd +_cbecf ]=^_efdea .Data [_fbcd +_cbecf ];};_gegd +=_cefef .RowStride ;_fbcd +=_efdea .RowStride ;};};if _eae {for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_egeg ]=_efca (_cefef .Data [_egeg ],^_efdea .Data [_cccc ],_bceb );
|
|
_egeg +=_cefef .RowStride ;_cccc +=_efdea .RowStride ;};};case PixSrcOrDst :for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_ebgd ]=_efca (_cefef .Data [_ebgd ],_efdea .Data [_dggf ]|_cefef .Data [_ebgd ],_cdcab );_ebgd +=_cefef .RowStride ;_dggf +=_efdea .RowStride ;
|
|
};if _gebce {for _cedbe =0;_cedbe < _agae ;_cedbe ++{for _cbecf =0;_cbecf < _agdc ;_cbecf ++{_cefef .Data [_gegd +_cbecf ]|=_efdea .Data [_fbcd +_cbecf ];};_gegd +=_cefef .RowStride ;_fbcd +=_efdea .RowStride ;};};if _eae {for _cedbe =0;_cedbe < _agae ;
|
|
_cedbe ++{_cefef .Data [_egeg ]=_efca (_cefef .Data [_egeg ],_efdea .Data [_cccc ]|_cefef .Data [_egeg ],_bceb );_egeg +=_cefef .RowStride ;_cccc +=_efdea .RowStride ;};};case PixSrcAndDst :for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_ebgd ]=_efca (_cefef .Data [_ebgd ],_efdea .Data [_dggf ]&_cefef .Data [_ebgd ],_cdcab );
|
|
_ebgd +=_cefef .RowStride ;_dggf +=_efdea .RowStride ;};if _gebce {for _cedbe =0;_cedbe < _agae ;_cedbe ++{for _cbecf =0;_cbecf < _agdc ;_cbecf ++{_cefef .Data [_gegd +_cbecf ]&=_efdea .Data [_fbcd +_cbecf ];};_gegd +=_cefef .RowStride ;_fbcd +=_efdea .RowStride ;
|
|
};};if _eae {for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_egeg ]=_efca (_cefef .Data [_egeg ],_efdea .Data [_cccc ]&_cefef .Data [_egeg ],_bceb );_egeg +=_cefef .RowStride ;_cccc +=_efdea .RowStride ;};};case PixSrcXorDst :for _cedbe =0;_cedbe < _agae ;
|
|
_cedbe ++{_cefef .Data [_ebgd ]=_efca (_cefef .Data [_ebgd ],_efdea .Data [_dggf ]^_cefef .Data [_ebgd ],_cdcab );_ebgd +=_cefef .RowStride ;_dggf +=_efdea .RowStride ;};if _gebce {for _cedbe =0;_cedbe < _agae ;_cedbe ++{for _cbecf =0;_cbecf < _agdc ;_cbecf ++{_cefef .Data [_gegd +_cbecf ]^=_efdea .Data [_fbcd +_cbecf ];
|
|
};_gegd +=_cefef .RowStride ;_fbcd +=_efdea .RowStride ;};};if _eae {for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_egeg ]=_efca (_cefef .Data [_egeg ],_efdea .Data [_cccc ]^_cefef .Data [_egeg ],_bceb );_egeg +=_cefef .RowStride ;_cccc +=_efdea .RowStride ;
|
|
};};case PixNotSrcOrDst :for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_ebgd ]=_efca (_cefef .Data [_ebgd ],^(_efdea .Data [_dggf ])|_cefef .Data [_ebgd ],_cdcab );_ebgd +=_cefef .RowStride ;_dggf +=_efdea .RowStride ;};if _gebce {for _cedbe =0;
|
|
_cedbe < _agae ;_cedbe ++{for _cbecf =0;_cbecf < _agdc ;_cbecf ++{_cefef .Data [_gegd +_cbecf ]|=^(_efdea .Data [_fbcd +_cbecf ]);};_gegd +=_cefef .RowStride ;_fbcd +=_efdea .RowStride ;};};if _eae {for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_egeg ]=_efca (_cefef .Data [_egeg ],^(_efdea .Data [_cccc ])|_cefef .Data [_egeg ],_bceb );
|
|
_egeg +=_cefef .RowStride ;_cccc +=_efdea .RowStride ;};};case PixNotSrcAndDst :for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_ebgd ]=_efca (_cefef .Data [_ebgd ],^(_efdea .Data [_dggf ])&_cefef .Data [_ebgd ],_cdcab );_ebgd +=_cefef .RowStride ;
|
|
_dggf +=_efdea .RowStride ;};if _gebce {for _cedbe =0;_cedbe < _agae ;_cedbe ++{for _cbecf =0;_cbecf < _agdc ;_cbecf ++{_cefef .Data [_gegd +_cbecf ]&=^_efdea .Data [_fbcd +_cbecf ];};_gegd +=_cefef .RowStride ;_fbcd +=_efdea .RowStride ;};};if _eae {for _cedbe =0;
|
|
_cedbe < _agae ;_cedbe ++{_cefef .Data [_egeg ]=_efca (_cefef .Data [_egeg ],^(_efdea .Data [_cccc ])&_cefef .Data [_egeg ],_bceb );_egeg +=_cefef .RowStride ;_cccc +=_efdea .RowStride ;};};case PixSrcOrNotDst :for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_ebgd ]=_efca (_cefef .Data [_ebgd ],_efdea .Data [_dggf ]|^(_cefef .Data [_ebgd ]),_cdcab );
|
|
_ebgd +=_cefef .RowStride ;_dggf +=_efdea .RowStride ;};if _gebce {for _cedbe =0;_cedbe < _agae ;_cedbe ++{for _cbecf =0;_cbecf < _agdc ;_cbecf ++{_cefef .Data [_gegd +_cbecf ]=_efdea .Data [_fbcd +_cbecf ]|^(_cefef .Data [_gegd +_cbecf ]);};_gegd +=_cefef .RowStride ;
|
|
_fbcd +=_efdea .RowStride ;};};if _eae {for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_egeg ]=_efca (_cefef .Data [_egeg ],_efdea .Data [_cccc ]|^(_cefef .Data [_egeg ]),_bceb );_egeg +=_cefef .RowStride ;_cccc +=_efdea .RowStride ;};};case PixSrcAndNotDst :for _cedbe =0;
|
|
_cedbe < _agae ;_cedbe ++{_cefef .Data [_ebgd ]=_efca (_cefef .Data [_ebgd ],_efdea .Data [_dggf ]&^(_cefef .Data [_ebgd ]),_cdcab );_ebgd +=_cefef .RowStride ;_dggf +=_efdea .RowStride ;};if _gebce {for _cedbe =0;_cedbe < _agae ;_cedbe ++{for _cbecf =0;
|
|
_cbecf < _agdc ;_cbecf ++{_cefef .Data [_gegd +_cbecf ]=_efdea .Data [_fbcd +_cbecf ]&^(_cefef .Data [_gegd +_cbecf ]);};_gegd +=_cefef .RowStride ;_fbcd +=_efdea .RowStride ;};};if _eae {for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_egeg ]=_efca (_cefef .Data [_egeg ],_efdea .Data [_cccc ]&^(_cefef .Data [_egeg ]),_bceb );
|
|
_egeg +=_cefef .RowStride ;_cccc +=_efdea .RowStride ;};};case PixNotPixSrcOrDst :for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_ebgd ]=_efca (_cefef .Data [_ebgd ],^(_efdea .Data [_dggf ]|_cefef .Data [_ebgd ]),_cdcab );_ebgd +=_cefef .RowStride ;
|
|
_dggf +=_efdea .RowStride ;};if _gebce {for _cedbe =0;_cedbe < _agae ;_cedbe ++{for _cbecf =0;_cbecf < _agdc ;_cbecf ++{_cefef .Data [_gegd +_cbecf ]=^(_efdea .Data [_fbcd +_cbecf ]|_cefef .Data [_gegd +_cbecf ]);};_gegd +=_cefef .RowStride ;_fbcd +=_efdea .RowStride ;
|
|
};};if _eae {for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_egeg ]=_efca (_cefef .Data [_egeg ],^(_efdea .Data [_cccc ]|_cefef .Data [_egeg ]),_bceb );_egeg +=_cefef .RowStride ;_cccc +=_efdea .RowStride ;};};case PixNotPixSrcAndDst :for _cedbe =0;
|
|
_cedbe < _agae ;_cedbe ++{_cefef .Data [_ebgd ]=_efca (_cefef .Data [_ebgd ],^(_efdea .Data [_dggf ]&_cefef .Data [_ebgd ]),_cdcab );_ebgd +=_cefef .RowStride ;_dggf +=_efdea .RowStride ;};if _gebce {for _cedbe =0;_cedbe < _agae ;_cedbe ++{for _cbecf =0;
|
|
_cbecf < _agdc ;_cbecf ++{_cefef .Data [_gegd +_cbecf ]=^(_efdea .Data [_fbcd +_cbecf ]&_cefef .Data [_gegd +_cbecf ]);};_gegd +=_cefef .RowStride ;_fbcd +=_efdea .RowStride ;};};if _eae {for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_egeg ]=_efca (_cefef .Data [_egeg ],^(_efdea .Data [_cccc ]&_cefef .Data [_egeg ]),_bceb );
|
|
_egeg +=_cefef .RowStride ;_cccc +=_efdea .RowStride ;};};case PixNotPixSrcXorDst :for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_ebgd ]=_efca (_cefef .Data [_ebgd ],^(_efdea .Data [_dggf ]^_cefef .Data [_ebgd ]),_cdcab );_ebgd +=_cefef .RowStride ;
|
|
_dggf +=_efdea .RowStride ;};if _gebce {for _cedbe =0;_cedbe < _agae ;_cedbe ++{for _cbecf =0;_cbecf < _agdc ;_cbecf ++{_cefef .Data [_gegd +_cbecf ]=^(_efdea .Data [_fbcd +_cbecf ]^_cefef .Data [_gegd +_cbecf ]);};_gegd +=_cefef .RowStride ;_fbcd +=_efdea .RowStride ;
|
|
};};if _eae {for _cedbe =0;_cedbe < _agae ;_cedbe ++{_cefef .Data [_egeg ]=_efca (_cefef .Data [_egeg ],^(_efdea .Data [_cccc ]^_cefef .Data [_egeg ]),_bceb );_egeg +=_cefef .RowStride ;_cccc +=_efdea .RowStride ;};};default:_gb .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",_bdaa );
|
|
return _c .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 _gfdg (_edba ,_cef ,_dfcd *Bitmap )(*Bitmap ,error ){const _adc ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _cef ==nil {return nil ,_c .Error (_adc ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
|
|
};if _dfcd ==nil {return nil ,_c .Error (_adc ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _edba ==_dfcd {return nil ,_c .Error (_adc ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_cef .SizesEqual (_dfcd ){_gb .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",_adc );
|
|
};var _ddb error ;if _edba ,_ddb =_gcag (_edba ,_cef );_ddb !=nil {return nil ,_c .Wrap (_ddb ,_adc ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _ddb =_edba .RasterOperation (0,0,_edba .Width ,_edba .Height ,PixSrcXorDst ,_dfcd ,0,0);
|
|
_ddb !=nil {return nil ,_c .Wrap (_ddb ,_adc ,"");};return _edba ,nil ;};func (_eaabd *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _ecff ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_eaabd .Values )==0{return nil ,_c .Error (_ecff ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
|
|
};_geffc :=&BitmapsArray {};_eaabd .SortByHeight ();_ceda :=-1;_cebb :=-1;for _gacde :=0;_gacde < len (_eaabd .Values );_gacde ++{_cdgf :=_eaabd .Values [_gacde ].Height ;if _cdgf > _ceda {_ceda =_cdgf ;_cebb ++;_geffc .Values =append (_geffc .Values ,&Bitmaps {});
|
|
};_geffc .Values [_cebb ].AddBitmap (_eaabd .Values [_gacde ]);};return _geffc ,nil ;};func (_edd *Bitmap )SetDefaultPixel (){for _efc :=range _edd .Data {_edd .Data [_efc ]=byte (0xff);};};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _edcb ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";
|
|
_gdc :=_aadb (width ,height );_gdc .Data =data ;if len (data )< height *_gdc .RowStride {return nil ,_c .Errorf (_edcb ,"\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 *_gdc .RowStride );
|
|
};return _gdc ,nil ;};func TstImageBitmapData ()[]byte {return _baagf .Data };func _feaab (_eecbg ,_ccdg *Bitmap ,_cacgg ,_eabb int )(*Bitmap ,error ){const _ddfdb ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _ccdg ==nil {_gb .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 ,_c .Error (_ddfdb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _cacgg < 1||_eabb < 1{return nil ,_c .Error (_ddfdb ,"\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 _cacgg ==1&&_eabb ==1{_gcbgb ,_cgba :=_gcag (_eecbg ,_ccdg );if _cgba !=nil {return nil ,_c .Wrap (_cgba ,_ddfdb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _gcbgb ,nil ;};if _cacgg ==1||_eabb ==1{_beeab :=SelCreateBrick (_eabb ,_cacgg ,_eabb /2,_cacgg /2,SelHit );_bgdb ,_baad :=_edbg (_eecbg ,_ccdg ,_beeab );if _baad !=nil {return nil ,_c .Wrap (_baad ,_ddfdb ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _bgdb ,nil ;};_bggf :=SelCreateBrick (1,_cacgg ,0,_cacgg /2,SelHit );_feff :=SelCreateBrick (_eabb ,1,_eabb /2,0,SelHit );_badc ,_gdaf :=_edbg (nil ,_ccdg ,_bggf );if _gdaf !=nil {return nil ,_c .Wrap (_gdaf ,_ddfdb ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};_eecbg ,_gdaf =_edbg (_eecbg ,_badc ,_feff );if _gdaf !=nil {return nil ,_c .Wrap (_gdaf ,_ddfdb ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _eecbg ,nil ;};func _gbfa (_cadaa *Bitmap ,_cgeb ,_bccd int ,_ebfe ,_faaac int ,_dgab RasterOperator ){var (_egce bool ;
|
|
_dbgd bool ;_afgf int ;_aeee int ;_cdeg int ;_dcgg int ;_eeceb bool ;_egfb byte ;);_ggfb :=8-(_cgeb &7);_bgdgf :=_agdg [_ggfb ];_abge :=_cadaa .RowStride *_bccd +(_cgeb >>3);if _ebfe < _ggfb {_egce =true ;_bgdgf &=_adfg [8-_ggfb +_ebfe ];};if !_egce {_afgf =(_ebfe -_ggfb )>>3;
|
|
if _afgf !=0{_dbgd =true ;_aeee =_abge +1;};};_cdeg =(_cgeb +_ebfe )&7;if !(_egce ||_cdeg ==0){_eeceb =true ;_egfb =_adfg [_cdeg ];_dcgg =_abge +1+_afgf ;};var _ggcf ,_bdgc int ;switch _dgab {case PixClr :for _ggcf =0;_ggcf < _faaac ;_ggcf ++{_cadaa .Data [_abge ]=_efca (_cadaa .Data [_abge ],0x0,_bgdgf );
|
|
_abge +=_cadaa .RowStride ;};if _dbgd {for _ggcf =0;_ggcf < _faaac ;_ggcf ++{for _bdgc =0;_bdgc < _afgf ;_bdgc ++{_cadaa .Data [_aeee +_bdgc ]=0x0;};_aeee +=_cadaa .RowStride ;};};if _eeceb {for _ggcf =0;_ggcf < _faaac ;_ggcf ++{_cadaa .Data [_dcgg ]=_efca (_cadaa .Data [_dcgg ],0x0,_egfb );
|
|
_dcgg +=_cadaa .RowStride ;};};case PixSet :for _ggcf =0;_ggcf < _faaac ;_ggcf ++{_cadaa .Data [_abge ]=_efca (_cadaa .Data [_abge ],0xff,_bgdgf );_abge +=_cadaa .RowStride ;};if _dbgd {for _ggcf =0;_ggcf < _faaac ;_ggcf ++{for _bdgc =0;_bdgc < _afgf ;
|
|
_bdgc ++{_cadaa .Data [_aeee +_bdgc ]=0xff;};_aeee +=_cadaa .RowStride ;};};if _eeceb {for _ggcf =0;_ggcf < _faaac ;_ggcf ++{_cadaa .Data [_dcgg ]=_efca (_cadaa .Data [_dcgg ],0xff,_egfb );_dcgg +=_cadaa .RowStride ;};};case PixNotDst :for _ggcf =0;_ggcf < _faaac ;
|
|
_ggcf ++{_cadaa .Data [_abge ]=_efca (_cadaa .Data [_abge ],^_cadaa .Data [_abge ],_bgdgf );_abge +=_cadaa .RowStride ;};if _dbgd {for _ggcf =0;_ggcf < _faaac ;_ggcf ++{for _bdgc =0;_bdgc < _afgf ;_bdgc ++{_cadaa .Data [_aeee +_bdgc ]=^(_cadaa .Data [_aeee +_bdgc ]);
|
|
};_aeee +=_cadaa .RowStride ;};};if _eeceb {for _ggcf =0;_ggcf < _faaac ;_ggcf ++{_cadaa .Data [_dcgg ]=_efca (_cadaa .Data [_dcgg ],^_cadaa .Data [_dcgg ],_egfb );_dcgg +=_cadaa .RowStride ;};};};};func (_cfbc *Bitmap )GetByte (index int )(byte ,error ){if index > len (_cfbc .Data )-1||index < 0{return 0,_c .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 _cfbc .Data [index ],nil ;};func _ebbcc (_bbda *Bitmap ,_eecd int )(*Bitmap ,error ){const _agffd ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _bbda ==nil {return nil ,_c .Error (_agffd ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _eecd <=0{return nil ,_c .Error (_agffd ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _eecd ==1{_ebeeb ,_abede :=_gcag (nil ,_bbda );if _abede !=nil {return nil ,_c .Wrap (_abede ,_agffd ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");
|
|
};return _ebeeb ,nil ;};_cdee ,_aggff :=_bbc (_bbda ,_eecd ,_eecd );if _aggff !=nil {return nil ,_c .Wrap (_aggff ,_agffd ,"");};return _cdee ,nil ;};func _cdaf (_gddfd ,_cgad int ,_fcag string )*Selection {_geaa :=&Selection {Height :_gddfd ,Width :_cgad ,Name :_fcag };
|
|
_geaa .Data =make ([][]SelectionValue ,_gddfd );for _acdg :=0;_acdg < _gddfd ;_acdg ++{_geaa .Data [_acdg ]=make ([]SelectionValue ,_cgad );};return _geaa ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func (_bab *Bitmap )GetUnpaddedData ()([]byte ,error ){_dfea :=uint (_bab .Width &0x07);
|
|
if _dfea ==0{return _bab .Data ,nil ;};_fcgc :=_bab .Width *_bab .Height ;if _fcgc %8!=0{_fcgc >>=3;_fcgc ++;}else {_fcgc >>=3;};_fgea :=make ([]byte ,_fcgc );_bcde :=_ba .NewWriterMSB (_fgea );const _gecd ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
|
|
for _bbbg :=0;_bbbg < _bab .Height ;_bbbg ++{for _faca :=0;_faca < _bab .RowStride ;_faca ++{_gcf :=_bab .Data [_bbbg *_bab .RowStride +_faca ];if _faca !=_bab .RowStride -1{_egac :=_bcde .WriteByte (_gcf );if _egac !=nil {return nil ,_c .Wrap (_egac ,_gecd ,"");
|
|
};continue ;};for _fbc :=uint (0);_fbc < _dfea ;_fbc ++{_aafa :=_bcde .WriteBit (int (_gcf >>(7-_fbc )&0x01));if _aafa !=nil {return nil ,_c .Wrap (_aafa ,_gecd ,"");};};};};return _fgea ,nil ;};func (_gdab *ClassedPoints )YAtIndex (i int )float32 {return (*_gdab .Points )[_gdab .IntSlice [i ]].Y };
|
|
func (_bbcdb *Bitmaps )selectByIndexes (_dfgd []int )(*Bitmaps ,error ){_beeef :=&Bitmaps {};for _ ,_cecg :=range _dfgd {_dgad ,_ddce :=_bbcdb .GetBitmap (_cecg );if _ddce !=nil {return nil ,_c .Wrap (_ddce ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");
|
|
};_beeef .AddBitmap (_dgad );};return _beeef ,nil ;};type byWidth Bitmaps ;func _ecce (_cfcc *Bitmap ,_cfdce *_d .Stack ,_cadg ,_cdefc int )(_cbgg *_da .Rectangle ,_bffd error ){const _aeab ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
|
|
if _cfcc ==nil {return nil ,_c .Error (_aeab ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _cfdce ==nil {return nil ,_c .Error (_aeab ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
|
|
};_dagd ,_effd :=_cfcc .Width ,_cfcc .Height ;_fbeg :=_dagd -1;_cdecb :=_effd -1;if _cadg < 0||_cadg > _fbeg ||_cdefc < 0||_cdefc > _cdecb ||!_cfcc .GetPixel (_cadg ,_cdefc ){return nil ,nil ;};_fbeb :=_da .Rect (100000,100000,0,0);if _bffd =_cagb (_cfdce ,_cadg ,_cadg ,_cdefc ,1,_cdecb ,&_fbeb );
|
|
_bffd !=nil {return nil ,_c .Wrap (_bffd ,_aeab ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bffd =_cagb (_cfdce ,_cadg ,_cadg ,_cdefc +1,-1,_cdecb ,&_fbeb );_bffd !=nil {return nil ,_c .Wrap (_bffd ,_aeab ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
|
|
};_fbeb .Min .X ,_fbeb .Max .X =_cadg ,_cadg ;_fbeb .Min .Y ,_fbeb .Max .Y =_cdefc ,_cdefc ;var (_cdfe *fillSegment ;_babd int ;);for _cfdce .Len ()> 0{if _cdfe ,_bffd =_cfbb (_cfdce );_bffd !=nil {return nil ,_c .Wrap (_bffd ,_aeab ,"");};_cdefc =_cdfe ._afegc ;
|
|
for _cadg =_cdfe ._egef -1;_cadg >=0&&_cfcc .GetPixel (_cadg ,_cdefc );_cadg --{if _bffd =_cfcc .SetPixel (_cadg ,_cdefc ,0);_bffd !=nil {return nil ,_c .Wrap (_bffd ,_aeab ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _cadg >=_cdfe ._egef -1{for {for _cadg ++;
|
|
_cadg <=_cdfe ._gbdb +1&&_cadg <=_fbeg &&!_cfcc .GetPixel (_cadg ,_cdefc );_cadg ++{};_babd =_cadg ;if !(_cadg <=_cdfe ._gbdb +1&&_cadg <=_fbeg ){break ;};for ;_cadg <=_fbeg &&_cfcc .GetPixel (_cadg ,_cdefc );_cadg ++{if _bffd =_cfcc .SetPixel (_cadg ,_cdefc ,0);
|
|
_bffd !=nil {return nil ,_c .Wrap (_bffd ,_aeab ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bffd =_cagb (_cfdce ,_babd ,_cadg -1,_cdfe ._afegc ,_cdfe ._aafag ,_cdecb ,&_fbeb );_bffd !=nil {return nil ,_c .Wrap (_bffd ,_aeab ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
|
|
};if _cadg > _cdfe ._gbdb {if _bffd =_cagb (_cfdce ,_cdfe ._gbdb +1,_cadg -1,_cdfe ._afegc ,-_cdfe ._aafag ,_cdecb ,&_fbeb );_bffd !=nil {return nil ,_c .Wrap (_bffd ,_aeab ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};};continue ;};_babd =_cadg +1;if _babd < _cdfe ._egef {if _bffd =_cagb (_cfdce ,_babd ,_cdfe ._egef -1,_cdfe ._afegc ,-_cdfe ._aafag ,_cdecb ,&_fbeb );_bffd !=nil {return nil ,_c .Wrap (_bffd ,_aeab ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
|
|
};};_cadg =_cdfe ._egef ;for {for ;_cadg <=_fbeg &&_cfcc .GetPixel (_cadg ,_cdefc );_cadg ++{if _bffd =_cfcc .SetPixel (_cadg ,_cdefc ,0);_bffd !=nil {return nil ,_c .Wrap (_bffd ,_aeab ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bffd =_cagb (_cfdce ,_babd ,_cadg -1,_cdfe ._afegc ,_cdfe ._aafag ,_cdecb ,&_fbeb );
|
|
_bffd !=nil {return nil ,_c .Wrap (_bffd ,_aeab ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cadg > _cdfe ._gbdb {if _bffd =_cagb (_cfdce ,_cdfe ._gbdb +1,_cadg -1,_cdfe ._afegc ,-_cdfe ._aafag ,_cdecb ,&_fbeb );_bffd !=nil {return nil ,_c .Wrap (_bffd ,_aeab ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};for _cadg ++;_cadg <=_cdfe ._gbdb +1&&_cadg <=_fbeg &&!_cfcc .GetPixel (_cadg ,_cdefc );_cadg ++{};_babd =_cadg ;if !(_cadg <=_cdfe ._gbdb +1&&_cadg <=_fbeg ){break ;};};};_fbeb .Max .X ++;_fbeb .Max .Y ++;return &_fbeb ,nil ;};func (_cefb *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_bcaa *Bitmaps ,_cbeg *Boxes ,_ddca error ){const _ggcg ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
|
|
if _cefb ==nil {return nil ,nil ,_c .Error (_ggcg ,"\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 ,_c .Error (_ggcg ,"\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 _cefb .Zero (){_cbeg =&Boxes {};_bcaa =&Bitmaps {};return _bcaa ,_cbeg ,nil ;};switch components {case ComponentConn :_bcaa =&Bitmaps {};if _cbeg ,_ddca =_cefb .ConnComponents (_bcaa ,8);_ddca !=nil {return nil ,nil ,_c .Wrap (_ddca ,_ggcg ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};case ComponentCharacters :_gce ,_efga :=MorphSequence (_cefb ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _efga !=nil {return nil ,nil ,_c .Wrap (_efga ,_ggcg ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};if _gb .Log .IsLogLevel (_gb .LogLevelTrace ){_gb .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",_gce .String ());
|
|
};_bfbea :=&Bitmaps {};_cbeg ,_efga =_gce .ConnComponents (_bfbea ,8);if _efga !=nil {return nil ,nil ,_c .Wrap (_efga ,_ggcg ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};if _gb .Log .IsLogLevel (_gb .LogLevelTrace ){_gb .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",_bfbea .String ());
|
|
};if _bcaa ,_efga =_bfbea .ClipToBitmap (_cefb );_efga !=nil {return nil ,nil ,_c .Wrap (_efga ,_ggcg ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_acbg :=1;
|
|
var _gcdf *Bitmap ;switch {case _cefb .XResolution <=200:_gcdf =_cefb ;case _cefb .XResolution <=400:_acbg =2;_gcdf ,_ddca =_cgca (_cefb ,1,0,0,0);if _ddca !=nil {return nil ,nil ,_c .Wrap (_ddca ,_ggcg ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
|
|
};default:_acbg =4;_gcdf ,_ddca =_cgca (_cefb ,1,1,0,0);if _ddca !=nil {return nil ,nil ,_c .Wrap (_ddca ,_ggcg ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
|
|
};};_ccff ,_ ,_fgg :=_dbae (_gcdf );if _fgg !=nil {return nil ,nil ,_c .Wrap (_fgg ,_ggcg ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_efdd ,_fgg :=_ebbcc (_ccff ,_acbg );if _fgg !=nil {return nil ,nil ,_c .Wrap (_fgg ,_ggcg ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
|
|
};_gadf :=&Bitmaps {};if _cbeg ,_fgg =_efdd .ConnComponents (_gadf ,4);_fgg !=nil {return nil ,nil ,_c .Wrap (_fgg ,_ggcg ,"\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 _bcaa ,_fgg =_gadf .ClipToBitmap (_cefb );_fgg !=nil {return nil ,nil ,_c .Wrap (_fgg ,_ggcg ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_bcaa ,_ddca =_bcaa .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
|
|
if _ddca !=nil {return nil ,nil ,_c .Wrap (_ddca ,_ggcg ,"");};_cbeg ,_ddca =_cbeg .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _ddca !=nil {return nil ,nil ,_c .Wrap (_ddca ,_ggcg ,"");};return _bcaa ,_cbeg ,nil ;};func Rect (x ,y ,w ,h int )(*_da .Rectangle ,error ){const _cacb ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";
|
|
if x < 0{w +=x ;x =0;if w <=0{return nil ,_c .Errorf (_cacb ,"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 ,_c .Error (_cacb ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");
|
|
};};_cfab :=_da .Rect (x ,y ,x +w ,y +h );return &_cfab ,nil ;};func _geb (_ce *Bitmap ,_faff int )(*Bitmap ,error ){const _fg ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _ce ==nil {return nil ,_c .Error (_fg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _faff ==1{return _gcag (nil ,_ce );};if _faff !=2&&_faff !=4&&_faff !=8{return nil ,_c .Error (_fg ,"\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");
|
|
};_cc :=_faff *_ce .Width ;_geg :=_faff *_ce .Height ;_bgd :=New (_cc ,_geg );var _fc error ;switch _faff {case 2:_fc =_e (_bgd ,_ce );case 4:_fc =_baaf (_bgd ,_ce );case 8:_fc =_bfd (_bgd ,_ce );};if _fc !=nil {return nil ,_c .Wrap (_fc ,_fg ,"");};return _bgd ,nil ;
|
|
};func (_ggedf *byWidth )Len ()int {return len (_ggedf .Values )};var _ebc [256]uint8 ;func _dffe (_gegef ...MorphProcess )(_cfag error ){const _adff ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _cafb ,_cgda int ;
|
|
for _gdba ,_dbef :=range _gegef {if _cfag =_dbef .verify (_gdba ,&_cafb ,&_cgda );_cfag !=nil {return _c .Wrap (_cfag ,_adff ,"");};};if _cgda !=0&&_cafb !=0{return _c .Error (_adff ,"\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 (_bbbb *Bitmap )GetChocolateData ()[]byte {if _bbbb .Color ==Vanilla {_bbbb .inverseData ();};return _bbbb .Data ;};func (_bfgfe *ClassedPoints )Swap (i ,j int ){_bfgfe .IntSlice [i ],_bfgfe .IntSlice [j ]=_bfgfe .IntSlice [j ],_bfgfe .IntSlice [i ];
|
|
};func (_ffge *Bitmaps )GetBox (i int )(*_da .Rectangle ,error ){const _afaec ="\u0047\u0065\u0074\u0042\u006f\u0078";if _ffge ==nil {return nil ,_c .Error (_afaec ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");
|
|
};if i > len (_ffge .Boxes )-1{return nil ,_c .Errorf (_afaec ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ffge .Boxes [i ],nil ;};func (_egbc *Bitmap )CreateTemplate ()*Bitmap {return _egbc .createTemplate ()};
|
|
func (_cebe *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _gbcec (_cebe ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;
|
|
Special int ;Text string ;XResolution ,YResolution int ;};func TstNSymbol (t *_b .T ,scale ...int )*Bitmap {_cdfb ,_abad :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_f .NoError (t ,_abad );return TstGetScaledSymbol (t ,_cdfb ,scale ...);};func (_fged *Bitmaps )Size ()int {return len (_fged .Values )};
|
|
func _ab ()(_eac [256]uint32 ){for _fag :=0;_fag < 256;_fag ++{if _fag &0x01!=0{_eac [_fag ]|=0xf;};if _fag &0x02!=0{_eac [_fag ]|=0xf0;};if _fag &0x04!=0{_eac [_fag ]|=0xf00;};if _fag &0x08!=0{_eac [_fag ]|=0xf000;};if _fag &0x10!=0{_eac [_fag ]|=0xf0000;
|
|
};if _fag &0x20!=0{_eac [_fag ]|=0xf00000;};if _fag &0x40!=0{_eac [_fag ]|=0xf000000;};if _fag &0x80!=0{_eac [_fag ]|=0xf0000000;};};return _eac ;};func (_eabd *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _decc ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";
|
|
_gegeg ,_afbba :=_eabd .selectByIndexes (idx );if _afbba !=nil {return nil ,_c .Wrap (_afbba ,_decc ,"");};return _gegeg ,nil ;};func (_eda *Bitmaps )CountPixels ()*_d .NumSlice {_ffag :=&_d .NumSlice {};for _ ,_febg :=range _eda .Values {_ffag .AddInt (_febg .CountPixels ());
|
|
};return _ffag ;};func (_cdeb *Bitmaps )HeightSorter ()func (_febca ,_ddge int )bool {return func (_aabgd ,_badcc int )bool {_dcff :=_cdeb .Values [_aabgd ].Height < _cdeb .Values [_badcc ].Height ;_gb .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_cdeb .Values [_aabgd ].Height ,_cdeb .Values [_badcc ].Height ,_dcff );
|
|
return _dcff ;};};func (_bbff *Bitmap )ClipRectangle (box *_da .Rectangle )(_daac *Bitmap ,_cdec *_da .Rectangle ,_cdd error ){const _bcg ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_c .Error (_bcg ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};_bdc ,_dbf :=_bbff .Width ,_bbff .Height ;_afa :=_da .Rect (0,0,_bdc ,_dbf );if !box .Overlaps (_afa ){return nil ,nil ,_c .Error (_bcg ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_gca :=box .Intersect (_afa );
|
|
_fdg ,_dec :=_gca .Min .X ,_gca .Min .Y ;_cfc ,_gfb :=_gca .Dx (),_gca .Dy ();_daac =New (_cfc ,_gfb );_daac .Text =_bbff .Text ;if _cdd =_daac .RasterOperation (0,0,_cfc ,_gfb ,PixSrc ,_bbff ,_fdg ,_dec );_cdd !=nil {return nil ,nil ,_c .Wrap (_cdd ,_bcg ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
|
|
};_cdec =&_gca ;return _daac ,_cdec ,nil ;};func _ebcd (_ccad *Bitmap ,_affg ,_beaf ,_dcbd ,_bgebg int ,_daafd RasterOperator ,_agb *Bitmap ,_bbdf ,_babfa int )error {var (_fafaf bool ;_defe bool ;_fbfc byte ;_dacc int ;_cgce int ;_gaggc int ;_beba int ;
|
|
_dffc bool ;_aafaf int ;_dgfd int ;_acea int ;_fbbbb bool ;_aceg byte ;_bgcef int ;_fdad int ;_fdfb int ;_defge byte ;_feed int ;_cdccg int ;_afegg uint ;_gbae uint ;_gcc byte ;_edfdg shift ;_edcf bool ;_gaad bool ;_ddec ,_ggcc int ;);if _bbdf &7!=0{_cdccg =8-(_bbdf &7);
|
|
};if _affg &7!=0{_cgce =8-(_affg &7);};if _cdccg ==0&&_cgce ==0{_gcc =_agdg [0];}else {if _cgce > _cdccg {_afegg =uint (_cgce -_cdccg );}else {_afegg =uint (8-(_cdccg -_cgce ));};_gbae =8-_afegg ;_gcc =_agdg [_afegg ];};if (_affg &7)!=0{_fafaf =true ;_dacc =8-(_affg &7);
|
|
_fbfc =_agdg [_dacc ];_gaggc =_ccad .RowStride *_beaf +(_affg >>3);_beba =_agb .RowStride *_babfa +(_bbdf >>3);_feed =8-(_bbdf &7);if _dacc > _feed {_edfdg =_agaec ;if _dcbd >=_cdccg {_edcf =true ;};}else {_edfdg =_adeag ;};};if _dcbd < _dacc {_defe =true ;
|
|
_fbfc &=_adfg [8-_dacc +_dcbd ];};if !_defe {_aafaf =(_dcbd -_dacc )>>3;if _aafaf !=0{_dffc =true ;_dgfd =_ccad .RowStride *_beaf +((_affg +_cgce )>>3);_acea =_agb .RowStride *_babfa +((_bbdf +_cgce )>>3);};};_bgcef =(_affg +_dcbd )&7;if !(_defe ||_bgcef ==0){_fbbbb =true ;
|
|
_aceg =_adfg [_bgcef ];_fdad =_ccad .RowStride *_beaf +((_affg +_cgce )>>3)+_aafaf ;_fdfb =_agb .RowStride *_babfa +((_bbdf +_cgce )>>3)+_aafaf ;if _bgcef > int (_gbae ){_gaad =true ;};};switch _daafd {case PixSrc :if _fafaf {for _ddec =0;_ddec < _bgebg ;
|
|
_ddec ++{if _edfdg ==_agaec {_defge =_agb .Data [_beba ]<<_afegg ;if _edcf {_defge =_efca (_defge ,_agb .Data [_beba +1]>>_gbae ,_gcc );};}else {_defge =_agb .Data [_beba ]>>_gbae ;};_ccad .Data [_gaggc ]=_efca (_ccad .Data [_gaggc ],_defge ,_fbfc );_gaggc +=_ccad .RowStride ;
|
|
_beba +=_agb .RowStride ;};};if _dffc {for _ddec =0;_ddec < _bgebg ;_ddec ++{for _ggcc =0;_ggcc < _aafaf ;_ggcc ++{_defge =_efca (_agb .Data [_acea +_ggcc ]<<_afegg ,_agb .Data [_acea +_ggcc +1]>>_gbae ,_gcc );_ccad .Data [_dgfd +_ggcc ]=_defge ;};_dgfd +=_ccad .RowStride ;
|
|
_acea +=_agb .RowStride ;};};if _fbbbb {for _ddec =0;_ddec < _bgebg ;_ddec ++{_defge =_agb .Data [_fdfb ]<<_afegg ;if _gaad {_defge =_efca (_defge ,_agb .Data [_fdfb +1]>>_gbae ,_gcc );};_ccad .Data [_fdad ]=_efca (_ccad .Data [_fdad ],_defge ,_aceg );
|
|
_fdad +=_ccad .RowStride ;_fdfb +=_agb .RowStride ;};};case PixNotSrc :if _fafaf {for _ddec =0;_ddec < _bgebg ;_ddec ++{if _edfdg ==_agaec {_defge =_agb .Data [_beba ]<<_afegg ;if _edcf {_defge =_efca (_defge ,_agb .Data [_beba +1]>>_gbae ,_gcc );};}else {_defge =_agb .Data [_beba ]>>_gbae ;
|
|
};_ccad .Data [_gaggc ]=_efca (_ccad .Data [_gaggc ],^_defge ,_fbfc );_gaggc +=_ccad .RowStride ;_beba +=_agb .RowStride ;};};if _dffc {for _ddec =0;_ddec < _bgebg ;_ddec ++{for _ggcc =0;_ggcc < _aafaf ;_ggcc ++{_defge =_efca (_agb .Data [_acea +_ggcc ]<<_afegg ,_agb .Data [_acea +_ggcc +1]>>_gbae ,_gcc );
|
|
_ccad .Data [_dgfd +_ggcc ]=^_defge ;};_dgfd +=_ccad .RowStride ;_acea +=_agb .RowStride ;};};if _fbbbb {for _ddec =0;_ddec < _bgebg ;_ddec ++{_defge =_agb .Data [_fdfb ]<<_afegg ;if _gaad {_defge =_efca (_defge ,_agb .Data [_fdfb +1]>>_gbae ,_gcc );};
|
|
_ccad .Data [_fdad ]=_efca (_ccad .Data [_fdad ],^_defge ,_aceg );_fdad +=_ccad .RowStride ;_fdfb +=_agb .RowStride ;};};case PixSrcOrDst :if _fafaf {for _ddec =0;_ddec < _bgebg ;_ddec ++{if _edfdg ==_agaec {_defge =_agb .Data [_beba ]<<_afegg ;if _edcf {_defge =_efca (_defge ,_agb .Data [_beba +1]>>_gbae ,_gcc );
|
|
};}else {_defge =_agb .Data [_beba ]>>_gbae ;};_ccad .Data [_gaggc ]=_efca (_ccad .Data [_gaggc ],_defge |_ccad .Data [_gaggc ],_fbfc );_gaggc +=_ccad .RowStride ;_beba +=_agb .RowStride ;};};if _dffc {for _ddec =0;_ddec < _bgebg ;_ddec ++{for _ggcc =0;
|
|
_ggcc < _aafaf ;_ggcc ++{_defge =_efca (_agb .Data [_acea +_ggcc ]<<_afegg ,_agb .Data [_acea +_ggcc +1]>>_gbae ,_gcc );_ccad .Data [_dgfd +_ggcc ]|=_defge ;};_dgfd +=_ccad .RowStride ;_acea +=_agb .RowStride ;};};if _fbbbb {for _ddec =0;_ddec < _bgebg ;
|
|
_ddec ++{_defge =_agb .Data [_fdfb ]<<_afegg ;if _gaad {_defge =_efca (_defge ,_agb .Data [_fdfb +1]>>_gbae ,_gcc );};_ccad .Data [_fdad ]=_efca (_ccad .Data [_fdad ],_defge |_ccad .Data [_fdad ],_aceg );_fdad +=_ccad .RowStride ;_fdfb +=_agb .RowStride ;
|
|
};};case PixSrcAndDst :if _fafaf {for _ddec =0;_ddec < _bgebg ;_ddec ++{if _edfdg ==_agaec {_defge =_agb .Data [_beba ]<<_afegg ;if _edcf {_defge =_efca (_defge ,_agb .Data [_beba +1]>>_gbae ,_gcc );};}else {_defge =_agb .Data [_beba ]>>_gbae ;};_ccad .Data [_gaggc ]=_efca (_ccad .Data [_gaggc ],_defge &_ccad .Data [_gaggc ],_fbfc );
|
|
_gaggc +=_ccad .RowStride ;_beba +=_agb .RowStride ;};};if _dffc {for _ddec =0;_ddec < _bgebg ;_ddec ++{for _ggcc =0;_ggcc < _aafaf ;_ggcc ++{_defge =_efca (_agb .Data [_acea +_ggcc ]<<_afegg ,_agb .Data [_acea +_ggcc +1]>>_gbae ,_gcc );_ccad .Data [_dgfd +_ggcc ]&=_defge ;
|
|
};_dgfd +=_ccad .RowStride ;_acea +=_agb .RowStride ;};};if _fbbbb {for _ddec =0;_ddec < _bgebg ;_ddec ++{_defge =_agb .Data [_fdfb ]<<_afegg ;if _gaad {_defge =_efca (_defge ,_agb .Data [_fdfb +1]>>_gbae ,_gcc );};_ccad .Data [_fdad ]=_efca (_ccad .Data [_fdad ],_defge &_ccad .Data [_fdad ],_aceg );
|
|
_fdad +=_ccad .RowStride ;_fdfb +=_agb .RowStride ;};};case PixSrcXorDst :if _fafaf {for _ddec =0;_ddec < _bgebg ;_ddec ++{if _edfdg ==_agaec {_defge =_agb .Data [_beba ]<<_afegg ;if _edcf {_defge =_efca (_defge ,_agb .Data [_beba +1]>>_gbae ,_gcc );};
|
|
}else {_defge =_agb .Data [_beba ]>>_gbae ;};_ccad .Data [_gaggc ]=_efca (_ccad .Data [_gaggc ],_defge ^_ccad .Data [_gaggc ],_fbfc );_gaggc +=_ccad .RowStride ;_beba +=_agb .RowStride ;};};if _dffc {for _ddec =0;_ddec < _bgebg ;_ddec ++{for _ggcc =0;_ggcc < _aafaf ;
|
|
_ggcc ++{_defge =_efca (_agb .Data [_acea +_ggcc ]<<_afegg ,_agb .Data [_acea +_ggcc +1]>>_gbae ,_gcc );_ccad .Data [_dgfd +_ggcc ]^=_defge ;};_dgfd +=_ccad .RowStride ;_acea +=_agb .RowStride ;};};if _fbbbb {for _ddec =0;_ddec < _bgebg ;_ddec ++{_defge =_agb .Data [_fdfb ]<<_afegg ;
|
|
if _gaad {_defge =_efca (_defge ,_agb .Data [_fdfb +1]>>_gbae ,_gcc );};_ccad .Data [_fdad ]=_efca (_ccad .Data [_fdad ],_defge ^_ccad .Data [_fdad ],_aceg );_fdad +=_ccad .RowStride ;_fdfb +=_agb .RowStride ;};};case PixNotSrcOrDst :if _fafaf {for _ddec =0;
|
|
_ddec < _bgebg ;_ddec ++{if _edfdg ==_agaec {_defge =_agb .Data [_beba ]<<_afegg ;if _edcf {_defge =_efca (_defge ,_agb .Data [_beba +1]>>_gbae ,_gcc );};}else {_defge =_agb .Data [_beba ]>>_gbae ;};_ccad .Data [_gaggc ]=_efca (_ccad .Data [_gaggc ],^_defge |_ccad .Data [_gaggc ],_fbfc );
|
|
_gaggc +=_ccad .RowStride ;_beba +=_agb .RowStride ;};};if _dffc {for _ddec =0;_ddec < _bgebg ;_ddec ++{for _ggcc =0;_ggcc < _aafaf ;_ggcc ++{_defge =_efca (_agb .Data [_acea +_ggcc ]<<_afegg ,_agb .Data [_acea +_ggcc +1]>>_gbae ,_gcc );_ccad .Data [_dgfd +_ggcc ]|=^_defge ;
|
|
};_dgfd +=_ccad .RowStride ;_acea +=_agb .RowStride ;};};if _fbbbb {for _ddec =0;_ddec < _bgebg ;_ddec ++{_defge =_agb .Data [_fdfb ]<<_afegg ;if _gaad {_defge =_efca (_defge ,_agb .Data [_fdfb +1]>>_gbae ,_gcc );};_ccad .Data [_fdad ]=_efca (_ccad .Data [_fdad ],^_defge |_ccad .Data [_fdad ],_aceg );
|
|
_fdad +=_ccad .RowStride ;_fdfb +=_agb .RowStride ;};};case PixNotSrcAndDst :if _fafaf {for _ddec =0;_ddec < _bgebg ;_ddec ++{if _edfdg ==_agaec {_defge =_agb .Data [_beba ]<<_afegg ;if _edcf {_defge =_efca (_defge ,_agb .Data [_beba +1]>>_gbae ,_gcc );
|
|
};}else {_defge =_agb .Data [_beba ]>>_gbae ;};_ccad .Data [_gaggc ]=_efca (_ccad .Data [_gaggc ],^_defge &_ccad .Data [_gaggc ],_fbfc );_gaggc +=_ccad .RowStride ;_beba +=_agb .RowStride ;};};if _dffc {for _ddec =0;_ddec < _bgebg ;_ddec ++{for _ggcc =0;
|
|
_ggcc < _aafaf ;_ggcc ++{_defge =_efca (_agb .Data [_acea +_ggcc ]<<_afegg ,_agb .Data [_acea +_ggcc +1]>>_gbae ,_gcc );_ccad .Data [_dgfd +_ggcc ]&=^_defge ;};_dgfd +=_ccad .RowStride ;_acea +=_agb .RowStride ;};};if _fbbbb {for _ddec =0;_ddec < _bgebg ;
|
|
_ddec ++{_defge =_agb .Data [_fdfb ]<<_afegg ;if _gaad {_defge =_efca (_defge ,_agb .Data [_fdfb +1]>>_gbae ,_gcc );};_ccad .Data [_fdad ]=_efca (_ccad .Data [_fdad ],^_defge &_ccad .Data [_fdad ],_aceg );_fdad +=_ccad .RowStride ;_fdfb +=_agb .RowStride ;
|
|
};};case PixSrcOrNotDst :if _fafaf {for _ddec =0;_ddec < _bgebg ;_ddec ++{if _edfdg ==_agaec {_defge =_agb .Data [_beba ]<<_afegg ;if _edcf {_defge =_efca (_defge ,_agb .Data [_beba +1]>>_gbae ,_gcc );};}else {_defge =_agb .Data [_beba ]>>_gbae ;};_ccad .Data [_gaggc ]=_efca (_ccad .Data [_gaggc ],_defge |^_ccad .Data [_gaggc ],_fbfc );
|
|
_gaggc +=_ccad .RowStride ;_beba +=_agb .RowStride ;};};if _dffc {for _ddec =0;_ddec < _bgebg ;_ddec ++{for _ggcc =0;_ggcc < _aafaf ;_ggcc ++{_defge =_efca (_agb .Data [_acea +_ggcc ]<<_afegg ,_agb .Data [_acea +_ggcc +1]>>_gbae ,_gcc );_ccad .Data [_dgfd +_ggcc ]=_defge |^_ccad .Data [_dgfd +_ggcc ];
|
|
};_dgfd +=_ccad .RowStride ;_acea +=_agb .RowStride ;};};if _fbbbb {for _ddec =0;_ddec < _bgebg ;_ddec ++{_defge =_agb .Data [_fdfb ]<<_afegg ;if _gaad {_defge =_efca (_defge ,_agb .Data [_fdfb +1]>>_gbae ,_gcc );};_ccad .Data [_fdad ]=_efca (_ccad .Data [_fdad ],_defge |^_ccad .Data [_fdad ],_aceg );
|
|
_fdad +=_ccad .RowStride ;_fdfb +=_agb .RowStride ;};};case PixSrcAndNotDst :if _fafaf {for _ddec =0;_ddec < _bgebg ;_ddec ++{if _edfdg ==_agaec {_defge =_agb .Data [_beba ]<<_afegg ;if _edcf {_defge =_efca (_defge ,_agb .Data [_beba +1]>>_gbae ,_gcc );
|
|
};}else {_defge =_agb .Data [_beba ]>>_gbae ;};_ccad .Data [_gaggc ]=_efca (_ccad .Data [_gaggc ],_defge &^_ccad .Data [_gaggc ],_fbfc );_gaggc +=_ccad .RowStride ;_beba +=_agb .RowStride ;};};if _dffc {for _ddec =0;_ddec < _bgebg ;_ddec ++{for _ggcc =0;
|
|
_ggcc < _aafaf ;_ggcc ++{_defge =_efca (_agb .Data [_acea +_ggcc ]<<_afegg ,_agb .Data [_acea +_ggcc +1]>>_gbae ,_gcc );_ccad .Data [_dgfd +_ggcc ]=_defge &^_ccad .Data [_dgfd +_ggcc ];};_dgfd +=_ccad .RowStride ;_acea +=_agb .RowStride ;};};if _fbbbb {for _ddec =0;
|
|
_ddec < _bgebg ;_ddec ++{_defge =_agb .Data [_fdfb ]<<_afegg ;if _gaad {_defge =_efca (_defge ,_agb .Data [_fdfb +1]>>_gbae ,_gcc );};_ccad .Data [_fdad ]=_efca (_ccad .Data [_fdad ],_defge &^_ccad .Data [_fdad ],_aceg );_fdad +=_ccad .RowStride ;_fdfb +=_agb .RowStride ;
|
|
};};case PixNotPixSrcOrDst :if _fafaf {for _ddec =0;_ddec < _bgebg ;_ddec ++{if _edfdg ==_agaec {_defge =_agb .Data [_beba ]<<_afegg ;if _edcf {_defge =_efca (_defge ,_agb .Data [_beba +1]>>_gbae ,_gcc );};}else {_defge =_agb .Data [_beba ]>>_gbae ;};_ccad .Data [_gaggc ]=_efca (_ccad .Data [_gaggc ],^(_defge |_ccad .Data [_gaggc ]),_fbfc );
|
|
_gaggc +=_ccad .RowStride ;_beba +=_agb .RowStride ;};};if _dffc {for _ddec =0;_ddec < _bgebg ;_ddec ++{for _ggcc =0;_ggcc < _aafaf ;_ggcc ++{_defge =_efca (_agb .Data [_acea +_ggcc ]<<_afegg ,_agb .Data [_acea +_ggcc +1]>>_gbae ,_gcc );_ccad .Data [_dgfd +_ggcc ]=^(_defge |_ccad .Data [_dgfd +_ggcc ]);
|
|
};_dgfd +=_ccad .RowStride ;_acea +=_agb .RowStride ;};};if _fbbbb {for _ddec =0;_ddec < _bgebg ;_ddec ++{_defge =_agb .Data [_fdfb ]<<_afegg ;if _gaad {_defge =_efca (_defge ,_agb .Data [_fdfb +1]>>_gbae ,_gcc );};_ccad .Data [_fdad ]=_efca (_ccad .Data [_fdad ],^(_defge |_ccad .Data [_fdad ]),_aceg );
|
|
_fdad +=_ccad .RowStride ;_fdfb +=_agb .RowStride ;};};case PixNotPixSrcAndDst :if _fafaf {for _ddec =0;_ddec < _bgebg ;_ddec ++{if _edfdg ==_agaec {_defge =_agb .Data [_beba ]<<_afegg ;if _edcf {_defge =_efca (_defge ,_agb .Data [_beba +1]>>_gbae ,_gcc );
|
|
};}else {_defge =_agb .Data [_beba ]>>_gbae ;};_ccad .Data [_gaggc ]=_efca (_ccad .Data [_gaggc ],^(_defge &_ccad .Data [_gaggc ]),_fbfc );_gaggc +=_ccad .RowStride ;_beba +=_agb .RowStride ;};};if _dffc {for _ddec =0;_ddec < _bgebg ;_ddec ++{for _ggcc =0;
|
|
_ggcc < _aafaf ;_ggcc ++{_defge =_efca (_agb .Data [_acea +_ggcc ]<<_afegg ,_agb .Data [_acea +_ggcc +1]>>_gbae ,_gcc );_ccad .Data [_dgfd +_ggcc ]=^(_defge &_ccad .Data [_dgfd +_ggcc ]);};_dgfd +=_ccad .RowStride ;_acea +=_agb .RowStride ;};};if _fbbbb {for _ddec =0;
|
|
_ddec < _bgebg ;_ddec ++{_defge =_agb .Data [_fdfb ]<<_afegg ;if _gaad {_defge =_efca (_defge ,_agb .Data [_fdfb +1]>>_gbae ,_gcc );};_ccad .Data [_fdad ]=_efca (_ccad .Data [_fdad ],^(_defge &_ccad .Data [_fdad ]),_aceg );_fdad +=_ccad .RowStride ;_fdfb +=_agb .RowStride ;
|
|
};};case PixNotPixSrcXorDst :if _fafaf {for _ddec =0;_ddec < _bgebg ;_ddec ++{if _edfdg ==_agaec {_defge =_agb .Data [_beba ]<<_afegg ;if _edcf {_defge =_efca (_defge ,_agb .Data [_beba +1]>>_gbae ,_gcc );};}else {_defge =_agb .Data [_beba ]>>_gbae ;};
|
|
_ccad .Data [_gaggc ]=_efca (_ccad .Data [_gaggc ],^(_defge ^_ccad .Data [_gaggc ]),_fbfc );_gaggc +=_ccad .RowStride ;_beba +=_agb .RowStride ;};};if _dffc {for _ddec =0;_ddec < _bgebg ;_ddec ++{for _ggcc =0;_ggcc < _aafaf ;_ggcc ++{_defge =_efca (_agb .Data [_acea +_ggcc ]<<_afegg ,_agb .Data [_acea +_ggcc +1]>>_gbae ,_gcc );
|
|
_ccad .Data [_dgfd +_ggcc ]=^(_defge ^_ccad .Data [_dgfd +_ggcc ]);};_dgfd +=_ccad .RowStride ;_acea +=_agb .RowStride ;};};if _fbbbb {for _ddec =0;_ddec < _bgebg ;_ddec ++{_defge =_agb .Data [_fdfb ]<<_afegg ;if _gaad {_defge =_efca (_defge ,_agb .Data [_fdfb +1]>>_gbae ,_gcc );
|
|
};_ccad .Data [_fdad ]=_efca (_ccad .Data [_fdad ],^(_defge ^_ccad .Data [_fdad ]),_aceg );_fdad +=_ccad .RowStride ;_fdfb +=_agb .RowStride ;};};default:_gb .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",_daafd );
|
|
return _c .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 (_bgcc *Bitmap )SetPixel (x ,y int ,pixel byte )error {_eag :=_bgcc .GetByteIndex (x ,y );if _eag > len (_bgcc .Data )-1{return _c .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",_eag );
|
|
};_daf :=_bgcc .GetBitOffset (x );_ggc :=uint (7-_daf );_egf :=_bgcc .Data [_eag ];var _cac byte ;if pixel ==1{_cac =_egf |(pixel &0x01<<_ggc );}else {_cac =_egf &^(1<<_ggc );};_bgcc .Data [_eag ]=_cac ;return nil ;};func (_gbabe *Selection )findMaxTranslations ()(_egcc ,_ccgb ,_acae ,_adeg int ){for _bdec :=0;
|
|
_bdec < _gbabe .Height ;_bdec ++{for _gadeb :=0;_gadeb < _gbabe .Width ;_gadeb ++{if _gbabe .Data [_bdec ][_gadeb ]==SelHit {_egcc =_ddc (_egcc ,_gbabe .Cx -_gadeb );_ccgb =_ddc (_ccgb ,_gbabe .Cy -_bdec );_acae =_ddc (_acae ,_gadeb -_gbabe .Cx );_adeg =_ddc (_adeg ,_bdec -_gbabe .Cy );
|
|
};};};return _egcc ,_ccgb ,_acae ,_adeg ;};type SelectionValue int ;func (_bec *Bitmap )addBorderGeneral (_daaf ,_cdgb ,_gaa ,_gebc int ,_efe int )(*Bitmap ,error ){const _gbeg ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
|
|
if _daaf < 0||_cdgb < 0||_gaa < 0||_gebc < 0{return nil ,_c .Error (_gbeg ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_eecg ,_cacg :=_bec .Width ,_bec .Height ;_edf :=_eecg +_daaf +_cdgb ;
|
|
_edeaa :=_cacg +_gaa +_gebc ;_dgcd :=New (_edf ,_edeaa );_dgcd .Color =_bec .Color ;_dag :=PixClr ;if _efe > 0{_dag =PixSet ;};_dbg :=_dgcd .RasterOperation (0,0,_daaf ,_edeaa ,_dag ,nil ,0,0);if _dbg !=nil {return nil ,_c .Wrap (_dbg ,_gbeg ,"\u006c\u0065\u0066\u0074");
|
|
};_dbg =_dgcd .RasterOperation (_edf -_cdgb ,0,_cdgb ,_edeaa ,_dag ,nil ,0,0);if _dbg !=nil {return nil ,_c .Wrap (_dbg ,_gbeg ,"\u0072\u0069\u0067h\u0074");};_dbg =_dgcd .RasterOperation (0,0,_edf ,_gaa ,_dag ,nil ,0,0);if _dbg !=nil {return nil ,_c .Wrap (_dbg ,_gbeg ,"\u0074\u006f\u0070");
|
|
};_dbg =_dgcd .RasterOperation (0,_edeaa -_gebc ,_edf ,_gebc ,_dag ,nil ,0,0);if _dbg !=nil {return nil ,_c .Wrap (_dbg ,_gbeg ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_dbg =_dgcd .RasterOperation (_daaf ,_gaa ,_eecg ,_cacg ,PixSrc ,_bec ,0,0);if _dbg !=nil {return nil ,_c .Wrap (_dbg ,_gbeg ,"\u0063\u006f\u0070\u0079");
|
|
};return _dgcd ,nil ;};func (_bcecg *Bitmaps )SortByWidth (){_daafe :=(*byWidth )(_bcecg );_cd .Sort (_daafe )};type RasterOperator int ;type LocationFilter int ;func (_cded *Bitmap )GetBitOffset (x int )int {return x &0x07};var _ _cd .Interface =&ClassedPoints {};
|
|
func (_fbd *Bitmap )And (s *Bitmap )(_eaf *Bitmap ,_dba error ){const _ebe ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _fbd ==nil {return nil ,_c .Error (_ebe ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");
|
|
};if s ==nil {return nil ,_c .Error (_ebe ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_fbd .SizesEqual (s ){_gb .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",_ebe );
|
|
};if _eaf ,_dba =_gcag (_eaf ,_fbd );_dba !=nil {return nil ,_c .Wrap (_dba ,_ebe ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _dba =_eaf .RasterOperation (0,0,_eaf .Width ,_eaf .Height ,PixSrcAndDst ,s ,0,0);
|
|
_dba !=nil {return nil ,_c .Wrap (_dba ,_ebe ,"");};return _eaf ,nil ;};func TstWordBitmap (t *_b .T ,scale ...int )*Bitmap {_cgbde :=1;if len (scale )> 0{_cgbde =scale [0];};_afcb :=3;_ededc :=9+7+15+2*_afcb ;_eccbc :=5+_afcb +5;_gecdc :=New (_ededc *_cgbde ,_eccbc *_cgbde );
|
|
_bacb :=&Bitmaps {};var _feee *int ;_afcb *=_cgbde ;_bace :=0;_feee =&_bace ;_abag :=0;_facaf :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,1*_cgbde );_facaf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,_afcb );
|
|
_facaf =TstISymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,1*_cgbde );_facaf =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,_afcb );_facaf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,1*_cgbde );
|
|
_facaf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,1*_cgbde );_facaf =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,0);*_feee =0;_abag =5*_cgbde +_afcb ;_facaf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,1*_cgbde );
|
|
_facaf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,_afcb );_facaf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,1*_cgbde );_facaf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,1*_cgbde );
|
|
_facaf =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,1*_cgbde );_facaf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,1*_cgbde );_facaf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bacb ,_facaf ,_feee ,_abag ,0);
|
|
TstWriteSymbols (t ,_bacb ,_gecdc );return _gecdc ;};func (_ege *Bitmap )clipRectangle (_dcdg ,_bdg *_da .Rectangle )(_ffc *Bitmap ,_egdb error ){const _gffeb ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _dcdg ==nil {return nil ,_c .Error (_gffeb ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");
|
|
};_afbc ,_ffg :=_ege .Width ,_ege .Height ;_dbcc ,_egdb :=ClipBoxToRectangle (_dcdg ,_afbc ,_ffg );if _egdb !=nil {_gb .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",_egdb );
|
|
return nil ,nil ;};_afbcb ,_aef :=_dbcc .Min .X ,_dbcc .Min .Y ;_abd ,_acg :=_dbcc .Max .X -_dbcc .Min .X ,_dbcc .Max .Y -_dbcc .Min .Y ;_ffc =New (_abd ,_acg );_ffc .Text =_ege .Text ;if _egdb =_ffc .RasterOperation (0,0,_abd ,_acg ,PixSrc ,_ege ,_afbcb ,_aef );
|
|
_egdb !=nil {return nil ,_c .Wrap (_egdb ,_gffeb ,"");};if _bdg !=nil {*_bdg =*_dbcc ;};return _ffc ,nil ;};func (_cea *Bitmap )setTwoBytes (_adee int ,_abg uint16 )error {if _adee +1> len (_cea .Data )-1{return _c .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",_adee );
|
|
};_cea .Data [_adee ]=byte ((_abg &0xff00)>>8);_cea .Data [_adee +1]=byte (_abg &0xff);return nil ;};func (_bfde *Bitmap )addPadBits ()(_acce error ){const _agef ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";
|
|
_dea :=_bfde .Width %8;if _dea ==0{return nil ;};_bcdb :=_bfde .Width /8;_fbda :=_ba .NewReader (_bfde .Data );_fcda :=make ([]byte ,_bfde .Height *_bfde .RowStride );_gffcc :=_ba .NewWriterMSB (_fcda );_bed :=make ([]byte ,_bcdb );var (_bgf int ;_egc uint64 ;
|
|
);for _bgf =0;_bgf < _bfde .Height ;_bgf ++{if _ ,_acce =_fbda .Read (_bed );_acce !=nil {return _c .Wrap (_acce ,_agef ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_acce =_gffcc .Write (_bed );_acce !=nil {return _c .Wrap (_acce ,_agef ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");
|
|
};if _egc ,_acce =_fbda .ReadBits (byte (_dea ));_acce !=nil {return _c .Wrap (_acce ,_agef ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _acce =_gffcc .WriteByte (byte (_egc )<<uint (8-_dea ));_acce !=nil {return _c .Wrap (_acce ,_agef ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");
|
|
};};_bfde .Data =_gffcc .Data ();return nil ;};func (_caf *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _caf .removeBorderGeneral (left ,right ,top ,bot );};func _gbbe (_babfb ,_fddcc *Bitmap ,_abea ,_adfa int )(_eeacb error ){const _cccd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";
|
|
var (_egca ,_dgef ,_dffa ,_aaca int ;_gdcc ,_geca ,_ceeg ,_cgab ,_ddbbe ,_ceca ,_bbbge byte ;);for _egca =0;_egca < _abea ;_egca ++{_dffa =_egca *_babfb .RowStride ;_aaca =_egca *_fddcc .RowStride ;for _dgef =0;_dgef < _adfa ;_dgef ++{_gdcc ,_eeacb =_babfb .GetByte (_dffa +_dgef );
|
|
if _eeacb !=nil {return _c .Wrap (_eeacb ,_cccd ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_geca ,_eeacb =_fddcc .GetByte (_aaca +_dgef );if _eeacb !=nil {return _c .Wrap (_eeacb ,_cccd ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");
|
|
};if _egca > 0{_ceeg ,_eeacb =_babfb .GetByte (_dffa -_babfb .RowStride +_dgef );if _eeacb !=nil {return _c .Wrap (_eeacb ,_cccd ,"\u0069\u0020\u003e \u0030");};_gdcc |=_ceeg ;};if _dgef > 0{_cgab ,_eeacb =_babfb .GetByte (_dffa +_dgef -1);if _eeacb !=nil {return _c .Wrap (_eeacb ,_cccd ,"\u006a\u0020\u003e \u0030");
|
|
};_gdcc |=_cgab <<7;};_gdcc &=_geca ;if _gdcc ==0||(^_gdcc )==0{if _eeacb =_babfb .SetByte (_dffa +_dgef ,_gdcc );_eeacb !=nil {return _c .Wrap (_eeacb ,_cccd ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");
|
|
};continue ;};for {_bbbge =_gdcc ;_gdcc =(_gdcc |(_gdcc >>1)|(_gdcc <<1))&_geca ;if (_gdcc ^_bbbge )==0{if _eeacb =_babfb .SetByte (_dffa +_dgef ,_gdcc );_eeacb !=nil {return _c .Wrap (_eeacb ,_cccd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
|
|
};break ;};};};};for _egca =_abea -1;_egca >=0;_egca --{_dffa =_egca *_babfb .RowStride ;_aaca =_egca *_fddcc .RowStride ;for _dgef =_adfa -1;_dgef >=0;_dgef --{if _gdcc ,_eeacb =_babfb .GetByte (_dffa +_dgef );_eeacb !=nil {return _c .Wrap (_eeacb ,_cccd ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");
|
|
};if _geca ,_eeacb =_fddcc .GetByte (_aaca +_dgef );_eeacb !=nil {return _c .Wrap (_eeacb ,_cccd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _egca < _abea -1{if _ddbbe ,_eeacb =_babfb .GetByte (_dffa +_babfb .RowStride +_dgef );
|
|
_eeacb !=nil {return _c .Wrap (_eeacb ,_cccd ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_gdcc |=_ddbbe ;};if _dgef < _adfa -1{if _ceca ,_eeacb =_babfb .GetByte (_dffa +_dgef +1);_eeacb !=nil {return _c .Wrap (_eeacb ,_cccd ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");
|
|
};_gdcc |=_ceca >>7;};_gdcc &=_geca ;if _gdcc ==0||(^_gdcc )==0{if _eeacb =_babfb .SetByte (_dffa +_dgef ,_gdcc );_eeacb !=nil {return _c .Wrap (_eeacb ,_cccd ,"\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 {_bbbge =_gdcc ;_gdcc =(_gdcc |(_gdcc >>1)|(_gdcc <<1))&_geca ;if (_gdcc ^_bbbge )==0{if _eeacb =_babfb .SetByte (_dffa +_dgef ,_gdcc );_eeacb !=nil {return _c .Wrap (_eeacb ,_cccd ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
|
|
};break ;};};};};return nil ;};func _cbc (_eeff ,_bcfgb *Bitmap ,_efcc *Selection )(*Bitmap ,error ){const _ffba ="\u0065\u0072\u006fd\u0065";var (_eee error ;_egec *Bitmap ;);_eeff ,_eee =_dgcda (_eeff ,_bcfgb ,_efcc ,&_egec );if _eee !=nil {return nil ,_c .Wrap (_eee ,_ffba ,"");
|
|
};if _eee =_eeff .setAll ();_eee !=nil {return nil ,_c .Wrap (_eee ,_ffba ,"");};var _gfbgf SelectionValue ;for _dedb :=0;_dedb < _efcc .Height ;_dedb ++{for _adga :=0;_adga < _efcc .Width ;_adga ++{_gfbgf =_efcc .Data [_dedb ][_adga ];if _gfbgf ==SelHit {_eee =_gbcec (_eeff ,_efcc .Cx -_adga ,_efcc .Cy -_dedb ,_bcfgb .Width ,_bcfgb .Height ,PixSrcAndDst ,_egec ,0,0);
|
|
if _eee !=nil {return nil ,_c .Wrap (_eee ,_ffba ,"");};};};};if MorphBC ==SymmetricMorphBC {return _eeff ,nil ;};_bccg ,_bbed ,_dfcb ,_ebca :=_efcc .findMaxTranslations ();if _bccg > 0{if _eee =_eeff .RasterOperation (0,0,_bccg ,_bcfgb .Height ,PixClr ,nil ,0,0);
|
|
_eee !=nil {return nil ,_c .Wrap (_eee ,_ffba ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _dfcb > 0{if _eee =_eeff .RasterOperation (_bcfgb .Width -_dfcb ,0,_dfcb ,_bcfgb .Height ,PixClr ,nil ,0,0);_eee !=nil {return nil ,_c .Wrap (_eee ,_ffba ,"\u0078\u006e\u0020\u003e\u0020\u0030");
|
|
};};if _bbed > 0{if _eee =_eeff .RasterOperation (0,0,_bcfgb .Width ,_bbed ,PixClr ,nil ,0,0);_eee !=nil {return nil ,_c .Wrap (_eee ,_ffba ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _ebca > 0{if _eee =_eeff .RasterOperation (0,_bcfgb .Height -_ebca ,_bcfgb .Width ,_ebca ,PixClr ,nil ,0,0);
|
|
_eee !=nil {return nil ,_c .Wrap (_eee ,_ffba ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _eeff ,nil ;};type MorphOperation int ;func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _edbg (d ,s ,sel )};func (_dcg Points )Get (i int )(Point ,error ){if i > len (_dcg )-1{return Point {},_c .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 _dcg [i ],nil ;};func (_beeg *ClassedPoints )validateIntSlice ()error {const _edgc ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_dfd :=range _beeg .IntSlice {if _dfd >=(_beeg .Points .Size ()){return _c .Errorf (_edgc ,"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",_dfd ,_beeg .Points .Size ());
|
|
};};return nil ;};func (_fdfd *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _fdfd .Copy (),nil ;};_gag ,_cecc :=_fdfd .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _cecc !=nil {return nil ,_c .Wrap (_cecc ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");
|
|
};return _gag ,nil ;};func _gcag (_bbd ,_dbdg *Bitmap )(*Bitmap ,error ){if _dbdg ==nil {return nil ,_c .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 _dbdg ==_bbd {return _bbd ,nil ;};if _bbd ==nil {_bbd =_dbdg .createTemplate ();copy (_bbd .Data ,_dbdg .Data );return _bbd ,nil ;};_beec :=_bbd .resizeImageData (_dbdg );if _beec !=nil {return nil ,_c .Wrap (_beec ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
|
|
};_bbd .Text =_dbdg .Text ;copy (_bbd .Data ,_dbdg .Data );return _bbd ,nil ;};func TstVSymbol (t *_b .T ,scale ...int )*Bitmap {_aeeb ,_aafd :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_f .NoError (t ,_aafd );return TstGetScaledSymbol (t ,_aeeb ,scale ...);
|
|
};func TstImageBitmap ()*Bitmap {return _baagf .Copy ()};func (_afabf *ClassedPoints )Less (i ,j int )bool {return _afabf ._efea (i ,j )};var (_dbggc =_fb ();_fgga =_ab ();_dgbf =_gec (););func (_face *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_face .Width ,Height :_face .Height ,RowStride :_face .RowStride ,Color :_face .Color ,Text :_face .Text ,BitmapNumber :_face .BitmapNumber ,Special :_face .Special ,Data :make ([]byte ,len (_face .Data ))};
|
|
};func Extract (roi _da .Rectangle ,src *Bitmap )(*Bitmap ,error ){_fff :=New (roi .Dx (),roi .Dy ());_fbcc :=roi .Min .X &0x07;_bebf :=8-_fbcc ;_feaa :=uint (8-_fff .Width &0x07);_aadc :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_dfa :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );
|
|
_acbb :=_fff .RowStride ==_dfa +1-_aadc ;var _gded int ;for _aabg :=roi .Min .Y ;_aabg < roi .Max .Y ;_aabg ++{_ddcc :=_aadc ;_fcgf :=_gded ;switch {case _aadc ==_dfa :_dbcb ,_cdce :=src .GetByte (_ddcc );if _cdce !=nil {return nil ,_cdce ;};_dbcb <<=uint (_fbcc );
|
|
_cdce =_fff .SetByte (_fcgf ,_fcfa (_feaa ,_dbcb ));if _cdce !=nil {return nil ,_cdce ;};case _fbcc ==0:for _gbaa :=_aadc ;_gbaa <=_dfa ;_gbaa ++{_ecgb ,_fecg :=src .GetByte (_ddcc );if _fecg !=nil {return nil ,_fecg ;};_ddcc ++;if _gbaa ==_dfa &&_acbb {_ecgb =_fcfa (_feaa ,_ecgb );
|
|
};_fecg =_fff .SetByte (_fcgf ,_ecgb );if _fecg !=nil {return nil ,_fecg ;};_fcgf ++;};default:_ffdb :=_abdb (src ,_fff ,uint (_fbcc ),uint (_bebf ),_feaa ,_aadc ,_dfa ,_acbb ,_ddcc ,_fcgf );if _ffdb !=nil {return nil ,_ffdb ;};};_aadc +=src .RowStride ;
|
|
_dfa +=src .RowStride ;_gded +=_fff .RowStride ;};return _fff ,nil ;};func init (){const _dffd ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_ffca =New (50,40);var _fgfaa error ;
|
|
_ffca ,_fgfaa =_ffca .AddBorder (2,1);if _fgfaa !=nil {panic (_c .Wrap (_fgfaa ,_dffd ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_baagf ,_fgfaa =NewWithData (50,22,_efcg );if _fgfaa !=nil {panic (_c .Wrap (_fgfaa ,_dffd ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
|
|
};};func (_dbcd *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _bdga ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _ggedd :=_dbcd .validateIntSlice ();_ggedd !=nil {return nil ,_c .Wrap (_ggedd ,_bdga ,"");
|
|
};if _dbcd .IntSlice .Size ()==0{return nil ,_c .Error (_bdga ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_dbcd .SortByY ();var (_bfaf []*ClassedPoints ;_cgbdc int ;);_fee :=-1;var _acgg *ClassedPoints ;
|
|
for _beabf :=0;_beabf < len (_dbcd .IntSlice );_beabf ++{_cgbdc =int (_dbcd .YAtIndex (_beabf ));if _cgbdc !=_fee {_acgg =&ClassedPoints {Points :_dbcd .Points };_fee =_cgbdc ;_bfaf =append (_bfaf ,_acgg );};_acgg .IntSlice =append (_acgg .IntSlice ,_dbcd .IntSlice [_beabf ]);
|
|
};for _ ,_ceba :=range _bfaf {_ceba .SortByX ();};return _bfaf ,nil ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func _dfgb (_cedd ,_fabd *Bitmap ,_agce ,_fbca ,_aacbb ,_efd ,_fgb ,_gdga ,_adcf ,_bffb int ,_fddg CombinationOperator )error {var _fbaa int ;
|
|
_gga :=func (){_fbaa ++;_aacbb +=_fabd .RowStride ;_efd +=_cedd .RowStride ;_fgb +=_cedd .RowStride };for _fbaa =_agce ;_fbaa < _fbca ;_gga (){var _becf uint16 ;_aada :=_aacbb ;for _baag :=_efd ;_baag <=_fgb ;_baag ++{_ddea ,_dce :=_fabd .GetByte (_aada );
|
|
if _dce !=nil {return _dce ;};_acdb ,_dce :=_cedd .GetByte (_baag );if _dce !=nil {return _dce ;};_becf =(_becf |uint16 (_acdb ))<<uint (_bffb );_acdb =byte (_becf >>8);if _baag ==_fgb {_acdb =_fcfa (uint (_gdga ),_acdb );};if _dce =_fabd .SetByte (_aada ,_dda (_ddea ,_acdb ,_fddg ));
|
|
_dce !=nil {return _dce ;};_aada ++;_becf <<=uint (_adcf );};};return nil ;};func TstImageBitmapInverseData ()[]byte {_cdfd :=_baagf .Copy ();_cdfd .InverseData ();return _cdfd .Data ;};func (_bdccg *Bitmap )setEightFullBytes (_afe int ,_dcc uint64 )error {if _afe +7> len (_bdccg .Data )-1{return _c .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");
|
|
};_bdccg .Data [_afe ]=byte ((_dcc &0xff00000000000000)>>56);_bdccg .Data [_afe +1]=byte ((_dcc &0xff000000000000)>>48);_bdccg .Data [_afe +2]=byte ((_dcc &0xff0000000000)>>40);_bdccg .Data [_afe +3]=byte ((_dcc &0xff00000000)>>32);_bdccg .Data [_afe +4]=byte ((_dcc &0xff000000)>>24);
|
|
_bdccg .Data [_afe +5]=byte ((_dcc &0xff0000)>>16);_bdccg .Data [_afe +6]=byte ((_dcc &0xff00)>>8);_bdccg .Data [_afe +7]=byte (_dcc &0xff);return nil ;};func TstTSymbol (t *_b .T ,scale ...int )*Bitmap {_gafg ,_fabdag :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});
|
|
_f .NoError (t ,_fabdag );return TstGetScaledSymbol (t ,_gafg ,scale ...);};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _gbcec (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_baf *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_egae bool ,_eaff error ){const _gba ="\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 =_gdca ();};_eeb :=_baf .Width >>3;_dcd :=_baf .Width &7;_fef :=byte (0xff<<uint (8-_dcd ));var (_ccbgc ,_agf ,_bba ,_gdcf int ;_eebe byte ;);for _ccbgc =0;_ccbgc < _baf .Height ;_ccbgc ++{_bba =_baf .RowStride *_ccbgc ;for _agf =0;
|
|
_agf < _eeb ;_agf ++{_eebe ,_eaff =_baf .GetByte (_bba +_agf );if _eaff !=nil {return false ,_c .Wrap (_eaff ,_gba ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_gdcf +=tab8 [_eebe ];};if _dcd !=0{_eebe ,_eaff =_baf .GetByte (_bba +_agf );if _eaff !=nil {return false ,_c .Wrap (_eaff ,_gba ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");
|
|
};_eebe &=_fef ;_gdcf +=tab8 [_eebe ];};if _gdcf > thresh {return true ,nil ;};};return _egae ,nil ;};type Boxes []*_da .Rectangle ;func Centroids (bms []*Bitmap )(*Points ,error ){_baeaa :=make ([]Point ,len (bms ));_fcae :=_cbfb ();_dbaa :=_gdca ();var _fgge error ;
|
|
for _ddaa ,_ebf :=range bms {_baeaa [_ddaa ],_fgge =_ebf .centroid (_fcae ,_dbaa );if _fgge !=nil {return nil ,_fgge ;};};_ddcf :=Points (_baeaa );return &_ddcf ,nil ;};func _e (_ad ,_fa *Bitmap )(_ff error ){const _bg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";
|
|
_dg :=_fa .RowStride ;_faf :=_ad .RowStride ;var (_ee byte ;_ac uint16 ;_ec ,_dad ,_baa ,_gc ,_ge int ;);for _baa =0;_baa < _fa .Height ;_baa ++{_ec =_baa *_dg ;_dad =2*_baa *_faf ;for _gc =0;_gc < _dg ;_gc ++{_ee =_fa .Data [_ec +_gc ];_ac =_dbggc [_ee ];
|
|
_ge =_dad +_gc *2;if _ad .RowStride !=_fa .RowStride *2&&(_gc +1)*2> _ad .RowStride {_ff =_ad .SetByte (_ge ,byte (_ac >>8));}else {_ff =_ad .setTwoBytes (_ge ,_ac );};if _ff !=nil {return _c .Wrap (_ff ,_bg ,"");};};for _gc =0;_gc < _faf ;_gc ++{_ge =_dad +_faf +_gc ;
|
|
_ee =_ad .Data [_dad +_gc ];if _ff =_ad .SetByte (_ge ,_ee );_ff !=nil {return _c .Wrapf (_ff ,_bg ,"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",_dad +_gc ,_dad +_faf +_gc );
|
|
};};};return nil ;};func TstCSymbol (t *_b .T )*Bitmap {t .Helper ();_aeeeg :=New (6,6);_f .NoError (t ,_aeeeg .SetPixel (1,0,1));_f .NoError (t ,_aeeeg .SetPixel (2,0,1));_f .NoError (t ,_aeeeg .SetPixel (3,0,1));_f .NoError (t ,_aeeeg .SetPixel (4,0,1));
|
|
_f .NoError (t ,_aeeeg .SetPixel (0,1,1));_f .NoError (t ,_aeeeg .SetPixel (5,1,1));_f .NoError (t ,_aeeeg .SetPixel (0,2,1));_f .NoError (t ,_aeeeg .SetPixel (0,3,1));_f .NoError (t ,_aeeeg .SetPixel (0,4,1));_f .NoError (t ,_aeeeg .SetPixel (5,4,1));
|
|
_f .NoError (t ,_aeeeg .SetPixel (1,5,1));_f .NoError (t ,_aeeeg .SetPixel (2,5,1));_f .NoError (t ,_aeeeg .SetPixel (3,5,1));_f .NoError (t ,_aeeeg .SetPixel (4,5,1));return _aeeeg ;};func _fddc (_cade ,_gbfb *Bitmap ,_fad int ,_bea []byte ,_cba int )(_cde error ){const _ccbg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";
|
|
var (_fgf ,_ecdg ,_ffea ,_efb ,_fge ,_egb ,_aaf ,_afg int ;_edb ,_fga uint32 ;_efa ,_fe byte ;_efg uint16 ;);_fed :=make ([]byte ,4);_aggb :=make ([]byte ,4);for _ffea =0;_ffea < _cade .Height -1;_ffea ,_efb =_ffea +2,_efb +1{_fgf =_ffea *_cade .RowStride ;
|
|
_ecdg =_efb *_gbfb .RowStride ;for _fge ,_egb =0,0;_fge < _cba ;_fge ,_egb =_fge +4,_egb +1{for _aaf =0;_aaf < 4;_aaf ++{_afg =_fgf +_fge +_aaf ;if _afg <=len (_cade .Data )-1&&_afg < _fgf +_cade .RowStride {_fed [_aaf ]=_cade .Data [_afg ];}else {_fed [_aaf ]=0x00;
|
|
};_afg =_fgf +_cade .RowStride +_fge +_aaf ;if _afg <=len (_cade .Data )-1&&_afg < _fgf +(2*_cade .RowStride ){_aggb [_aaf ]=_cade .Data [_afg ];}else {_aggb [_aaf ]=0x00;};};_edb =_de .BigEndian .Uint32 (_fed );_fga =_de .BigEndian .Uint32 (_aggb );_fga &=_edb ;
|
|
_fga &=_fga <<1;_fga &=0xaaaaaaaa;_edb =_fga |(_fga <<7);_efa =byte (_edb >>24);_fe =byte ((_edb >>8)&0xff);_afg =_ecdg +_egb ;if _afg +1==len (_gbfb .Data )-1||_afg +1>=_ecdg +_gbfb .RowStride {_gbfb .Data [_afg ]=_bea [_efa ];if _cde =_gbfb .SetByte (_afg ,_bea [_efa ]);
|
|
_cde !=nil {return _c .Wrapf (_cde ,_ccbg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_afg );};}else {_efg =(uint16 (_bea [_efa ])<<8)|uint16 (_bea [_fe ]);if _cde =_gbfb .setTwoBytes (_afg ,_efg );_cde !=nil {return _c .Wrapf (_cde ,_ccbg ,"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",_afg );
|
|
};_egb ++;};};};return nil ;};type Point struct{X ,Y float32 ;};func _gbcec (_gbad *Bitmap ,_efdg ,_gdda ,_acee ,_bgee int ,_aebb RasterOperator ,_gebgg *Bitmap ,_aba ,_ecaag int )error {const _dbec ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
|
|
if _gbad ==nil {return _c .Error (_dbec ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _aebb ==PixDst {return nil ;};switch _aebb {case PixClr ,PixSet ,PixNotDst :_dacdb (_gbad ,_efdg ,_gdda ,_acee ,_bgee ,_aebb );
|
|
return nil ;};if _gebgg ==nil {_gb .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 _c .Error (_dbec ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _gdfe :=_fcff (_gbad ,_efdg ,_gdda ,_acee ,_bgee ,_aebb ,_gebgg ,_aba ,_ecaag );_gdfe !=nil {return _c .Wrap (_gdfe ,_dbec ,"");};return nil ;
|
|
};func (_cgfg *Bitmaps )WidthSorter ()func (_fceb ,_fggd int )bool {return func (_bbba ,_cbbc int )bool {return _cgfg .Values [_bbba ].Width < _cgfg .Values [_cbbc ].Width };};func (_dbff *Bitmap )centroid (_cdf ,_ffaa []int )(Point ,error ){_cgbd :=Point {};
|
|
_dbff .setPadBits (0);if len (_cdf )==0{_cdf =_cbfb ();};if len (_ffaa )==0{_ffaa =_gdca ();};var _efgce ,_cdaa ,_dcce ,_fgae ,_ecdgf ,_cfea int ;var _gee byte ;for _ecdgf =0;_ecdgf < _dbff .Height ;_ecdgf ++{_gdef :=_dbff .RowStride *_ecdgf ;_fgae =0;
|
|
for _cfea =0;_cfea < _dbff .RowStride ;_cfea ++{_gee =_dbff .Data [_gdef +_cfea ];if _gee !=0{_fgae +=_ffaa [_gee ];_efgce +=_cdf [_gee ]+_cfea *8*_ffaa [_gee ];};};_dcce +=_fgae ;_cdaa +=_fgae *_ecdgf ;};if _dcce !=0{_cgbd .X =float32 (_efgce )/float32 (_dcce );
|
|
_cgbd .Y =float32 (_cdaa )/float32 (_dcce );};return _cgbd ,nil ;};func _gec ()(_afb [256]uint64 ){for _bfg :=0;_bfg < 256;_bfg ++{if _bfg &0x01!=0{_afb [_bfg ]|=0xff;};if _bfg &0x02!=0{_afb [_bfg ]|=0xff00;};if _bfg &0x04!=0{_afb [_bfg ]|=0xff0000;};if _bfg &0x08!=0{_afb [_bfg ]|=0xff000000;
|
|
};if _bfg &0x10!=0{_afb [_bfg ]|=0xff00000000;};if _bfg &0x20!=0{_afb [_bfg ]|=0xff0000000000;};if _bfg &0x40!=0{_afb [_bfg ]|=0xff000000000000;};if _bfg &0x80!=0{_afb [_bfg ]|=0xff00000000000000;};};return _afb ;};func (_bebac *BitmapsArray )AddBox (box *_da .Rectangle ){_bebac .Boxes =append (_bebac .Boxes ,box )};
|
|
func _dga (_gdd ,_cbe *Bitmap ,_dfga int ,_gfd []byte ,_edea int )(_bdd error ){const _dae ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_edef ,_bgdg ,_gbe ,_ade ,_adae ,_gddg ,_agc ,_eded int ;
|
|
_cag ,_gcd ,_dfef ,_fdbd uint32 ;_dca ,_cdc byte ;_gbc uint16 ;);_be :=make ([]byte ,4);_dcf :=make ([]byte ,4);for _gbe =0;_gbe < _gdd .Height -1;_gbe ,_ade =_gbe +2,_ade +1{_edef =_gbe *_gdd .RowStride ;_bgdg =_ade *_cbe .RowStride ;for _adae ,_gddg =0,0;
|
|
_adae < _edea ;_adae ,_gddg =_adae +4,_gddg +1{for _agc =0;_agc < 4;_agc ++{_eded =_edef +_adae +_agc ;if _eded <=len (_gdd .Data )-1&&_eded < _edef +_gdd .RowStride {_be [_agc ]=_gdd .Data [_eded ];}else {_be [_agc ]=0x00;};_eded =_edef +_gdd .RowStride +_adae +_agc ;
|
|
if _eded <=len (_gdd .Data )-1&&_eded < _edef +(2*_gdd .RowStride ){_dcf [_agc ]=_gdd .Data [_eded ];}else {_dcf [_agc ]=0x00;};};_cag =_de .BigEndian .Uint32 (_be );_gcd =_de .BigEndian .Uint32 (_dcf );_dfef =_cag &_gcd ;_dfef |=_dfef <<1;_fdbd =_cag |_gcd ;
|
|
_fdbd &=_fdbd <<1;_gcd =_dfef &_fdbd ;_gcd &=0xaaaaaaaa;_cag =_gcd |(_gcd <<7);_dca =byte (_cag >>24);_cdc =byte ((_cag >>8)&0xff);_eded =_bgdg +_gddg ;if _eded +1==len (_cbe .Data )-1||_eded +1>=_bgdg +_cbe .RowStride {if _bdd =_cbe .SetByte (_eded ,_gfd [_dca ]);
|
|
_bdd !=nil {return _c .Wrapf (_bdd ,_dae ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_eded );};}else {_gbc =(uint16 (_gfd [_dca ])<<8)|uint16 (_gfd [_cdc ]);if _bdd =_cbe .setTwoBytes (_eded ,_gbc );_bdd !=nil {return _c .Wrapf (_bdd ,_dae ,"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",_eded );
|
|
};_gddg ++;};};};return nil ;};const (_agaec shift =iota ;_adeag ;);func (_dgbg *Bitmap )resizeImageData (_ace *Bitmap )error {if _ace ==nil {return _c .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 _dgbg .SizesEqual (_ace ){return nil ;};_dgbg .Data =make ([]byte ,len (_ace .Data ));_dgbg .Width =_ace .Width ;_dgbg .Height =_ace .Height ;_dgbg .RowStride =_ace .RowStride ;return nil ;}; |