mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-05 19:30:30 +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 (_g "encoding/binary";_e "github.com/stretchr/testify/require";_fe "github.com/unidoc/unipdf/v3/common";_ce "github.com/unidoc/unipdf/v3/internal/bitwise";_da "github.com/unidoc/unipdf/v3/internal/imageutil";_cc "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
|
|
_c "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_cd "image";_cf "math";_f "sort";_a "strings";_eb "testing";);func (_decg *Bitmap )setPadBits (_gcea int ){_def :=8-_decg .Width %8;if _def ==8{return ;};_fafg :=_decg .Width /8;_ccg :=_geea [_def ];
|
|
if _gcea ==0{_ccg ^=_ccg ;};var _bfc int ;for _cbb :=0;_cbb < _decg .Height ;_cbb ++{_bfc =_cbb *_decg .RowStride +_fafg ;if _gcea ==0{_decg .Data [_bfc ]&=_ccg ;}else {_decg .Data [_bfc ]|=_ccg ;};};};func _eege (_gcdb *Bitmap ,_eddc ,_aagg int ,_egccc ,_cfa int ,_gfgee RasterOperator ){var (_aeae int ;
|
|
_dcee byte ;_gdcg ,_bfgd int ;_fcad int ;);_cebb :=_egccc >>3;_gfcfc :=_egccc &7;if _gfcfc > 0{_dcee =_aceg [_gfcfc ];};_aeae =_gcdb .RowStride *_aagg +(_eddc >>3);switch _gfgee {case PixClr :for _gdcg =0;_gdcg < _cfa ;_gdcg ++{_fcad =_aeae +_gdcg *_gcdb .RowStride ;
|
|
for _bfgd =0;_bfgd < _cebb ;_bfgd ++{_gcdb .Data [_fcad ]=0x0;_fcad ++;};if _gfcfc > 0{_gcdb .Data [_fcad ]=_cadg (_gcdb .Data [_fcad ],0x0,_dcee );};};case PixSet :for _gdcg =0;_gdcg < _cfa ;_gdcg ++{_fcad =_aeae +_gdcg *_gcdb .RowStride ;for _bfgd =0;
|
|
_bfgd < _cebb ;_bfgd ++{_gcdb .Data [_fcad ]=0xff;_fcad ++;};if _gfcfc > 0{_gcdb .Data [_fcad ]=_cadg (_gcdb .Data [_fcad ],0xff,_dcee );};};case PixNotDst :for _gdcg =0;_gdcg < _cfa ;_gdcg ++{_fcad =_aeae +_gdcg *_gcdb .RowStride ;for _bfgd =0;_bfgd < _cebb ;
|
|
_bfgd ++{_gcdb .Data [_fcad ]=^_gcdb .Data [_fcad ];_fcad ++;};if _gfcfc > 0{_gcdb .Data [_fcad ]=_cadg (_gcdb .Data [_fcad ],^_gcdb .Data [_fcad ],_dcee );};};};};func NewClassedPoints (points *Points ,classes _cc .IntSlice )(*ClassedPoints ,error ){const _fged ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
|
|
if points ==nil {return nil ,_c .Error (_fged ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_c .Error (_fged ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
|
|
};_bggc :=&ClassedPoints {Points :points ,IntSlice :classes };if _bdeb :=_bggc .validateIntSlice ();_bdeb !=nil {return nil ,_c .Wrap (_bdeb ,_fged ,"");};return _bggc ,nil ;};func (_aeee *Bitmap )InverseData (){_aeee .inverseData ()};func TstImageBitmap ()*Bitmap {return _cecc .Copy ()};
|
|
func TstImageBitmapData ()[]byte {return _cecc .Data };func (_gcfa *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _ecab ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_gcfa .Values )==0{return nil ,_c .Error (_ecab ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
|
|
};_faec :=&BitmapsArray {};_gcfa .SortByWidth ();_gfbad :=-1;_edcgb :=-1;for _dgcdd :=0;_dgcdd < len (_gcfa .Values );_dgcdd ++{_ebab :=_gcfa .Values [_dgcdd ].Width ;if _ebab > _gfbad {_gfbad =_ebab ;_edcgb ++;_faec .Values =append (_faec .Values ,&Bitmaps {});
|
|
};_faec .Values [_edcgb ].AddBitmap (_gcfa .Values [_dgcdd ]);};return _faec ,nil ;};func _ffde (_fde *Bitmap ,_fgc int ,_cec []byte )(_eca *Bitmap ,_bcb error ){const _cdc ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";
|
|
if _fde ==nil {return nil ,_c .Error (_cdc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _fgc < 1||_fgc > 4{return nil ,_c .Error (_cdc ,"\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 _fde .Height <=1{return nil ,_c .Errorf (_cdc ,"\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",_fde .Height );
|
|
};_eca =New (_fde .Width /2,_fde .Height /2);if _cec ==nil {_cec =_eaa ();};_bdfa :=_dfgg (_fde .RowStride ,2*_eca .RowStride );switch _fgc {case 1:_bcb =_gec (_fde ,_eca ,_fgc ,_cec ,_bdfa );case 2:_bcb =_dgd (_fde ,_eca ,_fgc ,_cec ,_bdfa );case 3:_bcb =_fbga (_fde ,_eca ,_fgc ,_cec ,_bdfa );
|
|
case 4:_bcb =_baba (_fde ,_eca ,_fgc ,_cec ,_bdfa );};if _bcb !=nil {return nil ,_bcb ;};return _eca ,nil ;};func TstFrameBitmapData ()[]byte {return _begfc .Data };func _befa (_bacg *Bitmap ,_fgfef ,_fgda ,_fedfc ,_dcfcg int ,_affdg RasterOperator ,_bafd *Bitmap ,_eacc ,_afda int )error {const _gggf ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
|
|
if _bacg ==nil {return _c .Error (_gggf ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _affdg ==PixDst {return nil ;};switch _affdg {case PixClr ,PixSet ,PixNotDst :_aeccf (_bacg ,_fgfef ,_fgda ,_fedfc ,_dcfcg ,_affdg );
|
|
return nil ;};if _bafd ==nil {_fe .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 (_gggf ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _eage :=_egae (_bacg ,_fgfef ,_fgda ,_fedfc ,_dcfcg ,_affdg ,_bafd ,_eacc ,_afda );_eage !=nil {return _c .Wrap (_eage ,_gggf ,"");};
|
|
return nil ;};func (_edd *Bitmap )removeBorderGeneral (_fba ,_fced ,_ece ,_dfbg int )(*Bitmap ,error ){const _bfg ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _fba < 0||_fced < 0||_ece < 0||_dfbg < 0{return nil ,_c .Error (_bfg ,"\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");
|
|
};_gae ,_ceac :=_edd .Width ,_edd .Height ;_dbfc :=_gae -_fba -_fced ;_fdf :=_ceac -_ece -_dfbg ;if _dbfc <=0{return nil ,_c .Errorf (_bfg ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_dbfc );
|
|
};if _fdf <=0{return nil ,_c .Errorf (_bfg ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_fdf );};_cdg :=New (_dbfc ,_fdf );_cdg .Color =_edd .Color ;_dbbg :=_cdg .RasterOperation (0,0,_dbfc ,_fdf ,PixSrc ,_edd ,_fba ,_ece );
|
|
if _dbbg !=nil {return nil ,_c .Wrap (_dbbg ,_bfg ,"");};return _cdg ,nil ;};func (_fafe MorphProcess )verify (_ebca int ,_abea ,_faaae *int )error {const _bga ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";
|
|
switch _fafe .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_fafe .Arguments )!=2{return _c .Error (_bga ,"\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");
|
|
};_gccd ,_bccb :=_fafe .getWidthHeight ();if _gccd <=0||_bccb <=0{return _c .Error (_bga ,"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 :_cdce :=len (_fafe .Arguments );*_abea +=_cdce ;if _cdce < 1||_cdce > 4{return _c .Error (_bga ,"\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 _fadac :=0;_fadac < _cdce ;_fadac ++{if _fafe .Arguments [_fadac ]< 1||_fafe .Arguments [_fadac ]> 4{return _c .Error (_bga ,"\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 (_fafe .Arguments )==0{return _c .Error (_bga ,"\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");
|
|
};_gffec :=_fafe .Arguments [0];if _gffec !=2&&_gffec !=4&&_gffec !=8{return _c .Error (_bga ,"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");
|
|
};*_abea -=_afgb [_gffec /4];case MopAddBorder :if len (_fafe .Arguments )==0{return _c .Error (_bga ,"\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");
|
|
};_edfc :=_fafe .Arguments [0];if _ebca > 0{return _c .Error (_bga ,"\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 _edfc < 1{return _c .Error (_bga ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_faaae =_edfc ;};return nil ;};func _fffge (_facgd ,_cacb *Bitmap ,_ccdg *Selection )(*Bitmap ,error ){const _eecd ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";
|
|
var _gbac error ;if _facgd ,_gbac =_fbcc (_facgd ,_cacb ,_ccdg );_gbac !=nil {return nil ,_gbac ;};_eefd ,_gbac :=_cggff (nil ,_cacb ,_ccdg );if _gbac !=nil {return nil ,_c .Wrap (_gbac ,_eecd ,"");};if _ ,_gbac =_ggfa (_facgd ,_eefd ,_ccdg );_gbac !=nil {return nil ,_c .Wrap (_gbac ,_eecd ,"");
|
|
};return _facgd ,nil ;};func (_dcg *Bitmap )equivalent (_ebcg *Bitmap )bool {if _dcg ==_ebcg {return true ;};if !_dcg .SizesEqual (_ebcg ){return false ;};_aeg :=_aed (_dcg ,_ebcg ,CmbOpXor );_acg :=_dcg .countPixels ();_efb :=int (0.25*float32 (_acg ));
|
|
if _aeg .thresholdPixelSum (_efb ){return false ;};var (_gff [9][9]int ;_geaf [18][9]int ;_feea [9][18]int ;_efbc int ;_egcg int ;);_bdc :=9;_ecad :=_dcg .Height /_bdc ;_cbfe :=_dcg .Width /_bdc ;_fdaf ,_gbbg :=_ecad /2,_cbfe /2;if _ecad < _cbfe {_fdaf =_cbfe /2;
|
|
_gbbg =_ecad /2;};_bdb :=float64 (_fdaf )*float64 (_gbbg )*_cf .Pi ;_bgdf :=int (float64 (_ecad *_cbfe /2)*0.9);_bceg :=int (float64 (_cbfe *_ecad /2)*0.9);for _abb :=0;_abb < _bdc ;_abb ++{_efa :=_cbfe *_abb +_efbc ;var _ebged int ;if _abb ==_bdc -1{_efbc =0;
|
|
_ebged =_dcg .Width ;}else {_ebged =_efa +_cbfe ;if ((_dcg .Width -_efbc )%_bdc )> 0{_efbc ++;_ebged ++;};};for _dcb :=0;_dcb < _bdc ;_dcb ++{_bcdd :=_ecad *_dcb +_egcg ;var _acc int ;if _dcb ==_bdc -1{_egcg =0;_acc =_dcg .Height ;}else {_acc =_bcdd +_ecad ;
|
|
if (_dcg .Height -_egcg )%_bdc > 0{_egcg ++;_acc ++;};};var _dece ,_daag ,_ggadc ,_abfb int ;_gcbg :=(_efa +_ebged )/2;_aaee :=(_bcdd +_acc )/2;for _gfba :=_efa ;_gfba < _ebged ;_gfba ++{for _aegf :=_bcdd ;_aegf < _acc ;_aegf ++{if _aeg .GetPixel (_gfba ,_aegf ){if _gfba < _gcbg {_dece ++;
|
|
}else {_daag ++;};if _aegf < _aaee {_abfb ++;}else {_ggadc ++;};};};};_gff [_abb ][_dcb ]=_dece +_daag ;_geaf [_abb *2][_dcb ]=_dece ;_geaf [_abb *2+1][_dcb ]=_daag ;_feea [_abb ][_dcb *2]=_abfb ;_feea [_abb ][_dcb *2+1]=_ggadc ;};};for _ebe :=0;_ebe < _bdc *2-1;
|
|
_ebe ++{for _bde :=0;_bde < (_bdc -1);_bde ++{var _gcbf int ;for _ebea :=0;_ebea < 2;_ebea ++{for _cfbfc :=0;_cfbfc < 2;_cfbfc ++{_gcbf +=_geaf [_ebe +_ebea ][_bde +_cfbfc ];};};if _gcbf > _bceg {return false ;};};};for _bfb :=0;_bfb < (_bdc -1);_bfb ++{for _efgg :=0;
|
|
_efgg < ((_bdc *2)-1);_efgg ++{var _edf int ;for _bcc :=0;_bcc < 2;_bcc ++{for _bcdb :=0;_bcdb < 2;_bcdb ++{_edf +=_feea [_bfb +_bcc ][_efgg +_bcdb ];};};if _edf > _bgdf {return false ;};};};for _aaece :=0;_aaece < (_bdc -2);_aaece ++{for _ccfd :=0;_ccfd < (_bdc -2);
|
|
_ccfd ++{var _aafa ,_gag int ;for _cba :=0;_cba < 3;_cba ++{for _fdcd :=0;_fdcd < 3;_fdcd ++{if _cba ==_fdcd {_aafa +=_gff [_aaece +_cba ][_ccfd +_fdcd ];};if (2-_cba )==_fdcd {_gag +=_gff [_aaece +_cba ][_ccfd +_fdcd ];};};};if _aafa > _bceg ||_gag > _bceg {return false ;
|
|
};};};for _ddab :=0;_ddab < (_bdc -1);_ddab ++{for _babd :=0;_babd < (_bdc -1);_babd ++{var _gcc int ;for _cbae :=0;_cbae < 2;_cbae ++{for _egca :=0;_egca < 2;_egca ++{_gcc +=_gff [_ddab +_cbae ][_babd +_egca ];};};if float64 (_gcc )> _bdb {return false ;
|
|
};};};return true ;};func TstRSymbol (t *_eb .T ,scale ...int )*Bitmap {_bee ,_cdad :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_e .NoError (t ,_cdad );return TstGetScaledSymbol (t ,_bee ,scale ...);};func ClipBoxToRectangle (box *_cd .Rectangle ,wi ,hi int )(_ccac *_cd .Rectangle ,_fade error ){const _daf ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";
|
|
if box ==nil {return nil ,_c .Error (_daf ,"\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 (_daf ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");
|
|
};_bbaa :=*box ;_ccac =&_bbaa ;if _ccac .Min .X < 0{_ccac .Max .X +=_ccac .Min .X ;_ccac .Min .X =0;};if _ccac .Min .Y < 0{_ccac .Max .Y +=_ccac .Min .Y ;_ccac .Min .Y =0;};if _ccac .Max .X > wi {_ccac .Max .X =wi ;};if _ccac .Max .Y > hi {_ccac .Max .Y =hi ;
|
|
};return _ccac ,nil ;};func (_ddgd *Bitmap )SizesEqual (s *Bitmap )bool {if _ddgd ==s {return true ;};if _ddgd .Width !=s .Width ||_ddgd .Height !=s .Height {return false ;};return true ;};func init (){for _dga :=0;_dga < 256;_dga ++{_gedf [_dga ]=uint8 (_dga &0x1)+(uint8 (_dga >>1)&0x1)+(uint8 (_dga >>2)&0x1)+(uint8 (_dga >>3)&0x1)+(uint8 (_dga >>4)&0x1)+(uint8 (_dga >>5)&0x1)+(uint8 (_dga >>6)&0x1)+(uint8 (_dga >>7)&0x1);
|
|
};};func (_ggab *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _bacb ="\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 >=_ggab .IntSlice .Size (){return 0,_c .Errorf (_bacb ,"\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 (_ggab .XAtIndex (i )),nil ;};func (_fecd *Bitmap )countPixels ()int {var (_bfe int ;_gba uint8 ;_gbdb byte ;_bcge int ;);_eaea :=_fecd .RowStride ;_dfc :=uint (_fecd .Width &0x07);if _dfc !=0{_gba =uint8 ((0xff<<(8-_dfc ))&0xff);_eaea --;
|
|
};for _gcbdd :=0;_gcbdd < _fecd .Height ;_gcbdd ++{for _bcge =0;_bcge < _eaea ;_bcge ++{_gbdb =_fecd .Data [_gcbdd *_fecd .RowStride +_bcge ];_bfe +=int (_gedf [_gbdb ]);};if _dfc !=0{_bfe +=int (_gedf [_fecd .Data [_gcbdd *_fecd .RowStride +_bcge ]&_gba ]);
|
|
};};return _bfe ;};func _fcgde (_debb ,_gffc byte ,_cbd CombinationOperator )byte {switch _cbd {case CmbOpOr :return _gffc |_debb ;case CmbOpAnd :return _gffc &_debb ;case CmbOpXor :return _gffc ^_debb ;case CmbOpXNor :return ^(_gffc ^_debb );case CmbOpNot :return ^(_gffc );
|
|
default:return _gffc ;};};type SelectionValue int ;func _bda (_ecfb ...MorphProcess )(_bdag error ){const _defe ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _gceb ,_ddcb int ;for _decec ,_dcadc :=range _ecfb {if _bdag =_dcadc .verify (_decec ,&_gceb ,&_ddcb );
|
|
_bdag !=nil {return _c .Wrap (_bdag ,_defe ,"");};};if _ddcb !=0&&_gceb !=0{return _c .Error (_defe ,"\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 _gbaf (_bdgd ,_dgafd *Bitmap ,_bfad ,_dgad ,_gac ,_ggde ,_gcgf ,_ebee ,_gbba ,_ggba int ,_ecfg CombinationOperator )error {var _cga int ;_egeb :=func (){_cga ++;_gac +=_dgafd .RowStride ;_ggde +=_bdgd .RowStride ;_gcgf +=_bdgd .RowStride };
|
|
for _cga =_bfad ;_cga < _dgad ;_egeb (){var _edfe uint16 ;_ebcc :=_gac ;for _dgb :=_ggde ;_dgb <=_gcgf ;_dgb ++{_agbe ,_agca :=_dgafd .GetByte (_ebcc );if _agca !=nil {return _agca ;};_bbe ,_agca :=_bdgd .GetByte (_dgb );if _agca !=nil {return _agca ;};
|
|
_edfe =(_edfe |uint16 (_bbe ))<<uint (_ggba );_bbe =byte (_edfe >>8);if _dgb ==_gcgf {_bbe =_becf (uint (_ebee ),_bbe );};if _agca =_dgafd .SetByte (_ebcc ,_fcgde (_agbe ,_bbe ,_ecfg ));_agca !=nil {return _agca ;};_ebcc ++;_edfe <<=uint (_gbba );};};return nil ;
|
|
};func _cadc (_egde *Bitmap ,_dedg *_cc .Stack ,_gdcff ,_cbbf ,_dggcf int )(_abeg *_cd .Rectangle ,_gcag error ){const _eaab ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _egde ==nil {return nil ,_c .Error (_eaab ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
|
|
};if _dedg ==nil {return nil ,_c .Error (_eaab ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _dggcf {case 4:if _abeg ,_gcag =_bcab (_egde ,_dedg ,_gdcff ,_cbbf );_gcag !=nil {return nil ,_c .Wrap (_gcag ,_eaab ,"");
|
|
};return _abeg ,nil ;case 8:if _abeg ,_gcag =_deab (_egde ,_dedg ,_gdcff ,_cbbf );_gcag !=nil {return nil ,_c .Wrap (_gcag ,_eaab ,"");};return _abeg ,nil ;default:return nil ,_c .Errorf (_eaab ,"\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",_dggcf );
|
|
};};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func _gacg (_aagd ,_aeda ,_cdcg *Bitmap ,_abcf int )(*Bitmap ,error ){const _bfeg ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";
|
|
if _aeda ==nil {return nil ,_c .Error (_bfeg ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _cdcg ==nil {return nil ,_c .Error (_bfeg ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
|
|
};if _abcf !=4&&_abcf !=8{return nil ,_c .Error (_bfeg ,"\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 _ebag error ;_aagd ,_ebag =_edfg (_aagd ,_aeda );
|
|
if _ebag !=nil {return nil ,_c .Wrap (_ebag ,_bfeg ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_dgfbf :=_aeda .createTemplate ();_cdcg .setPadBits (0);for _gacc :=0;_gacc < _decf ;_gacc ++{_dgfbf ,_ebag =_edfg (_dgfbf ,_aagd );
|
|
if _ebag !=nil {return nil ,_c .Wrapf (_ebag ,_bfeg ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gacc );};if _ebag =_afee (_aagd ,_cdcg ,_abcf );_ebag !=nil {return nil ,_c .Wrapf (_ebag ,_bfeg ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gacc );
|
|
};if _dgfbf .Equals (_aagd ){break ;};};return _aagd ,nil ;};func _edec (_gcad ,_gbfe int )int {if _gcad > _gbfe {return _gcad ;};return _gbfe ;};func (_cdebb *BitmapsArray )AddBitmaps (bm *Bitmaps ){_cdebb .Values =append (_cdebb .Values ,bm )};func (_fcgg *Bitmap )centroid (_cbbd ,_cfgd []int )(Point ,error ){_ebdbd :=Point {};
|
|
_fcgg .setPadBits (0);if len (_cbbd )==0{_cbbd =_agfa ();};if len (_cfgd )==0{_cfgd =_daca ();};var _gdaae ,_cgde ,_dcgd ,_afgd ,_ffc ,_daae int ;var _bfcf byte ;for _ffc =0;_ffc < _fcgg .Height ;_ffc ++{_baca :=_fcgg .RowStride *_ffc ;_afgd =0;for _daae =0;
|
|
_daae < _fcgg .RowStride ;_daae ++{_bfcf =_fcgg .Data [_baca +_daae ];if _bfcf !=0{_afgd +=_cfgd [_bfcf ];_gdaae +=_cbbd [_bfcf ]+_daae *8*_cfgd [_bfcf ];};};_dcgd +=_afgd ;_cgde +=_afgd *_ffc ;};if _dcgd !=0{_ebdbd .X =float32 (_gdaae )/float32 (_dcgd );
|
|
_ebdbd .Y =float32 (_cgde )/float32 (_dcgd );};return _ebdbd ,nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _cafg ="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 (_cafg ,"\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 (_cafg ,"\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 (_cafg ,"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 (_cafg ,"\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 (_cafg ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
|
|
};_feedd ,_cefe :=bm1 .Width ,bm1 .Height ;_fabd ,_abfbg :=bm2 .Width ,bm2 .Height ;if _cc .Abs (_feedd -_fabd )> maxDiffW {return false ,nil ;};if _cc .Abs (_cefe -_abfbg )> maxDiffH {return false ,nil ;};_dgg :=int (delX +_cc .Sign (delX )*0.5);_fedf :=int (delY +_cc .Sign (delY )*0.5);
|
|
_eeag :=int (_cf .Ceil (_cf .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_dbd :=bm2 .RowStride ;_acgc :=_edec (_fedf ,0);_fgeb :=_dfgg (_abfbg +_fedf ,_cefe );_aecf :=bm1 .RowStride *_acgc ;_gadg :=bm2 .RowStride *(_acgc -_fedf );
|
|
var _dce int ;if _fgeb <=_cefe {_dce =downcount [_fgeb -1];};_ebad :=_edec (_dgg ,0);_ebbd :=_dfgg (_fabd +_dgg ,_feedd );var _efga ,_affb int ;if _dgg >=8{_efga =_dgg >>3;_aecf +=_efga ;_ebad -=_efga <<3;_ebbd -=_efga <<3;_dgg &=7;}else if _dgg <=-8{_affb =-((_dgg +7)>>3);
|
|
_gadg +=_affb ;_dbd -=_affb ;_dgg +=_affb <<3;};var (_dgcc ,_dcfg ,_fbbd int ;_cce ,_fbbf ,_ddae byte ;);if _ebad >=_ebbd ||_acgc >=_fgeb {return false ,nil ;};_ddge :=(_ebbd +7)>>3;switch {case _dgg ==0:for _dcfg =_acgc ;_dcfg < _fgeb ;_dcfg ,_aecf ,_gadg =_dcfg +1,_aecf +bm1 .RowStride ,_gadg +bm2 .RowStride {for _fbbd =0;
|
|
_fbbd < _ddge ;_fbbd ++{_cce =bm1 .Data [_aecf +_fbbd ]&bm2 .Data [_gadg +_fbbd ];_dgcc +=tab [_cce ];};if _dgcc >=_eeag {return true ,nil ;};if _dbeg :=_dgcc +downcount [_dcfg ]-_dce ;_dbeg < _eeag {return false ,nil ;};};case _dgg > 0&&_dbd < _ddge :for _dcfg =_acgc ;
|
|
_dcfg < _fgeb ;_dcfg ,_aecf ,_gadg =_dcfg +1,_aecf +bm1 .RowStride ,_gadg +bm2 .RowStride {_fbbf =bm1 .Data [_aecf ];_ddae =bm2 .Data [_gadg ]>>uint (_dgg );_cce =_fbbf &_ddae ;_dgcc +=tab [_cce ];for _fbbd =1;_fbbd < _dbd ;_fbbd ++{_fbbf =bm1 .Data [_aecf +_fbbd ];
|
|
_ddae =bm2 .Data [_gadg +_fbbd ]>>uint (_dgg )|bm2 .Data [_gadg +_fbbd -1]<<uint (8-_dgg );_cce =_fbbf &_ddae ;_dgcc +=tab [_cce ];};_fbbf =bm1 .Data [_aecf +_fbbd ];_ddae =bm2 .Data [_gadg +_fbbd -1]<<uint (8-_dgg );_cce =_fbbf &_ddae ;_dgcc +=tab [_cce ];
|
|
if _dgcc >=_eeag {return true ,nil ;}else if _dgcc +downcount [_dcfg ]-_dce < _eeag {return false ,nil ;};};case _dgg > 0&&_dbd >=_ddge :for _dcfg =_acgc ;_dcfg < _fgeb ;_dcfg ,_aecf ,_gadg =_dcfg +1,_aecf +bm1 .RowStride ,_gadg +bm2 .RowStride {_fbbf =bm1 .Data [_aecf ];
|
|
_ddae =bm2 .Data [_gadg ]>>uint (_dgg );_cce =_fbbf &_ddae ;_dgcc +=tab [_cce ];for _fbbd =1;_fbbd < _ddge ;_fbbd ++{_fbbf =bm1 .Data [_aecf +_fbbd ];_ddae =bm2 .Data [_gadg +_fbbd ]>>uint (_dgg );_ddae |=bm2 .Data [_gadg +_fbbd -1]<<uint (8-_dgg );_cce =_fbbf &_ddae ;
|
|
_dgcc +=tab [_cce ];};if _dgcc >=_eeag {return true ,nil ;}else if _dgcc +downcount [_dcfg ]-_dce < _eeag {return false ,nil ;};};case _ddge < _dbd :for _dcfg =_acgc ;_dcfg < _fgeb ;_dcfg ,_aecf ,_gadg =_dcfg +1,_aecf +bm1 .RowStride ,_gadg +bm2 .RowStride {for _fbbd =0;
|
|
_fbbd < _ddge ;_fbbd ++{_fbbf =bm1 .Data [_aecf +_fbbd ];_ddae =bm2 .Data [_gadg +_fbbd ]<<uint (-_dgg );_ddae |=bm2 .Data [_gadg +_fbbd +1]>>uint (8+_dgg );_cce =_fbbf &_ddae ;_dgcc +=tab [_cce ];};if _dgcc >=_eeag {return true ,nil ;}else if _dged :=_dgcc +downcount [_dcfg ]-_dce ;
|
|
_dged < _eeag {return false ,nil ;};};case _dbd >=_ddge :for _dcfg =_acgc ;_dcfg < _fgeb ;_dcfg ,_aecf ,_gadg =_dcfg +1,_aecf +bm1 .RowStride ,_gadg +bm2 .RowStride {for _fbbd =0;_fbbd < _ddge ;_fbbd ++{_fbbf =bm1 .Data [_aecf +_fbbd ];_ddae =bm2 .Data [_gadg +_fbbd ]<<uint (-_dgg );
|
|
_ddae |=bm2 .Data [_gadg +_fbbd +1]>>uint (8+_dgg );_cce =_fbbf &_ddae ;_dgcc +=tab [_cce ];};_fbbf =bm1 .Data [_aecf +_fbbd ];_ddae =bm2 .Data [_gadg +_fbbd ]<<uint (-_dgg );_cce =_fbbf &_ddae ;_dgcc +=tab [_cce ];if _dgcc >=_eeag {return true ,nil ;}else if _dgcc +downcount [_dcfg ]-_dce < _eeag {return false ,nil ;
|
|
};};};_dbfa :=float32 (_dgcc )*float32 (_dgcc )/(float32 (area1 )*float32 (area2 ));if _dbfa >=scoreThreshold {_fe .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",_dgcc ,_eeag ,_dbfa ,scoreThreshold );
|
|
};return false ,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 ;);var _afgb =[5]int {1,2,3,0,4};func (_dbea *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _cedc ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";
|
|
if _dbea ==nil {return nil ,_c .Error (_cedc ,"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 (_dbea .Values )-1{return nil ,_c .Errorf (_cedc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return _dbea .Values [i ],nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _edfg (d ,s )};func (_dacc *Bitmap )clearAll ()error {return _dacc .RasterOperation (0,0,_dacc .Width ,_dacc .Height ,PixClr ,nil ,0,0);};func (_fgef *Bitmap )setAll ()error {_feg :=_befa (_fgef ,0,0,_fgef .Width ,_fgef .Height ,PixSet ,nil ,0,0);
|
|
if _feg !=nil {return _c .Wrap (_feg ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _ddgb (src ,sequence ...);};func (_abeb *Boxes )selectWithIndicator (_bcdg *_cc .NumSlice )(_bac *Boxes ,_gaaae error ){const _decc ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _abeb ==nil {return nil ,_c .Error (_decc ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _bcdg ==nil {return nil ,_c .Error (_decc ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if len (*_bcdg )!=len (*_abeb ){return nil ,_c .Error (_decc ,"\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 _eeaf ,_bdfb int ;for _dabe :=0;_dabe < len (*_bcdg );_dabe ++{if _eeaf ,_gaaae =_bcdg .GetInt (_dabe );_gaaae !=nil {return nil ,_c .Wrap (_gaaae ,_decc ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _eeaf ==1{_bdfb ++;
|
|
};};if _bdfb ==len (*_abeb ){return _abeb ,nil ;};_cgfg :=Boxes {};for _ebdb :=0;_ebdb < len (*_bcdg );_ebdb ++{_eeaf =int ((*_bcdg )[_ebdb ]);if _eeaf ==0{continue ;};_cgfg =append (_cgfg ,(*_abeb )[_ebdb ]);};_bac =&_cgfg ;return _bac ,nil ;};func (_gbc Points )GetGeometry (i int )(_fceaa ,_cabc float32 ,_dgcd error ){if i > len (_gbc )-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 );
|
|
};_daeb :=_gbc [i ];return _daeb .X ,_daeb .Y ,nil ;};func (_gegbf *Selection )findMaxTranslations ()(_aefg ,_fbgcg ,_fefdd ,_dbbgc int ){for _eecdg :=0;_eecdg < _gegbf .Height ;_eecdg ++{for _ggdg :=0;_ggdg < _gegbf .Width ;_ggdg ++{if _gegbf .Data [_eecdg ][_ggdg ]==SelHit {_aefg =_edec (_aefg ,_gegbf .Cx -_ggdg );
|
|
_fbgcg =_edec (_fbgcg ,_gegbf .Cy -_eecdg );_fefdd =_edec (_fefdd ,_ggdg -_gegbf .Cx );_dbbgc =_edec (_dbbgc ,_eecdg -_gegbf .Cy );};};};return _aefg ,_fbgcg ,_fefdd ,_dbbgc ;};type LocationFilter int ;func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_bggf bool ,_faff error ){const _dabb ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
|
|
_feceg ,_gfcc :=p1 .Width ,p1 .Height ;_cada ,_cagd :=p3 .Width ,p3 .Height ;if _cc .Abs (_feceg -_cada )> maxDiffW {return false ,nil ;};if _cc .Abs (_gfcc -_cagd )> maxDiffH {return false ,nil ;};_gagaac :=int (float32 (area1 )*(1.0-rank )+0.5);_affdd :=int (float32 (area3 )*(1.0-rank )+0.5);
|
|
var _cbfc ,_gfaa int ;if delX >=0{_cbfc =int (delX +0.5);}else {_cbfc =int (delX -0.5);};if delY >=0{_gfaa =int (delY +0.5);}else {_gfaa =int (delY -0.5);};_gbdf :=p1 .CreateTemplate ();if _faff =_gbdf .RasterOperation (0,0,_feceg ,_gfcc ,PixSrc ,p1 ,0,0);
|
|
_faff !=nil {return false ,_c .Wrap (_faff ,_dabb ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _faff =_gbdf .RasterOperation (_cbfc ,_gfaa ,_feceg ,_gfcc ,PixNotSrcAndDst ,p4 ,0,0);_faff !=nil {return false ,_c .Wrap (_faff ,_dabb ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
|
|
};_bggf ,_faff =_gbdf .ThresholdPixelSum (_gagaac ,tab8 );if _faff !=nil {return false ,_c .Wrap (_faff ,_dabb ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _bggf {return false ,nil ;};if _faff =_gbdf .RasterOperation (_cbfc ,_gfaa ,_cada ,_cagd ,PixSrc ,p3 ,0,0);
|
|
_faff !=nil {return false ,_c .Wrap (_faff ,_dabb ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _faff =_gbdf .RasterOperation (0,0,_cada ,_cagd ,PixNotSrcAndDst ,p2 ,0,0);_faff !=nil {return false ,_c .Wrap (_faff ,_dabb ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
|
|
};_bggf ,_faff =_gbdf .ThresholdPixelSum (_affdd ,tab8 );if _faff !=nil {return false ,_c .Wrap (_faff ,_dabb ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_bggf ,nil ;};func _bcde (_gfgb ,_bdfac *Bitmap ,_afeg ,_cgcd int )(*Bitmap ,error ){const _dcfc ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";
|
|
if _bdfac ==nil {return nil ,_c .Error (_dcfc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _afeg < 1||_cgcd < 1{return nil ,_c .Error (_dcfc ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
|
|
};if _afeg ==1&&_cgcd ==1{return _bdfac .Copy (),nil ;};if _afeg ==1||_cgcd ==1{_cdef :=SelCreateBrick (_cgcd ,_afeg ,_cgcd /2,_afeg /2,SelHit );var _efec error ;_gfgb ,_efec =_fffge (_gfgb ,_bdfac ,_cdef );if _efec !=nil {return nil ,_c .Wrap (_efec ,_dcfc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _gfgb ,nil ;};_cfbd :=SelCreateBrick (1,_afeg ,0,_afeg /2,SelHit );_gfac :=SelCreateBrick (_cgcd ,1,_cgcd /2,0,SelHit );_gada ,_ccba :=_cggff (nil ,_bdfac ,_cfbd );if _ccba !=nil {return nil ,_c .Wrap (_ccba ,_dcfc ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};if _gfgb ,_ccba =_cggff (_gfgb ,_gada ,_gfac );_ccba !=nil {return nil ,_c .Wrap (_ccba ,_dcfc ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_ccba =_ggfa (_gada ,_gfgb ,_cfbd );_ccba !=nil {return nil ,_c .Wrap (_ccba ,_dcfc ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};if _ ,_ccba =_ggfa (_gfgb ,_gada ,_gfac );_ccba !=nil {return nil ,_c .Wrap (_ccba ,_dcfc ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _gfgb ,nil ;};func _aebg (_gedc int )int {if _gedc < 0{return -_gedc ;};return _gedc ;};const (_ LocationFilter =iota ;
|
|
LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);type Points []Point ;type shift int ;func (_fdg *Bitmap )clipRectangle (_cabd ,_bce *_cd .Rectangle )(_gcdg *Bitmap ,_aefd error ){const _babb ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
|
|
if _cabd ==nil {return nil ,_c .Error (_babb ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_fgfd ,_fcea :=_fdg .Width ,_fdg .Height ;_bcd ,_aefd :=ClipBoxToRectangle (_cabd ,_fgfd ,_fcea );if _aefd !=nil {_fe .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",_aefd );
|
|
return nil ,nil ;};_dace ,_fbc :=_bcd .Min .X ,_bcd .Min .Y ;_eeef ,_fgfe :=_bcd .Max .X -_bcd .Min .X ,_bcd .Max .Y -_bcd .Min .Y ;_gcdg =New (_eeef ,_fgfe );_gcdg .Text =_fdg .Text ;if _aefd =_gcdg .RasterOperation (0,0,_eeef ,_fgfe ,PixSrc ,_fdg ,_dace ,_fbc );
|
|
_aefd !=nil {return nil ,_c .Wrap (_aefd ,_babb ,"");};if _bce !=nil {*_bce =*_bcd ;};return _gcdg ,nil ;};func (_baae *Bitmap )Equivalent (s *Bitmap )bool {return _baae .equivalent (s )};func _fdgf (_ggb ,_gceg ,_dca *Bitmap )(*Bitmap ,error ){const _ggdc ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";
|
|
if _gceg ==nil {return nil ,_c .Error (_ggdc ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _dca ==nil {return nil ,_c .Error (_ggdc ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _fcaa error ;switch {case _ggb ==_gceg :if _fcaa =_ggb .RasterOperation (0,0,_gceg .Width ,_gceg .Height ,PixNotSrcAndDst ,_dca ,0,0);
|
|
_fcaa !=nil {return nil ,_c .Wrap (_fcaa ,_ggdc ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _ggb ==_dca :if _fcaa =_ggb .RasterOperation (0,0,_gceg .Width ,_gceg .Height ,PixNotSrcAndDst ,_gceg ,0,0);_fcaa !=nil {return nil ,_c .Wrap (_fcaa ,_ggdc ,"\u0064 \u003d\u003d\u0020\u0073\u0032");
|
|
};default:_ggb ,_fcaa =_edfg (_ggb ,_gceg );if _fcaa !=nil {return nil ,_c .Wrap (_fcaa ,_ggdc ,"");};if _fcaa =_ggb .RasterOperation (0,0,_gceg .Width ,_gceg .Height ,PixNotSrcAndDst ,_dca ,0,0);_fcaa !=nil {return nil ,_c .Wrap (_fcaa ,_ggdc ,"\u0064e\u0066\u0061\u0075\u006c\u0074");
|
|
};};return _ggb ,nil ;};func (_bfab *Bitmap )connComponentsBitmapsBB (_bgcg *Bitmaps ,_aebb int )(_bgf *Boxes ,_fbgf error ){const _gffe ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";
|
|
if _aebb !=4&&_aebb !=8{return nil ,_c .Error (_gffe ,"\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 _bgcg ==nil {return nil ,_c .Error (_gffe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
|
|
};if len (_bgcg .Values )> 0{return nil ,_c .Error (_gffe ,"\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 _bfab .Zero (){return &Boxes {},nil ;};
|
|
var (_aadeb ,_gbdd ,_dgbc ,_gge *Bitmap ;);_bfab .setPadBits (0);if _aadeb ,_fbgf =_edfg (nil ,_bfab );_fbgf !=nil {return nil ,_c .Wrap (_fbgf ,_gffe ,"\u0062\u006d\u0031");};if _gbdd ,_fbgf =_edfg (nil ,_bfab );_fbgf !=nil {return nil ,_c .Wrap (_fbgf ,_gffe ,"\u0062\u006d\u0032");
|
|
};_fgac :=&_cc .Stack {};_fgac .Aux =&_cc .Stack {};_bgf =&Boxes {};var (_afcc ,_daad int ;_degf _cd .Point ;_cdga bool ;_fdag *_cd .Rectangle ;);for {if _degf ,_cdga ,_fbgf =_aadeb .nextOnPixel (_afcc ,_daad );_fbgf !=nil {return nil ,_c .Wrap (_fbgf ,_gffe ,"");
|
|
};if !_cdga {break ;};if _fdag ,_fbgf =_cadc (_aadeb ,_fgac ,_degf .X ,_degf .Y ,_aebb );_fbgf !=nil {return nil ,_c .Wrap (_fbgf ,_gffe ,"");};if _fbgf =_bgf .Add (_fdag );_fbgf !=nil {return nil ,_c .Wrap (_fbgf ,_gffe ,"");};if _dgbc ,_fbgf =_aadeb .clipRectangle (_fdag ,nil );
|
|
_fbgf !=nil {return nil ,_c .Wrap (_fbgf ,_gffe ,"\u0062\u006d\u0033");};if _gge ,_fbgf =_gbdd .clipRectangle (_fdag ,nil );_fbgf !=nil {return nil ,_c .Wrap (_fbgf ,_gffe ,"\u0062\u006d\u0034");};if _ ,_fbgf =_eafb (_dgbc ,_dgbc ,_gge );_fbgf !=nil {return nil ,_c .Wrap (_fbgf ,_gffe ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");
|
|
};if _fbgf =_gbdd .RasterOperation (_fdag .Min .X ,_fdag .Min .Y ,_fdag .Dx (),_fdag .Dy (),PixSrcXorDst ,_dgbc ,0,0);_fbgf !=nil {return nil ,_c .Wrap (_fbgf ,_gffe ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};
|
|
_bgcg .AddBitmap (_dgbc );_afcc =_degf .X ;_daad =_degf .Y ;};_bgcg .Boxes =*_bgf ;return _bgf ,nil ;};type Boxes []*_cd .Rectangle ;func _gdg (_ede *Bitmap ,_cge ...int )(_fcb *Bitmap ,_fcba error ){const _gfa ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
|
|
if _ede ==nil {return nil ,_c .Error (_gfa ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_cge )==0||len (_cge )> 4{return nil ,_c .Error (_gfa ,"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 _cge [0]<=0{_fe .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");_fcb ,_fcba =_edfg (nil ,_ede );if _fcba !=nil {return nil ,_c .Wrap (_fcba ,_gfa ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
|
|
};return _fcb ,nil ;};_dbb :=_eaa ();_fcb =_ede ;for _abf ,_afe :=range _cge {if _afe <=0{break ;};_fcb ,_fcba =_ffde (_fcb ,_afe ,_dbb );if _fcba !=nil {return nil ,_c .Wrapf (_fcba ,_gfa ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_abf );
|
|
};};return _fcb ,nil ;};func (_fceac *Bitmap )nextOnPixel (_bfafc ,_faf int )(_aba _cd .Point ,_fad bool ,_bffc error ){const _ceb ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_aba ,_fad ,_bffc =_fceac .nextOnPixelLow (_fceac .Width ,_fceac .Height ,_fceac .RowStride ,_bfafc ,_faf );
|
|
if _bffc !=nil {return _aba ,false ,_c .Wrap (_bffc ,_ceb ,"");};return _aba ,_fad ,nil ;};func (_dfcab *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _aadb ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_dfcab .Values )==0{return nil ,_c .Error (_aadb ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
|
|
};_eefac :=&BitmapsArray {};_dfcab .SortByHeight ();_ddgdf :=-1;_dgedg :=-1;for _bdda :=0;_bdda < len (_dfcab .Values );_bdda ++{_egbbc :=_dfcab .Values [_bdda ].Height ;if _egbbc > _ddgdf {_ddgdf =_egbbc ;_dgedg ++;_eefac .Values =append (_eefac .Values ,&Bitmaps {});
|
|
};_eefac .Values [_dgedg ].AddBitmap (_dfcab .Values [_bdda ]);};return _eefac ,nil ;};func _dfgg (_efc ,_abca int )int {if _efc < _abca {return _efc ;};return _abca ;};func _facg (_faad ,_efca *Bitmap ,_bbca ,_cgcb ,_eeac uint ,_ffda ,_cccb int ,_gdga bool ,_fbe ,_fcfb int )error {for _egcc :=_ffda ;
|
|
_egcc < _cccb ;_egcc ++{if _fbe +1< len (_faad .Data ){_gde :=_egcc +1==_cccb ;_fbcg ,_gegf :=_faad .GetByte (_fbe );if _gegf !=nil {return _gegf ;};_fbe ++;_fbcg <<=_bbca ;_baacf ,_gegf :=_faad .GetByte (_fbe );if _gegf !=nil {return _gegf ;};_baacf >>=_cgcb ;
|
|
_acbg :=_fbcg |_baacf ;if _gde &&!_gdga {_acbg =_becf (_eeac ,_acbg );};_gegf =_efca .SetByte (_fcfb ,_acbg );if _gegf !=nil {return _gegf ;};_fcfb ++;if _gde &&_gdga {_fcdf ,_deae :=_faad .GetByte (_fbe );if _deae !=nil {return _deae ;};_fcdf <<=_bbca ;
|
|
_acbg =_becf (_eeac ,_fcdf );if _deae =_efca .SetByte (_fcfb ,_acbg );_deae !=nil {return _deae ;};};continue ;};_ecg ,_fdbg :=_faad .GetByte (_fbe );if _fdbg !=nil {_fe .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",_fbe ,_fdbg );
|
|
return _fdbg ;};_ecg <<=_bbca ;_fbe ++;_fdbg =_efca .SetByte (_fcfb ,_ecg );if _fdbg !=nil {return _fdbg ;};_fcfb ++;};return nil ;};func (_cfbf *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _cfbf .Copy (),nil ;};_gaad ,_afed :=_cfbf .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );
|
|
if _afed !=nil {return nil ,_c .Wrap (_afed ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _gaad ,nil ;};func (_bbb *Bitmap )addBorderGeneral (_fgdg ,_beg ,_adde ,_efd int ,_eggb int )(*Bitmap ,error ){const _eae ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
|
|
if _fgdg < 0||_beg < 0||_adde < 0||_efd < 0{return nil ,_c .Error (_eae ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_fffg ,_dabg :=_bbb .Width ,_bbb .Height ;_ege :=_fffg +_fgdg +_beg ;_agb :=_dabg +_adde +_efd ;
|
|
_egec :=New (_ege ,_agb );_egec .Color =_bbb .Color ;_gebc :=PixClr ;if _eggb > 0{_gebc =PixSet ;};_bgg :=_egec .RasterOperation (0,0,_fgdg ,_agb ,_gebc ,nil ,0,0);if _bgg !=nil {return nil ,_c .Wrap (_bgg ,_eae ,"\u006c\u0065\u0066\u0074");};_bgg =_egec .RasterOperation (_ege -_beg ,0,_beg ,_agb ,_gebc ,nil ,0,0);
|
|
if _bgg !=nil {return nil ,_c .Wrap (_bgg ,_eae ,"\u0072\u0069\u0067h\u0074");};_bgg =_egec .RasterOperation (0,0,_ege ,_adde ,_gebc ,nil ,0,0);if _bgg !=nil {return nil ,_c .Wrap (_bgg ,_eae ,"\u0074\u006f\u0070");};_bgg =_egec .RasterOperation (0,_agb -_efd ,_ege ,_efd ,_gebc ,nil ,0,0);
|
|
if _bgg !=nil {return nil ,_c .Wrap (_bgg ,_eae ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_bgg =_egec .RasterOperation (_fgdg ,_adde ,_fffg ,_dabg ,PixSrc ,_bbb ,0,0);if _bgg !=nil {return nil ,_c .Wrap (_bgg ,_eae ,"\u0063\u006f\u0070\u0079");};return _egec ,nil ;
|
|
};type SizeSelection int ;func _fffe (_faea *_cc .Stack )(_fabdg *fillSegment ,_eeea error ){const _dabbc ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _faea ==nil {return nil ,_c .Error (_dabbc ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
|
|
};if _faea .Aux ==nil {return nil ,_c .Error (_dabbc ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_feaad ,_bafdd :=_faea .Pop ();if !_bafdd {return nil ,nil ;};_cfeg ,_bafdd :=_feaad .(*fillSegment );
|
|
if !_bafdd {return nil ,_c .Error (_dabbc ,"\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");};_fabdg =&fillSegment {_cfeg ._daaea ,_cfeg ._bdeg ,_cfeg ._edde +_cfeg ._egafg ,_cfeg ._egafg };
|
|
_faea .Aux .Push (_cfeg );return _fabdg ,nil ;};func (_faeg MorphProcess )getWidthHeight ()(_dfdc ,_bccda int ){return _faeg .Arguments [0],_faeg .Arguments [1];};func (_eeeeb *ClassedPoints )YAtIndex (i int )float32 {return (*_eeeeb .Points )[_eeeeb .IntSlice [i ]].Y };
|
|
func Rect (x ,y ,w ,h int )(*_cd .Rectangle ,error ){const _gffg ="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 (_gffg ,"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 (_gffg ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_afa :=_cd .Rect (x ,y ,x +w ,y +h );return &_afa ,nil ;
|
|
};func _dgd (_dgf ,_abe *Bitmap ,_ffdg int ,_afb []byte ,_ebd int )(_efg error ){const _aab ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";var (_bbd ,_geb ,_edgd ,_ca ,_fda ,_febb ,_aeeg ,_cef int ;
|
|
_bec ,_fce ,_gcd ,_fdb uint32 ;_dbbdd ,_eaf byte ;_aff uint16 ;);_deb :=make ([]byte ,4);_cbe :=make ([]byte ,4);for _edgd =0;_edgd < _dgf .Height -1;_edgd ,_ca =_edgd +2,_ca +1{_bbd =_edgd *_dgf .RowStride ;_geb =_ca *_abe .RowStride ;for _fda ,_febb =0,0;
|
|
_fda < _ebd ;_fda ,_febb =_fda +4,_febb +1{for _aeeg =0;_aeeg < 4;_aeeg ++{_cef =_bbd +_fda +_aeeg ;if _cef <=len (_dgf .Data )-1&&_cef < _bbd +_dgf .RowStride {_deb [_aeeg ]=_dgf .Data [_cef ];}else {_deb [_aeeg ]=0x00;};_cef =_bbd +_dgf .RowStride +_fda +_aeeg ;
|
|
if _cef <=len (_dgf .Data )-1&&_cef < _bbd +(2*_dgf .RowStride ){_cbe [_aeeg ]=_dgf .Data [_cef ];}else {_cbe [_aeeg ]=0x00;};};_bec =_g .BigEndian .Uint32 (_deb );_fce =_g .BigEndian .Uint32 (_cbe );_gcd =_bec &_fce ;_gcd |=_gcd <<1;_fdb =_bec |_fce ;
|
|
_fdb &=_fdb <<1;_fce =_gcd |_fdb ;_fce &=0xaaaaaaaa;_bec =_fce |(_fce <<7);_dbbdd =byte (_bec >>24);_eaf =byte ((_bec >>8)&0xff);_cef =_geb +_febb ;if _cef +1==len (_abe .Data )-1||_cef +1>=_geb +_abe .RowStride {if _efg =_abe .SetByte (_cef ,_afb [_dbbdd ]);
|
|
_efg !=nil {return _c .Wrapf (_efg ,_aab ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_cef );};}else {_aff =(uint16 (_afb [_dbbdd ])<<8)|uint16 (_afb [_eaf ]);if _efg =_abe .setTwoBytes (_cef ,_aff );_efg !=nil {return _c .Wrapf (_efg ,_aab ,"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",_cef );
|
|
};_febb ++;};};};return nil ;};func (_eeb *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _gbaa ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _eeb ==nil {return nil ,_c .Error (_gbaa ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if s ==nil {return nil ,_c .Error (_gbaa ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_dagf :=len (_eeb .Values );_fbgcb :=&Bitmaps {Values :make ([]*Bitmap ,_dagf ),Boxes :make ([]*_cd .Rectangle ,_dagf )};
|
|
var (_baede ,_efgcf *Bitmap ;_agag *_cd .Rectangle ;_acdc error ;);for _ebgb :=0;_ebgb < _dagf ;_ebgb ++{if _baede ,_acdc =_eeb .GetBitmap (_ebgb );_acdc !=nil {return nil ,_c .Wrap (_acdc ,_gbaa ,"");};if _agag ,_acdc =_eeb .GetBox (_ebgb );_acdc !=nil {return nil ,_c .Wrap (_acdc ,_gbaa ,"");
|
|
};if _efgcf ,_acdc =s .clipRectangle (_agag ,nil );_acdc !=nil {return nil ,_c .Wrap (_acdc ,_gbaa ,"");};if _efgcf ,_acdc =_efgcf .And (_baede );_acdc !=nil {return nil ,_c .Wrap (_acdc ,_gbaa ,"");};_fbgcb .Values [_ebgb ]=_efgcf ;_fbgcb .Boxes [_ebgb ]=_agag ;
|
|
};return _fbgcb ,nil ;};func (_fede *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _dcdf ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _fede ==nil {return nil ,_c .Error (_dcdf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
|
|
};if i > len (_fede .Values )-1{return nil ,_c .Errorf (_dcdf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _fede .Values [i ],nil ;};type Color int ;
|
|
func _cggff (_dgdd *Bitmap ,_acbgg *Bitmap ,_gbae *Selection )(*Bitmap ,error ){var (_bdbb *Bitmap ;_adcc error ;);_dgdd ,_adcc =_ddff (_dgdd ,_acbgg ,_gbae ,&_bdbb );if _adcc !=nil {return nil ,_adcc ;};if _adcc =_dgdd .clearAll ();_adcc !=nil {return nil ,_adcc ;
|
|
};var _dcdb SelectionValue ;for _aefc :=0;_aefc < _gbae .Height ;_aefc ++{for _fadaa :=0;_fadaa < _gbae .Width ;_fadaa ++{_dcdb =_gbae .Data [_aefc ][_fadaa ];if _dcdb ==SelHit {if _adcc =_dgdd .RasterOperation (_fadaa -_gbae .Cx ,_aefc -_gbae .Cy ,_acbgg .Width ,_acbgg .Height ,PixSrcOrDst ,_bdbb ,0,0);
|
|
_adcc !=nil {return nil ,_adcc ;};};};};return _dgdd ,nil ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _abd (d ,s ,hSize ,vSize )};func (_gdb *byHeight )Swap (i ,j int ){_gdb .Values [i ],_gdb .Values [j ]=_gdb .Values [j ],_gdb .Values [i ];
|
|
if _gdb .Boxes !=nil {_gdb .Boxes [i ],_gdb .Boxes [j ]=_gdb .Boxes [j ],_gdb .Boxes [i ];};};func TstFrameBitmap ()*Bitmap {return _begfc .Copy ()};func _deff (_fege *Bitmap ,_cgbb ,_eeefe int ,_cdfa ,_caad int ,_gfec RasterOperator ){var (_bgdgc bool ;
|
|
_fgbg bool ;_cbafb int ;_fagd int ;_deeb int ;_fbffc int ;_adaa bool ;_daebb byte ;);_bcgdf :=8-(_cgbb &7);_ggedef :=_geea [_bcgdf ];_bgbb :=_fege .RowStride *_eeefe +(_cgbb >>3);if _cdfa < _bcgdf {_bgdgc =true ;_ggedef &=_aceg [8-_bcgdf +_cdfa ];};if !_bgdgc {_cbafb =(_cdfa -_bcgdf )>>3;
|
|
if _cbafb !=0{_fgbg =true ;_fagd =_bgbb +1;};};_deeb =(_cgbb +_cdfa )&7;if !(_bgdgc ||_deeb ==0){_adaa =true ;_daebb =_aceg [_deeb ];_fbffc =_bgbb +1+_cbafb ;};var _ecbb ,_eddd int ;switch _gfec {case PixClr :for _ecbb =0;_ecbb < _caad ;_ecbb ++{_fege .Data [_bgbb ]=_cadg (_fege .Data [_bgbb ],0x0,_ggedef );
|
|
_bgbb +=_fege .RowStride ;};if _fgbg {for _ecbb =0;_ecbb < _caad ;_ecbb ++{for _eddd =0;_eddd < _cbafb ;_eddd ++{_fege .Data [_fagd +_eddd ]=0x0;};_fagd +=_fege .RowStride ;};};if _adaa {for _ecbb =0;_ecbb < _caad ;_ecbb ++{_fege .Data [_fbffc ]=_cadg (_fege .Data [_fbffc ],0x0,_daebb );
|
|
_fbffc +=_fege .RowStride ;};};case PixSet :for _ecbb =0;_ecbb < _caad ;_ecbb ++{_fege .Data [_bgbb ]=_cadg (_fege .Data [_bgbb ],0xff,_ggedef );_bgbb +=_fege .RowStride ;};if _fgbg {for _ecbb =0;_ecbb < _caad ;_ecbb ++{for _eddd =0;_eddd < _cbafb ;_eddd ++{_fege .Data [_fagd +_eddd ]=0xff;
|
|
};_fagd +=_fege .RowStride ;};};if _adaa {for _ecbb =0;_ecbb < _caad ;_ecbb ++{_fege .Data [_fbffc ]=_cadg (_fege .Data [_fbffc ],0xff,_daebb );_fbffc +=_fege .RowStride ;};};case PixNotDst :for _ecbb =0;_ecbb < _caad ;_ecbb ++{_fege .Data [_bgbb ]=_cadg (_fege .Data [_bgbb ],^_fege .Data [_bgbb ],_ggedef );
|
|
_bgbb +=_fege .RowStride ;};if _fgbg {for _ecbb =0;_ecbb < _caad ;_ecbb ++{for _eddd =0;_eddd < _cbafb ;_eddd ++{_fege .Data [_fagd +_eddd ]=^(_fege .Data [_fagd +_eddd ]);};_fagd +=_fege .RowStride ;};};if _adaa {for _ecbb =0;_ecbb < _caad ;_ecbb ++{_fege .Data [_fbffc ]=_cadg (_fege .Data [_fbffc ],^_fege .Data [_fbffc ],_daebb );
|
|
_fbffc +=_fege .RowStride ;};};};};func _baaca (_eac ,_cad *Bitmap ,_ccc ,_bbcb ,_gcf ,_egf ,_ccde ,_dbba ,_efbe ,_cdcf int ,_fegb CombinationOperator ,_gfab int )error {var _eeee int ;_ebgd :=func (){_eeee ++;_gcf +=_cad .RowStride ;_egf +=_eac .RowStride ;
|
|
_ccde +=_eac .RowStride };for _eeee =_ccc ;_eeee < _bbcb ;_ebgd (){var _ceagd uint16 ;_cgdb :=_gcf ;for _egcae :=_egf ;_egcae <=_ccde ;_egcae ++{_bgge ,_abfe :=_cad .GetByte (_cgdb );if _abfe !=nil {return _abfe ;};_dcbgd ,_abfe :=_eac .GetByte (_egcae );
|
|
if _abfe !=nil {return _abfe ;};_ceagd =(_ceagd |(uint16 (_dcbgd )&0xff))<<uint (_cdcf );_dcbgd =byte (_ceagd >>8);if _abfe =_cad .SetByte (_cgdb ,_fcgde (_bgge ,_dcbgd ,_fegb ));_abfe !=nil {return _abfe ;};_cgdb ++;_ceagd <<=uint (_efbe );if _egcae ==_ccde {_dcbgd =byte (_ceagd >>(8-uint8 (_cdcf )));
|
|
if _gfab !=0{_dcbgd =_becf (uint (8+_dbba ),_dcbgd );};_bgge ,_abfe =_cad .GetByte (_cgdb );if _abfe !=nil {return _abfe ;};if _abfe =_cad .SetByte (_cgdb ,_fcgde (_bgge ,_dcbgd ,_fegb ));_abfe !=nil {return _abfe ;};};};};return nil ;};func TstImageBitmapInverseData ()[]byte {_cccf :=_cecc .Copy ();
|
|
_cccf .InverseData ();return _cccf .Data ;};func (_aae *Bitmap )GetBitOffset (x int )int {return x &0x07};func _eafb (_fece ,_caac ,_faa *Bitmap )(*Bitmap ,error ){const _gaaf ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _caac ==nil {return nil ,_c .Error (_gaaf ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
|
|
};if _faa ==nil {return nil ,_c .Error (_gaaf ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _fece ==_faa {return nil ,_c .Error (_gaaf ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_caac .SizesEqual (_faa ){_fe .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",_gaaf );
|
|
};var _bea error ;if _fece ,_bea =_edfg (_fece ,_caac );_bea !=nil {return nil ,_c .Wrap (_bea ,_gaaf ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _bea =_fece .RasterOperation (0,0,_fece .Width ,_fece .Height ,PixSrcXorDst ,_faa ,0,0);
|
|
_bea !=nil {return nil ,_c .Wrap (_bea ,_gaaf ,"");};return _fece ,nil ;};type ClassedPoints struct{*Points ;_cc .IntSlice ;_gbbd func (_fbcb ,_bafc int )bool ;};func (_eaec *ClassedPoints )validateIntSlice ()error {const _bad ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";
|
|
for _ ,_efdge :=range _eaec .IntSlice {if _efdge >=(_eaec .Points .Size ()){return _c .Errorf (_bad ,"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",_efdge ,_eaec .Points .Size ());
|
|
};};return nil ;};func _cadg (_agddb ,_fefb ,_cagdc byte )byte {return (_agddb &^(_cagdc ))|(_fefb &_cagdc )};func (_dfe *Bitmap )GetChocolateData ()[]byte {if _dfe .Color ==Vanilla {_dfe .inverseData ();};return _dfe .Data ;};const (AsymmetricMorphBC BoundaryCondition =iota ;
|
|
SymmetricMorphBC ;);func (_afeea *Bitmaps )String ()string {_dbc :=_a .Builder {};for _ ,_dcbf :=range _afeea .Values {_dbc .WriteString (_dcbf .String ());_dbc .WriteRune ('\n');};return _dbc .String ();};func (_dffg *Boxes )Add (box *_cd .Rectangle )error {if _dffg ==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");
|
|
};*_dffg =append (*_dffg ,box );return nil ;};func (_cegcc *Bitmap )setFourBytes (_fdce int ,_dfca uint32 )error {if _fdce +3> len (_cegcc .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",_fdce );
|
|
};_cegcc .Data [_fdce ]=byte ((_dfca &0xff000000)>>24);_cegcc .Data [_fdce +1]=byte ((_dfca &0xff0000)>>16);_cegcc .Data [_fdce +2]=byte ((_dfca &0xff00)>>8);_cegcc .Data [_fdce +3]=byte (_dfca &0xff);return nil ;};func (_faca *Bitmap )setEightFullBytes (_dcff int ,_ecc uint64 )error {if _dcff +7> len (_faca .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");
|
|
};_faca .Data [_dcff ]=byte ((_ecc &0xff00000000000000)>>56);_faca .Data [_dcff +1]=byte ((_ecc &0xff000000000000)>>48);_faca .Data [_dcff +2]=byte ((_ecc &0xff0000000000)>>40);_faca .Data [_dcff +3]=byte ((_ecc &0xff00000000)>>32);_faca .Data [_dcff +4]=byte ((_ecc &0xff000000)>>24);
|
|
_faca .Data [_dcff +5]=byte ((_ecc &0xff0000)>>16);_faca .Data [_dcff +6]=byte ((_ecc &0xff00)>>8);_faca .Data [_dcff +7]=byte (_ecc &0xff);return nil ;};func (_fccd *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_fccd .Width ,Height :_fccd .Height ,RowStride :_fccd .RowStride ,Color :_fccd .Color ,Text :_fccd .Text ,BitmapNumber :_fccd .BitmapNumber ,Special :_fccd .Special ,Data :make ([]byte ,len (_fccd .Data ))};
|
|
};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func (_ebaga *Bitmaps )AddBitmap (bm *Bitmap ){_ebaga .Values =append (_ebaga .Values ,bm )};func (_fbfg CombinationOperator )String ()string {var _ggecc string ;switch _fbfg {case CmbOpOr :_ggecc ="\u004f\u0052";
|
|
case CmbOpAnd :_ggecc ="\u0041\u004e\u0044";case CmbOpXor :_ggecc ="\u0058\u004f\u0052";case CmbOpXNor :_ggecc ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_ggecc ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_ggecc ="\u004e\u004f\u0054";};
|
|
return _ggecc ;};type byWidth Bitmaps ;func _bcab (_cdd *Bitmap ,_abcaga *_cc .Stack ,_aegc ,_ecfa int )(_adfaf *_cd .Rectangle ,_cbgaf error ){const _fgaa ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _cdd ==nil {return nil ,_c .Error (_fgaa ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
|
|
};if _abcaga ==nil {return nil ,_c .Error (_fgaa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_bgfdg ,_gbdfa :=_cdd .Width ,_cdd .Height ;_ggdf :=_bgfdg -1;_gfecd :=_gbdfa -1;if _aegc < 0||_aegc > _ggdf ||_ecfa < 0||_ecfa > _gfecd ||!_cdd .GetPixel (_aegc ,_ecfa ){return nil ,nil ;
|
|
};var _gbdfb *_cd .Rectangle ;_gbdfb ,_cbgaf =Rect (100000,100000,0,0);if _cbgaf !=nil {return nil ,_c .Wrap (_cbgaf ,_fgaa ,"");};if _cbgaf =_bag (_abcaga ,_aegc ,_aegc ,_ecfa ,1,_gfecd ,_gbdfb );_cbgaf !=nil {return nil ,_c .Wrap (_cbgaf ,_fgaa ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
|
|
};if _cbgaf =_bag (_abcaga ,_aegc ,_aegc ,_ecfa +1,-1,_gfecd ,_gbdfb );_cbgaf !=nil {return nil ,_c .Wrap (_cbgaf ,_fgaa ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_gbdfb .Min .X ,_gbdfb .Max .X =_aegc ,_aegc ;
|
|
_gbdfb .Min .Y ,_gbdfb .Max .Y =_ecfa ,_ecfa ;var (_fddc *fillSegment ;_ffb int ;);for _abcaga .Len ()> 0{if _fddc ,_cbgaf =_fffe (_abcaga );_cbgaf !=nil {return nil ,_c .Wrap (_cbgaf ,_fgaa ,"");};_ecfa =_fddc ._edde ;for _aegc =_fddc ._daaea ;_aegc >=0&&_cdd .GetPixel (_aegc ,_ecfa );
|
|
_aegc --{if _cbgaf =_cdd .SetPixel (_aegc ,_ecfa ,0);_cbgaf !=nil {return nil ,_c .Wrap (_cbgaf ,_fgaa ,"");};};if _aegc >=_fddc ._daaea {for _aegc ++;_aegc <=_fddc ._bdeg &&_aegc <=_ggdf &&!_cdd .GetPixel (_aegc ,_ecfa );_aegc ++{};_ffb =_aegc ;if !(_aegc <=_fddc ._bdeg &&_aegc <=_ggdf ){continue ;
|
|
};}else {_ffb =_aegc +1;if _ffb < _fddc ._daaea -1{if _cbgaf =_bag (_abcaga ,_ffb ,_fddc ._daaea -1,_fddc ._edde ,-_fddc ._egafg ,_gfecd ,_gbdfb );_cbgaf !=nil {return nil ,_c .Wrap (_cbgaf ,_fgaa ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
|
|
};};_aegc =_fddc ._daaea +1;};for {for ;_aegc <=_ggdf &&_cdd .GetPixel (_aegc ,_ecfa );_aegc ++{if _cbgaf =_cdd .SetPixel (_aegc ,_ecfa ,0);_cbgaf !=nil {return nil ,_c .Wrap (_cbgaf ,_fgaa ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _cbgaf =_bag (_abcaga ,_ffb ,_aegc -1,_fddc ._edde ,_fddc ._egafg ,_gfecd ,_gbdfb );
|
|
_cbgaf !=nil {return nil ,_c .Wrap (_cbgaf ,_fgaa ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _aegc > _fddc ._bdeg +1{if _cbgaf =_bag (_abcaga ,_fddc ._bdeg +1,_aegc -1,_fddc ._edde ,-_fddc ._egafg ,_gfecd ,_gbdfb );_cbgaf !=nil {return nil ,_c .Wrap (_cbgaf ,_fgaa ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};for _aegc ++;_aegc <=_fddc ._bdeg &&_aegc <=_ggdf &&!_cdd .GetPixel (_aegc ,_ecfa );_aegc ++{};_ffb =_aegc ;if !(_aegc <=_fddc ._bdeg &&_aegc <=_ggdf ){break ;};};};_gbdfb .Max .X ++;_gbdfb .Max .Y ++;return _gbdfb ,nil ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _ccd ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
|
|
_fcce :=_agg (width ,height );_fcce .Data =data ;if _dad :=((width *height )+7)>>3;len (data )< _dad {return nil ,_c .Errorf (_ccd ,"\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 ),_dad );
|
|
};if _ad :=_fcce .addPadBits ();_ad !=nil {return nil ,_c .Wrap (_ad ,_ccd ,"");};return _fcce ,nil ;};func (_fecc *Bitmap )setTwoBytes (_ddc int ,_bbba uint16 )error {if _ddc +1> len (_fecc .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",_ddc );
|
|
};_fecc .Data [_ddc ]=byte ((_bbba &0xff00)>>8);_fecc .Data [_ddc +1]=byte (_bbba &0xff);return nil ;};type MorphOperation int ;func (_fcead *BitmapsArray )GetBox (i int )(*_cd .Rectangle ,error ){const _ccee ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";
|
|
if _fcead ==nil {return nil ,_c .Error (_ccee ,"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 (_fcead .Boxes )-1{return nil ,_c .Errorf (_ccee ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return _fcead .Boxes [i ],nil ;};func _fbga (_dfg ,_abg *Bitmap ,_fgd int ,_dfbf []byte ,_fge int )(_gbg error ){const _ebb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";
|
|
var (_fcec ,_egb ,_gbd ,_bdd ,_aad ,_gfed ,_ecd ,_gga int ;_cgca ,_edb ,_cab ,_aade uint32 ;_fgfb ,_dgdc byte ;_gab uint16 ;);_abec :=make ([]byte ,4);_bcbd :=make ([]byte ,4);for _gbd =0;_gbd < _dfg .Height -1;_gbd ,_bdd =_gbd +2,_bdd +1{_fcec =_gbd *_dfg .RowStride ;
|
|
_egb =_bdd *_abg .RowStride ;for _aad ,_gfed =0,0;_aad < _fge ;_aad ,_gfed =_aad +4,_gfed +1{for _ecd =0;_ecd < 4;_ecd ++{_gga =_fcec +_aad +_ecd ;if _gga <=len (_dfg .Data )-1&&_gga < _fcec +_dfg .RowStride {_abec [_ecd ]=_dfg .Data [_gga ];}else {_abec [_ecd ]=0x00;
|
|
};_gga =_fcec +_dfg .RowStride +_aad +_ecd ;if _gga <=len (_dfg .Data )-1&&_gga < _fcec +(2*_dfg .RowStride ){_bcbd [_ecd ]=_dfg .Data [_gga ];}else {_bcbd [_ecd ]=0x00;};};_cgca =_g .BigEndian .Uint32 (_abec );_edb =_g .BigEndian .Uint32 (_bcbd );_cab =_cgca &_edb ;
|
|
_cab |=_cab <<1;_aade =_cgca |_edb ;_aade &=_aade <<1;_edb =_cab &_aade ;_edb &=0xaaaaaaaa;_cgca =_edb |(_edb <<7);_fgfb =byte (_cgca >>24);_dgdc =byte ((_cgca >>8)&0xff);_gga =_egb +_gfed ;if _gga +1==len (_abg .Data )-1||_gga +1>=_egb +_abg .RowStride {if _gbg =_abg .SetByte (_gga ,_dfbf [_fgfb ]);
|
|
_gbg !=nil {return _c .Wrapf (_gbg ,_ebb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gga );};}else {_gab =(uint16 (_dfbf [_fgfb ])<<8)|uint16 (_dfbf [_dgdc ]);if _gbg =_abg .setTwoBytes (_gga ,_gab );_gbg !=nil {return _c .Wrapf (_gbg ,_ebb ,"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",_gga );
|
|
};_gfed ++;};};};return nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_cd .Rectangle ;};func (_bcdgd Points )GetIntX (i int )(int ,error ){if i >=len (_bcdgd ){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 (_bcdgd [i ].X ),nil ;};func (_gcba *Bitmap )Equals (s *Bitmap )bool {if len (_gcba .Data )!=len (s .Data )||_gcba .Width !=s .Width ||_gcba .Height !=s .Height {return false ;};for _bgd :=0;_bgd < _gcba .Height ;_bgd ++{_cffe :=_bgd *_gcba .RowStride ;
|
|
for _bcf :=0;_bcf < _gcba .RowStride ;_bcf ++{if _gcba .Data [_cffe +_bcf ]!=s .Data [_cffe +_bcf ]{return false ;};};};return true ;};func _aeb ()(_bdf [256]uint32 ){for _gcg :=0;_gcg < 256;_gcg ++{if _gcg &0x01!=0{_bdf [_gcg ]|=0xf;};if _gcg &0x02!=0{_bdf [_gcg ]|=0xf0;
|
|
};if _gcg &0x04!=0{_bdf [_gcg ]|=0xf00;};if _gcg &0x08!=0{_bdf [_gcg ]|=0xf000;};if _gcg &0x10!=0{_bdf [_gcg ]|=0xf0000;};if _gcg &0x20!=0{_bdf [_gcg ]|=0xf00000;};if _gcg &0x40!=0{_bdf [_gcg ]|=0xf000000;};if _gcg &0x80!=0{_bdf [_gcg ]|=0xf0000000;};};
|
|
return _bdf ;};func Centroids (bms []*Bitmap )(*Points ,error ){_bbf :=make ([]Point ,len (bms ));_dfbc :=_agfa ();_aaac :=_daca ();var _dba error ;for _ffac ,_aca :=range bms {_bbf [_ffac ],_dba =_aca .centroid (_dfbc ,_aaac );if _dba !=nil {return nil ,_dba ;
|
|
};};_gfedd :=Points (_bbf );return &_gfedd ,nil ;};func (_aafdc *byHeight )Less (i ,j int )bool {return _aafdc .Values [i ].Height < _aafdc .Values [j ].Height };func TstWordBitmap (t *_eb .T ,scale ...int )*Bitmap {_fdad :=1;if len (scale )> 0{_fdad =scale [0];
|
|
};_aede :=3;_gdccd :=9+7+15+2*_aede ;_cfeb :=5+_aede +5;_eedag :=New (_gdccd *_fdad ,_cfeb *_fdad );_feag :=&Bitmaps {};var _aeed *int ;_aede *=_fdad ;_afba :=0;_aeed =&_afba ;_gcge :=0;_cabf :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,1*_fdad );
|
|
_cabf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,_aede );_cabf =TstISymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,1*_fdad );_cabf =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,_aede );
|
|
_cabf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,1*_fdad );_cabf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,1*_fdad );_cabf =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,0);
|
|
*_aeed =0;_gcge =5*_fdad +_aede ;_cabf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,1*_fdad );_cabf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,_aede );_cabf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,1*_fdad );
|
|
_cabf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,1*_fdad );_cabf =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,1*_fdad );_cabf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,1*_fdad );
|
|
_cabf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_feag ,_cabf ,_aeed ,_gcge ,0);TstWriteSymbols (t ,_feag ,_eedag );return _eedag ;};func (_dgcb *Bitmaps )AddBox (box *_cd .Rectangle ){_dgcb .Boxes =append (_dgcb .Boxes ,box )};func (_cagg *Bitmap )setBit (_bgc int ){_cagg .Data [(_bgc >>3)]|=0x80>>uint (_bgc &7)};
|
|
func TstOSymbol (t *_eb .T ,scale ...int )*Bitmap {_dbbc ,_bfed :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_e .NoError (t ,_bfed );return TstGetScaledSymbol (t ,_dbbc ,scale ...);};type BoundaryCondition int ;func (_bbc *Bitmap )SetPixel (x ,y int ,pixel byte )error {_fcfg :=_bbc .GetByteIndex (x ,y );
|
|
if _fcfg > len (_bbc .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",_fcfg );};_eec :=_bbc .GetBitOffset (x );
|
|
_dfef :=uint (7-_eec );_aaec :=_bbc .Data [_fcfg ];var _cdf byte ;if pixel ==1{_cdf =_aaec |(pixel &0x01<<_dfef );}else {_cdf =_aaec &^(1<<_dfef );};_bbc .Data [_fcfg ]=_cdf ;return nil ;};func MakePixelCentroidTab8 ()[]int {return _agfa ()};func _dc (_gf ,_df *Bitmap )(_ge error ){const _ceg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";
|
|
_cff :=_df .RowStride ;_aa :=_gf .RowStride ;var (_b byte ;_fb uint16 ;_ged ,_bg ,_ee ,_bf ,_fec int ;);for _ee =0;_ee < _df .Height ;_ee ++{_ged =_ee *_cff ;_bg =2*_ee *_aa ;for _bf =0;_bf < _cff ;_bf ++{_b =_df .Data [_ged +_bf ];_fb =_efaf [_b ];_fec =_bg +_bf *2;
|
|
if _gf .RowStride !=_df .RowStride *2&&(_bf +1)*2> _gf .RowStride {_ge =_gf .SetByte (_fec ,byte (_fb >>8));}else {_ge =_gf .setTwoBytes (_fec ,_fb );};if _ge !=nil {return _c .Wrap (_ge ,_ceg ,"");};};for _bf =0;_bf < _aa ;_bf ++{_fec =_bg +_aa +_bf ;
|
|
_b =_gf .Data [_bg +_bf ];if _ge =_gf .SetByte (_fec ,_b );_ge !=nil {return _c .Wrapf (_ge ,_ceg ,"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",_bg +_bf ,_bg +_aa +_bf );
|
|
};};};return nil ;};func _ddff (_aaeec *Bitmap ,_ggbad *Bitmap ,_cfca *Selection ,_aaab **Bitmap )(*Bitmap ,error ){const _ggc ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _ggbad ==nil {return nil ,_c .Error (_ggc ,"\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 _cfca ==nil {return nil ,_c .Error (_ggc ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_gddf ,_acad :=_cfca .Height ,_cfca .Width ;if _gddf ==0||_acad ==0{return nil ,_c .Error (_ggc ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
|
|
};if _aaeec ==nil {_aaeec =_ggbad .createTemplate ();*_aaab =_ggbad ;return _aaeec ,nil ;};_aaeec .Width =_ggbad .Width ;_aaeec .Height =_ggbad .Height ;_aaeec .RowStride =_ggbad .RowStride ;_aaeec .Color =_ggbad .Color ;_aaeec .Data =make ([]byte ,_ggbad .RowStride *_ggbad .Height );
|
|
if _aaeec ==_ggbad {*_aaab =_ggbad .Copy ();}else {*_aaab =_ggbad ;};return _aaeec ,nil ;};func _bbgc (_aadedd ,_fccf *Bitmap ,_addb ,_geaa int )(*Bitmap ,error ){const _eged ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _fccf ==nil {return nil ,_c .Error (_eged ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
|
|
};if _addb < 1&&_geaa < 1{return nil ,_c .Error (_eged ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _addb ==1&&_geaa ==1{return _fccf .Copy (),nil ;};if _addb ==1||_geaa ==1{var _gdada error ;
|
|
_gfcf :=SelCreateBrick (_geaa ,_addb ,_geaa /2,_addb /2,SelHit );_aadedd ,_gdada =_bedeb (_aadedd ,_fccf ,_gfcf );if _gdada !=nil {return nil ,_c .Wrap (_gdada ,_eged ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _aadedd ,nil ;};_gbgc :=SelCreateBrick (1,_addb ,0,_addb /2,SelHit );_dfbfd :=SelCreateBrick (_geaa ,1,_geaa /2,0,SelHit );_egad ,_acab :=_ggfa (nil ,_fccf ,_gbgc );if _acab !=nil {return nil ,_c .Wrap (_acab ,_eged ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};_aadedd ,_acab =_ggfa (_aadedd ,_egad ,_dfbfd );if _acab !=nil {return nil ,_c .Wrap (_acab ,_eged ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_acab =_cggff (_egad ,_aadedd ,_gbgc );if _acab !=nil {return nil ,_c .Wrap (_acab ,_eged ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};_ ,_acab =_cggff (_aadedd ,_egad ,_dfbfd );if _acab !=nil {return nil ,_c .Wrap (_acab ,_eged ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _aadedd ,nil ;};func (_cabb *Bitmaps )selectByIndexes (_fecdf []int )(*Bitmaps ,error ){_bcgb :=&Bitmaps {};
|
|
for _ ,_edeed :=range _fecdf {_cbbdf ,_eff :=_cabb .GetBitmap (_edeed );if _eff !=nil {return nil ,_c .Wrap (_eff ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_bcgb .AddBitmap (_cbbdf );};return _bcgb ,nil ;
|
|
};func TstCSymbol (t *_eb .T )*Bitmap {t .Helper ();_aedb :=New (6,6);_e .NoError (t ,_aedb .SetPixel (1,0,1));_e .NoError (t ,_aedb .SetPixel (2,0,1));_e .NoError (t ,_aedb .SetPixel (3,0,1));_e .NoError (t ,_aedb .SetPixel (4,0,1));_e .NoError (t ,_aedb .SetPixel (0,1,1));
|
|
_e .NoError (t ,_aedb .SetPixel (5,1,1));_e .NoError (t ,_aedb .SetPixel (0,2,1));_e .NoError (t ,_aedb .SetPixel (0,3,1));_e .NoError (t ,_aedb .SetPixel (0,4,1));_e .NoError (t ,_aedb .SetPixel (5,4,1));_e .NoError (t ,_aedb .SetPixel (1,5,1));_e .NoError (t ,_aedb .SetPixel (2,5,1));
|
|
_e .NoError (t ,_aedb .SetPixel (3,5,1));_e .NoError (t ,_aedb .SetPixel (4,5,1));return _aedb ;};var _ _f .Interface =&ClassedPoints {};func TstGetScaledSymbol (t *_eb .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;
|
|
};_fcgaf ,_afccb :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_e .NoError (t ,_afccb );return _fcgaf ;};var _bdab =[]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};
|
|
const (_faef shift =iota ;_fagc ;);func _ddg (_cfb *Bitmap ,_gdc ,_gce int )(*Bitmap ,error ){const _baa ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _cfb ==nil {return nil ,_c .Error (_baa ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _gdc <=0||_gce <=0{return nil ,_c .Error (_baa ,"\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 _gdc ==_gce {if _gdc ==1{_ec ,_db :=_edfg (nil ,_cfb );
|
|
if _db !=nil {return nil ,_c .Wrap (_db ,_baa ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _ec ,nil ;};if _gdc ==2||_gdc ==4||_gdc ==8{_bab ,_cgg :=_de (_cfb ,_gdc );if _cgg !=nil {return nil ,_c .Wrap (_cgg ,_baa ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");
|
|
};return _bab ,nil ;};};_ed :=_gdc *_cfb .Width ;_feb :=_gce *_cfb .Height ;_dg :=New (_ed ,_feb );_dbf :=_dg .RowStride ;var (_gaa ,_ef ,_cegc ,_bef ,_babe int ;_ffd byte ;_aef error ;);for _ef =0;_ef < _cfb .Height ;_ef ++{_gaa =_gce *_ef *_dbf ;for _cegc =0;
|
|
_cegc < _cfb .Width ;_cegc ++{if _dcf :=_cfb .GetPixel (_cegc ,_ef );_dcf {_babe =_gdc *_cegc ;for _bef =0;_bef < _gdc ;_bef ++{_dg .setBit (_gaa *8+_babe +_bef );};};};for _bef =1;_bef < _gce ;_bef ++{_aefa :=_gaa +_bef *_dbf ;for _egg :=0;_egg < _dbf ;
|
|
_egg ++{if _ffd ,_aef =_dg .GetByte (_gaa +_egg );_aef !=nil {return nil ,_c .Wrapf (_aef ,_baa ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_bef );};if _aef =_dg .SetByte (_aefa +_egg ,_ffd );
|
|
_aef !=nil {return nil ,_c .Wrap (_aef ,_baa ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _dg ,nil ;};func (_gbee *ClassedPoints )Len ()int {return _gbee .IntSlice .Size ()};
|
|
type Getter interface{GetBitmap ()*Bitmap ;};func (_gabc *Points )Add (pt *Points )error {const _dbef ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _gabc ==nil {return _c .Error (_dbef ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if pt ==nil {return _c .Error (_dbef ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_gabc =append (*_gabc ,*pt ...);return nil ;};func (_bbad *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_agcd *Boxes ,_ccb error ){const _begf ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
|
|
if _bbad ==nil {return nil ,_c .Error (_begf ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_bbad )==0{return _bbad ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_begf ,"\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 (_begf ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
|
|
};_dddc :=_bbad .makeSizeIndicator (width ,height ,tp ,relation );_cfgcb ,_ccb :=_bbad .selectWithIndicator (_dddc );if _ccb !=nil {return nil ,_c .Wrap (_ccb ,_begf ,"");};return _cfgcb ,nil ;};func (_cedef *byWidth )Less (i ,j int )bool {return _cedef .Values [i ].Width < _cedef .Values [j ].Width };
|
|
func (_ceag *Bitmap )setEightBytes (_dfba int ,_afg uint64 )error {_afbg :=_ceag .RowStride -(_dfba %_ceag .RowStride );if _ceag .RowStride !=_ceag .Width >>3{_afbg --;};if _afbg >=8{return _ceag .setEightFullBytes (_dfba ,_afg );};return _ceag .setEightPartlyBytes (_dfba ,_afbg ,_afg );
|
|
};func TstASymbol (t *_eb .T )*Bitmap {t .Helper ();_gbad :=New (6,6);_e .NoError (t ,_gbad .SetPixel (1,0,1));_e .NoError (t ,_gbad .SetPixel (2,0,1));_e .NoError (t ,_gbad .SetPixel (3,0,1));_e .NoError (t ,_gbad .SetPixel (4,0,1));_e .NoError (t ,_gbad .SetPixel (5,1,1));
|
|
_e .NoError (t ,_gbad .SetPixel (1,2,1));_e .NoError (t ,_gbad .SetPixel (2,2,1));_e .NoError (t ,_gbad .SetPixel (3,2,1));_e .NoError (t ,_gbad .SetPixel (4,2,1));_e .NoError (t ,_gbad .SetPixel (5,2,1));_e .NoError (t ,_gbad .SetPixel (0,3,1));_e .NoError (t ,_gbad .SetPixel (5,3,1));
|
|
_e .NoError (t ,_gbad .SetPixel (0,4,1));_e .NoError (t ,_gbad .SetPixel (5,4,1));_e .NoError (t ,_gbad .SetPixel (1,5,1));_e .NoError (t ,_gbad .SetPixel (2,5,1));_e .NoError (t ,_gbad .SetPixel (3,5,1));_e .NoError (t ,_gbad .SetPixel (4,5,1));_e .NoError (t ,_gbad .SetPixel (5,5,1));
|
|
return _gbad ;};var (_aceg =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_geea =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_dcdcc *BitmapsArray )AddBox (box *_cd .Rectangle ){_dcdcc .Boxes =append (_dcdcc .Boxes ,box )};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _fcgde (oldByte ,newByte ,op );
|
|
};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func _gbgcf (_edc *Bitmap ,_febc ,_cgfga ,_gfce ,_abbb int ,_cffg RasterOperator ,_bgfa *Bitmap ,_dgec ,_dcffe int )error {var (_ffe byte ;
|
|
_cfd int ;_ecadda int ;_bedb ,_bbcd int ;_cfdg ,_ddcd int ;);_ggede :=_gfce >>3;_aafc :=_gfce &7;if _aafc > 0{_ffe =_aceg [_aafc ];};_cfd =_bgfa .RowStride *_dcffe +(_dgec >>3);_ecadda =_edc .RowStride *_cgfga +(_febc >>3);switch _cffg {case PixSrc :for _cfdg =0;
|
|
_cfdg < _abbb ;_cfdg ++{_bedb =_cfd +_cfdg *_bgfa .RowStride ;_bbcd =_ecadda +_cfdg *_edc .RowStride ;for _ddcd =0;_ddcd < _ggede ;_ddcd ++{_edc .Data [_bbcd ]=_bgfa .Data [_bedb ];_bbcd ++;_bedb ++;};if _aafc > 0{_edc .Data [_bbcd ]=_cadg (_edc .Data [_bbcd ],_bgfa .Data [_bedb ],_ffe );
|
|
};};case PixNotSrc :for _cfdg =0;_cfdg < _abbb ;_cfdg ++{_bedb =_cfd +_cfdg *_bgfa .RowStride ;_bbcd =_ecadda +_cfdg *_edc .RowStride ;for _ddcd =0;_ddcd < _ggede ;_ddcd ++{_edc .Data [_bbcd ]=^(_bgfa .Data [_bedb ]);_bbcd ++;_bedb ++;};if _aafc > 0{_edc .Data [_bbcd ]=_cadg (_edc .Data [_bbcd ],^_bgfa .Data [_bedb ],_ffe );
|
|
};};case PixSrcOrDst :for _cfdg =0;_cfdg < _abbb ;_cfdg ++{_bedb =_cfd +_cfdg *_bgfa .RowStride ;_bbcd =_ecadda +_cfdg *_edc .RowStride ;for _ddcd =0;_ddcd < _ggede ;_ddcd ++{_edc .Data [_bbcd ]|=_bgfa .Data [_bedb ];_bbcd ++;_bedb ++;};if _aafc > 0{_edc .Data [_bbcd ]=_cadg (_edc .Data [_bbcd ],_bgfa .Data [_bedb ]|_edc .Data [_bbcd ],_ffe );
|
|
};};case PixSrcAndDst :for _cfdg =0;_cfdg < _abbb ;_cfdg ++{_bedb =_cfd +_cfdg *_bgfa .RowStride ;_bbcd =_ecadda +_cfdg *_edc .RowStride ;for _ddcd =0;_ddcd < _ggede ;_ddcd ++{_edc .Data [_bbcd ]&=_bgfa .Data [_bedb ];_bbcd ++;_bedb ++;};if _aafc > 0{_edc .Data [_bbcd ]=_cadg (_edc .Data [_bbcd ],_bgfa .Data [_bedb ]&_edc .Data [_bbcd ],_ffe );
|
|
};};case PixSrcXorDst :for _cfdg =0;_cfdg < _abbb ;_cfdg ++{_bedb =_cfd +_cfdg *_bgfa .RowStride ;_bbcd =_ecadda +_cfdg *_edc .RowStride ;for _ddcd =0;_ddcd < _ggede ;_ddcd ++{_edc .Data [_bbcd ]^=_bgfa .Data [_bedb ];_bbcd ++;_bedb ++;};if _aafc > 0{_edc .Data [_bbcd ]=_cadg (_edc .Data [_bbcd ],_bgfa .Data [_bedb ]^_edc .Data [_bbcd ],_ffe );
|
|
};};case PixNotSrcOrDst :for _cfdg =0;_cfdg < _abbb ;_cfdg ++{_bedb =_cfd +_cfdg *_bgfa .RowStride ;_bbcd =_ecadda +_cfdg *_edc .RowStride ;for _ddcd =0;_ddcd < _ggede ;_ddcd ++{_edc .Data [_bbcd ]|=^(_bgfa .Data [_bedb ]);_bbcd ++;_bedb ++;};if _aafc > 0{_edc .Data [_bbcd ]=_cadg (_edc .Data [_bbcd ],^(_bgfa .Data [_bedb ])|_edc .Data [_bbcd ],_ffe );
|
|
};};case PixNotSrcAndDst :for _cfdg =0;_cfdg < _abbb ;_cfdg ++{_bedb =_cfd +_cfdg *_bgfa .RowStride ;_bbcd =_ecadda +_cfdg *_edc .RowStride ;for _ddcd =0;_ddcd < _ggede ;_ddcd ++{_edc .Data [_bbcd ]&=^(_bgfa .Data [_bedb ]);_bbcd ++;_bedb ++;};if _aafc > 0{_edc .Data [_bbcd ]=_cadg (_edc .Data [_bbcd ],^(_bgfa .Data [_bedb ])&_edc .Data [_bbcd ],_ffe );
|
|
};};case PixSrcOrNotDst :for _cfdg =0;_cfdg < _abbb ;_cfdg ++{_bedb =_cfd +_cfdg *_bgfa .RowStride ;_bbcd =_ecadda +_cfdg *_edc .RowStride ;for _ddcd =0;_ddcd < _ggede ;_ddcd ++{_edc .Data [_bbcd ]=_bgfa .Data [_bedb ]|^(_edc .Data [_bbcd ]);_bbcd ++;_bedb ++;
|
|
};if _aafc > 0{_edc .Data [_bbcd ]=_cadg (_edc .Data [_bbcd ],_bgfa .Data [_bedb ]|^(_edc .Data [_bbcd ]),_ffe );};};case PixSrcAndNotDst :for _cfdg =0;_cfdg < _abbb ;_cfdg ++{_bedb =_cfd +_cfdg *_bgfa .RowStride ;_bbcd =_ecadda +_cfdg *_edc .RowStride ;
|
|
for _ddcd =0;_ddcd < _ggede ;_ddcd ++{_edc .Data [_bbcd ]=_bgfa .Data [_bedb ]&^(_edc .Data [_bbcd ]);_bbcd ++;_bedb ++;};if _aafc > 0{_edc .Data [_bbcd ]=_cadg (_edc .Data [_bbcd ],_bgfa .Data [_bedb ]&^(_edc .Data [_bbcd ]),_ffe );};};case PixNotPixSrcOrDst :for _cfdg =0;
|
|
_cfdg < _abbb ;_cfdg ++{_bedb =_cfd +_cfdg *_bgfa .RowStride ;_bbcd =_ecadda +_cfdg *_edc .RowStride ;for _ddcd =0;_ddcd < _ggede ;_ddcd ++{_edc .Data [_bbcd ]=^(_bgfa .Data [_bedb ]|_edc .Data [_bbcd ]);_bbcd ++;_bedb ++;};if _aafc > 0{_edc .Data [_bbcd ]=_cadg (_edc .Data [_bbcd ],^(_bgfa .Data [_bedb ]|_edc .Data [_bbcd ]),_ffe );
|
|
};};case PixNotPixSrcAndDst :for _cfdg =0;_cfdg < _abbb ;_cfdg ++{_bedb =_cfd +_cfdg *_bgfa .RowStride ;_bbcd =_ecadda +_cfdg *_edc .RowStride ;for _ddcd =0;_ddcd < _ggede ;_ddcd ++{_edc .Data [_bbcd ]=^(_bgfa .Data [_bedb ]&_edc .Data [_bbcd ]);_bbcd ++;
|
|
_bedb ++;};if _aafc > 0{_edc .Data [_bbcd ]=_cadg (_edc .Data [_bbcd ],^(_bgfa .Data [_bedb ]&_edc .Data [_bbcd ]),_ffe );};};case PixNotPixSrcXorDst :for _cfdg =0;_cfdg < _abbb ;_cfdg ++{_bedb =_cfd +_cfdg *_bgfa .RowStride ;_bbcd =_ecadda +_cfdg *_edc .RowStride ;
|
|
for _ddcd =0;_ddcd < _ggede ;_ddcd ++{_edc .Data [_bbcd ]=^(_bgfa .Data [_bedb ]^_edc .Data [_bbcd ]);_bbcd ++;_bedb ++;};if _aafc > 0{_edc .Data [_bbcd ]=_cadg (_edc .Data [_bbcd ],^(_bgfa .Data [_bedb ]^_edc .Data [_bbcd ]),_ffe );};};default:_fe .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",_cffg );
|
|
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 RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _befa (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _dac (_cg ,_be *Bitmap )(_cb error ){const _ga ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";
|
|
_ced :=_be .RowStride ;_fgf :=_cg .RowStride ;var _ae ,_cca ,_ab ,_bb ,_gd int ;for _ab =0;_ab < _be .Height ;_ab ++{_ae =_ab *_ced ;_cca =8*_ab *_fgf ;for _bb =0;_bb < _ced ;_bb ++{if _cb =_cg .setEightBytes (_cca +_bb *8,_gaabg [_be .Data [_ae +_bb ]]);
|
|
_cb !=nil {return _c .Wrap (_cb ,_ga ,"");};};for _gd =1;_gd < 8;_gd ++{for _bb =0;_bb < _fgf ;_bb ++{if _cb =_cg .SetByte (_cca +_gd *_fgf +_bb ,_cg .Data [_cca +_bb ]);_cb !=nil {return _c .Wrap (_cb ,_ga ,"");};};};};return nil ;};func TstPSymbol (t *_eb .T )*Bitmap {t .Helper ();
|
|
_bceb :=New (5,8);_e .NoError (t ,_bceb .SetPixel (0,0,1));_e .NoError (t ,_bceb .SetPixel (1,0,1));_e .NoError (t ,_bceb .SetPixel (2,0,1));_e .NoError (t ,_bceb .SetPixel (3,0,1));_e .NoError (t ,_bceb .SetPixel (4,1,1));_e .NoError (t ,_bceb .SetPixel (0,1,1));
|
|
_e .NoError (t ,_bceb .SetPixel (4,2,1));_e .NoError (t ,_bceb .SetPixel (0,2,1));_e .NoError (t ,_bceb .SetPixel (4,3,1));_e .NoError (t ,_bceb .SetPixel (0,3,1));_e .NoError (t ,_bceb .SetPixel (0,4,1));_e .NoError (t ,_bceb .SetPixel (1,4,1));_e .NoError (t ,_bceb .SetPixel (2,4,1));
|
|
_e .NoError (t ,_bceb .SetPixel (3,4,1));_e .NoError (t ,_bceb .SetPixel (0,5,1));_e .NoError (t ,_bceb .SetPixel (0,6,1));_e .NoError (t ,_bceb .SetPixel (0,7,1));return _bceb ;};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;
|
|
CmbOpReplace ;CmbOpNot ;);func _baag (_faee ,_dfdf *Bitmap ,_cbde ,_caee int )(_dggc error ){const _ecae ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_befda ,_cffgg ,_efea ,_fbdc int ;_cbdc ,_gbff ,_fbde ,_fafgf ,_aagf ,_ffeg ,_fgcg byte ;
|
|
);for _befda =0;_befda < _cbde ;_befda ++{_efea =_befda *_faee .RowStride ;_fbdc =_befda *_dfdf .RowStride ;for _cffgg =0;_cffgg < _caee ;_cffgg ++{_cbdc ,_dggc =_faee .GetByte (_efea +_cffgg );if _dggc !=nil {return _c .Wrap (_dggc ,_ecae ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");
|
|
};_gbff ,_dggc =_dfdf .GetByte (_fbdc +_cffgg );if _dggc !=nil {return _c .Wrap (_dggc ,_ecae ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _befda > 0{_fbde ,_dggc =_faee .GetByte (_efea -_faee .RowStride +_cffgg );if _dggc !=nil {return _c .Wrap (_dggc ,_ecae ,"\u0069\u0020\u003e \u0030");
|
|
};_cbdc |=_fbde ;};if _cffgg > 0{_fafgf ,_dggc =_faee .GetByte (_efea +_cffgg -1);if _dggc !=nil {return _c .Wrap (_dggc ,_ecae ,"\u006a\u0020\u003e \u0030");};_cbdc |=_fafgf <<7;};_cbdc &=_gbff ;if _cbdc ==0||(^_cbdc )==0{if _dggc =_faee .SetByte (_efea +_cffgg ,_cbdc );
|
|
_dggc !=nil {return _c .Wrap (_dggc ,_ecae ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_fgcg =_cbdc ;_cbdc =(_cbdc |(_cbdc >>1)|(_cbdc <<1))&_gbff ;if (_cbdc ^_fgcg )==0{if _dggc =_faee .SetByte (_efea +_cffgg ,_cbdc );
|
|
_dggc !=nil {return _c .Wrap (_dggc ,_ecae ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _befda =_cbde -1;_befda >=0;_befda --{_efea =_befda *_faee .RowStride ;_fbdc =_befda *_dfdf .RowStride ;
|
|
for _cffgg =_caee -1;_cffgg >=0;_cffgg --{if _cbdc ,_dggc =_faee .GetByte (_efea +_cffgg );_dggc !=nil {return _c .Wrap (_dggc ,_ecae ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _gbff ,_dggc =_dfdf .GetByte (_fbdc +_cffgg );
|
|
_dggc !=nil {return _c .Wrap (_dggc ,_ecae ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _befda < _cbde -1{if _aagf ,_dggc =_faee .GetByte (_efea +_faee .RowStride +_cffgg );_dggc !=nil {return _c .Wrap (_dggc ,_ecae ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");
|
|
};_cbdc |=_aagf ;};if _cffgg < _caee -1{if _ffeg ,_dggc =_faee .GetByte (_efea +_cffgg +1);_dggc !=nil {return _c .Wrap (_dggc ,_ecae ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_cbdc |=_ffeg >>7;
|
|
};_cbdc &=_gbff ;if _cbdc ==0||(^_cbdc )==0{if _dggc =_faee .SetByte (_efea +_cffgg ,_cbdc );_dggc !=nil {return _c .Wrap (_dggc ,_ecae ,"\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 {_fgcg =_cbdc ;_cbdc =(_cbdc |(_cbdc >>1)|(_cbdc <<1))&_gbff ;if (_cbdc ^_fgcg )==0{if _dggc =_faee .SetByte (_efea +_cffgg ,_cbdc );_dggc !=nil {return _c .Wrap (_dggc ,_ecae ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
|
|
};break ;};};};};return nil ;};func _de (_fa *Bitmap ,_cfe int )(*Bitmap ,error ){const _fbg ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _fa ==nil {return nil ,_c .Error (_fbg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _cfe ==1{return _edfg (nil ,_fa );};if _cfe !=2&&_cfe !=4&&_cfe !=8{return nil ,_c .Error (_fbg ,"\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");
|
|
};_fc :=_cfe *_fa .Width ;_deg :=_cfe *_fa .Height ;_ag :=New (_fc ,_deg );var _ace error ;switch _cfe {case 2:_ace =_dc (_ag ,_fa );case 4:_ace =_fd (_ag ,_fa );case 8:_ace =_dac (_ag ,_fa );};if _ace !=nil {return nil ,_c .Wrap (_ace ,_fbg ,"");};return _ag ,nil ;
|
|
};func (_fcga *ClassedPoints )ySortFunction ()func (_dadbg int ,_bdfbf int )bool {return func (_bbcag ,_cdgc int )bool {return _fcga .YAtIndex (_bbcag )< _fcga .YAtIndex (_cdgc )};};type fillSegment struct{_daaea int ;_bdeg int ;_edde int ;_egafg int ;
|
|
};func _deab (_ecfbe *Bitmap ,_dggd *_cc .Stack ,_gfea ,_deaa int )(_dfee *_cd .Rectangle ,_edcg error ){const _dceea ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _ecfbe ==nil {return nil ,_c .Error (_dceea ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
|
|
};if _dggd ==nil {return nil ,_c .Error (_dceea ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_cafge ,_eefa :=_ecfbe .Width ,_ecfbe .Height ;_adab :=_cafge -1;_cebf :=_eefa -1;if _gfea < 0||_gfea > _adab ||_deaa < 0||_deaa > _cebf ||!_ecfbe .GetPixel (_gfea ,_deaa ){return nil ,nil ;
|
|
};_egbg :=_cd .Rect (100000,100000,0,0);if _edcg =_bag (_dggd ,_gfea ,_gfea ,_deaa ,1,_cebf ,&_egbg );_edcg !=nil {return nil ,_c .Wrap (_edcg ,_dceea ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _edcg =_bag (_dggd ,_gfea ,_gfea ,_deaa +1,-1,_cebf ,&_egbg );
|
|
_edcg !=nil {return nil ,_c .Wrap (_edcg ,_dceea ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_egbg .Min .X ,_egbg .Max .X =_gfea ,_gfea ;_egbg .Min .Y ,_egbg .Max .Y =_deaa ,_deaa ;var (_gbdeg *fillSegment ;
|
|
_agcaa int ;);for _dggd .Len ()> 0{if _gbdeg ,_edcg =_fffe (_dggd );_edcg !=nil {return nil ,_c .Wrap (_edcg ,_dceea ,"");};_deaa =_gbdeg ._edde ;for _gfea =_gbdeg ._daaea -1;_gfea >=0&&_ecfbe .GetPixel (_gfea ,_deaa );_gfea --{if _edcg =_ecfbe .SetPixel (_gfea ,_deaa ,0);
|
|
_edcg !=nil {return nil ,_c .Wrap (_edcg ,_dceea ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _gfea >=_gbdeg ._daaea -1{for {for _gfea ++;_gfea <=_gbdeg ._bdeg +1&&_gfea <=_adab &&!_ecfbe .GetPixel (_gfea ,_deaa );_gfea ++{};_agcaa =_gfea ;if !(_gfea <=_gbdeg ._bdeg +1&&_gfea <=_adab ){break ;
|
|
};for ;_gfea <=_adab &&_ecfbe .GetPixel (_gfea ,_deaa );_gfea ++{if _edcg =_ecfbe .SetPixel (_gfea ,_deaa ,0);_edcg !=nil {return nil ,_c .Wrap (_edcg ,_dceea ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _edcg =_bag (_dggd ,_agcaa ,_gfea -1,_gbdeg ._edde ,_gbdeg ._egafg ,_cebf ,&_egbg );
|
|
_edcg !=nil {return nil ,_c .Wrap (_edcg ,_dceea ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gfea > _gbdeg ._bdeg {if _edcg =_bag (_dggd ,_gbdeg ._bdeg +1,_gfea -1,_gbdeg ._edde ,-_gbdeg ._egafg ,_cebf ,&_egbg );_edcg !=nil {return nil ,_c .Wrap (_edcg ,_dceea ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};};continue ;};_agcaa =_gfea +1;if _agcaa < _gbdeg ._daaea {if _edcg =_bag (_dggd ,_agcaa ,_gbdeg ._daaea -1,_gbdeg ._edde ,-_gbdeg ._egafg ,_cebf ,&_egbg );_edcg !=nil {return nil ,_c .Wrap (_edcg ,_dceea ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
|
|
};};_gfea =_gbdeg ._daaea ;for {for ;_gfea <=_adab &&_ecfbe .GetPixel (_gfea ,_deaa );_gfea ++{if _edcg =_ecfbe .SetPixel (_gfea ,_deaa ,0);_edcg !=nil {return nil ,_c .Wrap (_edcg ,_dceea ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _edcg =_bag (_dggd ,_agcaa ,_gfea -1,_gbdeg ._edde ,_gbdeg ._egafg ,_cebf ,&_egbg );
|
|
_edcg !=nil {return nil ,_c .Wrap (_edcg ,_dceea ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gfea > _gbdeg ._bdeg {if _edcg =_bag (_dggd ,_gbdeg ._bdeg +1,_gfea -1,_gbdeg ._edde ,-_gbdeg ._egafg ,_cebf ,&_egbg );_edcg !=nil {return nil ,_c .Wrap (_edcg ,_dceea ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
|
|
};};for _gfea ++;_gfea <=_gbdeg ._bdeg +1&&_gfea <=_adab &&!_ecfbe .GetPixel (_gfea ,_deaa );_gfea ++{};_agcaa =_gfea ;if !(_gfea <=_gbdeg ._bdeg +1&&_gfea <=_adab ){break ;};};};_egbg .Max .X ++;_egbg .Max .Y ++;return &_egbg ,nil ;};func _edfg (_ecef ,_aafd *Bitmap )(*Bitmap ,error ){if _aafd ==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 _aafd ==_ecef {return _ecef ,nil ;};if _ecef ==nil {_ecef =_aafd .createTemplate ();copy (_ecef .Data ,_aafd .Data );return _ecef ,nil ;};_gefb :=_ecef .resizeImageData (_aafd );if _gefb !=nil {return nil ,_c .Wrap (_gefb ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
|
|
};_ecef .Text =_aafd .Text ;copy (_ecef .Data ,_aafd .Data );return _ecef ,nil ;};func _aed (_cfed ,_fdae *Bitmap ,_eeec CombinationOperator )*Bitmap {_dcac :=New (_cfed .Width ,_cfed .Height );for _gbe :=0;_gbe < len (_dcac .Data );_gbe ++{_dcac .Data [_gbe ]=_fcgde (_cfed .Data [_gbe ],_fdae .Data [_gbe ],_eeec );
|
|
};return _dcac ;};func (_daec *Bitmap )Copy ()*Bitmap {_gcb :=make ([]byte ,len (_daec .Data ));copy (_gcb ,_daec .Data );return &Bitmap {Width :_daec .Width ,Height :_daec .Height ,RowStride :_daec .RowStride ,Data :_gcb ,Color :_daec .Color ,Text :_daec .Text ,BitmapNumber :_daec .BitmapNumber ,Special :_daec .Special };
|
|
};func (_gbed *ClassedPoints )Swap (i ,j int ){_gbed .IntSlice [i ],_gbed .IntSlice [j ]=_gbed .IntSlice [j ],_gbed .IntSlice [i ];};func _ddgb (_dfga *Bitmap ,_becfa ...MorphProcess )(_dade *Bitmap ,_cee error ){const _cadac ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";
|
|
if _dfga ==nil {return nil ,_c .Error (_cadac ,"\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 (_becfa )==0{return nil ,_c .Error (_cadac ,"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 _cee =_bda (_becfa ...);
|
|
_cee !=nil {return nil ,_c .Wrap (_cee ,_cadac ,"");};var _ggec ,_cgge ,_bfga int ;_dade =_dfga .Copy ();for _ ,_fdbga :=range _becfa {switch _fdbga .Operation {case MopDilation :_ggec ,_cgge =_fdbga .getWidthHeight ();_dade ,_cee =DilateBrick (nil ,_dade ,_ggec ,_cgge );
|
|
if _cee !=nil {return nil ,_c .Wrap (_cee ,_cadac ,"");};case MopErosion :_ggec ,_cgge =_fdbga .getWidthHeight ();_dade ,_cee =_fbeg (nil ,_dade ,_ggec ,_cgge );if _cee !=nil {return nil ,_c .Wrap (_cee ,_cadac ,"");};case MopOpening :_ggec ,_cgge =_fdbga .getWidthHeight ();
|
|
_dade ,_cee =_bbgc (nil ,_dade ,_ggec ,_cgge );if _cee !=nil {return nil ,_c .Wrap (_cee ,_cadac ,"");};case MopClosing :_ggec ,_cgge =_fdbga .getWidthHeight ();_dade ,_cee =_deag (nil ,_dade ,_ggec ,_cgge );if _cee !=nil {return nil ,_c .Wrap (_cee ,_cadac ,"");
|
|
};case MopRankBinaryReduction :_dade ,_cee =_gdg (_dade ,_fdbga .Arguments ...);if _cee !=nil {return nil ,_c .Wrap (_cee ,_cadac ,"");};case MopReplicativeBinaryExpansion :_dade ,_cee =_gcefa (_dade ,_fdbga .Arguments [0]);if _cee !=nil {return nil ,_c .Wrap (_cee ,_cadac ,"");
|
|
};case MopAddBorder :_bfga =_fdbga .Arguments [0];_dade ,_cee =_dade .AddBorder (_bfga ,0);if _cee !=nil {return nil ,_c .Wrap (_cee ,_cadac ,"");};default:return nil ,_c .Error (_cadac ,"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 _bfga > 0{_dade ,_cee =_dade .RemoveBorder (_bfga );if _cee !=nil {return nil ,_c .Wrap (_cee ,_cadac ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _dade ,nil ;};func (_fceae *ClassedPoints )SortByX (){_fceae ._gbbd =_fceae .xSortFunction ();
|
|
_f .Sort (_fceae )};func (_egbae *ClassedPoints )Less (i ,j int )bool {return _egbae ._gbbd (i ,j )};func TstNSymbol (t *_eb .T ,scale ...int )*Bitmap {_gfca ,_cfgab :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_e .NoError (t ,_cfgab );return TstGetScaledSymbol (t ,_gfca ,scale ...);
|
|
};func (_dag *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _fead ="\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 >=_dag .IntSlice .Size (){return 0,_c .Errorf (_fead ,"\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 (_dag .YAtIndex (i )),nil ;};func _agfa ()[]int {_beae :=make ([]int ,256);_beae [0]=0;_beae [1]=7;var _adeb int ;for _adeb =2;_adeb < 4;_adeb ++{_beae [_adeb ]=_beae [_adeb -2]+6;};for _adeb =4;_adeb < 8;_adeb ++{_beae [_adeb ]=_beae [_adeb -4]+5;
|
|
};for _adeb =8;_adeb < 16;_adeb ++{_beae [_adeb ]=_beae [_adeb -8]+4;};for _adeb =16;_adeb < 32;_adeb ++{_beae [_adeb ]=_beae [_adeb -16]+3;};for _adeb =32;_adeb < 64;_adeb ++{_beae [_adeb ]=_beae [_adeb -32]+2;};for _adeb =64;_adeb < 128;_adeb ++{_beae [_adeb ]=_beae [_adeb -64]+1;
|
|
};for _adeb =128;_adeb < 256;_adeb ++{_beae [_adeb ]=_beae [_adeb -128];};return _beae ;};func (_gebf *Bitmap )connComponentsBB (_fgag int )(_bede *Boxes ,_afc error ){const _aec ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";
|
|
if _fgag !=4&&_fgag !=8{return nil ,_c .Error (_aec ,"\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 _gebf .Zero (){return &Boxes {},nil ;
|
|
};_gebf .setPadBits (0);_acfc ,_afc :=_edfg (nil ,_gebf );if _afc !=nil {return nil ,_c .Wrap (_afc ,_aec ,"\u0062\u006d\u0031");};_adg :=&_cc .Stack {};_adg .Aux =&_cc .Stack {};_bede =&Boxes {};var (_eccf ,_bbbf int ;_bedc _cd .Point ;_gcce bool ;_fdbb *_cd .Rectangle ;
|
|
);for {if _bedc ,_gcce ,_afc =_acfc .nextOnPixel (_bbbf ,_eccf );_afc !=nil {return nil ,_c .Wrap (_afc ,_aec ,"");};if !_gcce {break ;};if _fdbb ,_afc =_cadc (_acfc ,_adg ,_bedc .X ,_bedc .Y ,_fgag );_afc !=nil {return nil ,_c .Wrap (_afc ,_aec ,"");};
|
|
if _afc =_bede .Add (_fdbb );_afc !=nil {return nil ,_c .Wrap (_afc ,_aec ,"");};_bbbf =_bedc .X ;_eccf =_bedc .Y ;};return _bede ,nil ;};func (_gbce *Bitmaps )makeSizeIndicator (_febf ,_fdcb int ,_cebg LocationFilter ,_afae SizeComparison )(_cdeb *_cc .NumSlice ,_ggfd error ){const _ddga ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _gbce ==nil {return nil ,_c .Error (_ddga ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _cebg {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_ddga ,"\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",_cebg );
|
|
};switch _afae {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_c .Errorf (_ddga ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_afae );
|
|
};_cdeb =&_cc .NumSlice {};var (_acgag ,_faaab ,_fgbga int ;_egbac *Bitmap ;);for _ ,_egbac =range _gbce .Values {_acgag =0;_faaab ,_fgbga =_egbac .Width ,_egbac .Height ;switch _cebg {case LocSelectWidth :if (_afae ==SizeSelectIfLT &&_faaab < _febf )||(_afae ==SizeSelectIfGT &&_faaab > _febf )||(_afae ==SizeSelectIfLTE &&_faaab <=_febf )||(_afae ==SizeSelectIfGTE &&_faaab >=_febf )||(_afae ==SizeSelectIfEQ &&_faaab ==_febf ){_acgag =1;
|
|
};case LocSelectHeight :if (_afae ==SizeSelectIfLT &&_fgbga < _fdcb )||(_afae ==SizeSelectIfGT &&_fgbga > _fdcb )||(_afae ==SizeSelectIfLTE &&_fgbga <=_fdcb )||(_afae ==SizeSelectIfGTE &&_fgbga >=_fdcb )||(_afae ==SizeSelectIfEQ &&_fgbga ==_fdcb ){_acgag =1;
|
|
};case LocSelectIfEither :if (_afae ==SizeSelectIfLT &&(_faaab < _febf ||_fgbga < _fdcb ))||(_afae ==SizeSelectIfGT &&(_faaab > _febf ||_fgbga > _fdcb ))||(_afae ==SizeSelectIfLTE &&(_faaab <=_febf ||_fgbga <=_fdcb ))||(_afae ==SizeSelectIfGTE &&(_faaab >=_febf ||_fgbga >=_fdcb ))||(_afae ==SizeSelectIfEQ &&(_faaab ==_febf ||_fgbga ==_fdcb )){_acgag =1;
|
|
};case LocSelectIfBoth :if (_afae ==SizeSelectIfLT &&(_faaab < _febf &&_fgbga < _fdcb ))||(_afae ==SizeSelectIfGT &&(_faaab > _febf &&_fgbga > _fdcb ))||(_afae ==SizeSelectIfLTE &&(_faaab <=_febf &&_fgbga <=_fdcb ))||(_afae ==SizeSelectIfGTE &&(_faaab >=_febf &&_fgbga >=_fdcb ))||(_afae ==SizeSelectIfEQ &&(_faaab ==_febf &&_fgbga ==_fdcb )){_acgag =1;
|
|
};};_cdeb .AddInt (_acgag );};return _cdeb ,nil ;};func (_acea *Bitmap )String ()string {var _dgef ="\u000a";for _gced :=0;_gced < _acea .Height ;_gced ++{var _gfg string ;for _ebg :=0;_ebg < _acea .Width ;_ebg ++{_eda :=_acea .GetPixel (_ebg ,_gced );
|
|
if _eda {_gfg +="\u0031";}else {_gfg +="\u0030";};};_dgef +=_gfg +"\u000a";};return _dgef ;};func (_gfd *Bitmap )nextOnPixelLow (_gegb ,_bbg ,_agge ,_dfd ,_bddd int )(_dgaf _cd .Point ,_acb bool ,_cfgc error ){const _bae ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
|
|
var (_cgcc int ;_dcbg byte ;);_efe :=_bddd *_agge ;_acga :=_efe +(_dfd /8);if _dcbg ,_cfgc =_gfd .GetByte (_acga );_cfgc !=nil {return _dgaf ,false ,_c .Wrap (_cfgc ,_bae ,"\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 _dcbg !=0{_dcbc :=_dfd -(_dfd %8)+7;for _cgcc =_dfd ;_cgcc <=_dcbc &&_cgcc < _gegb ;_cgcc ++{if _gfd .GetPixel (_cgcc ,_bddd ){_dgaf .X =_cgcc ;_dgaf .Y =_bddd ;return _dgaf ,true ,nil ;};};};_cea :=(_dfd /8)+1;_cgcc =8*_cea ;var _cgba int ;for _acga =_efe +_cea ;
|
|
_cgcc < _gegb ;_acga ,_cgcc =_acga +1,_cgcc +8{if _dcbg ,_cfgc =_gfd .GetByte (_acga );_cfgc !=nil {return _dgaf ,false ,_c .Wrap (_cfgc ,_bae ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _dcbg ==0{continue ;
|
|
};for _cgba =0;_cgba < 8&&_cgcc < _gegb ;_cgba ,_cgcc =_cgba +1,_cgcc +1{if _gfd .GetPixel (_cgcc ,_bddd ){_dgaf .X =_cgcc ;_dgaf .Y =_bddd ;return _dgaf ,true ,nil ;};};};for _gca :=_bddd +1;_gca < _bbg ;_gca ++{_efe =_gca *_agge ;for _acga ,_cgcc =_efe ,0;
|
|
_cgcc < _gegb ;_acga ,_cgcc =_acga +1,_cgcc +8{if _dcbg ,_cfgc =_gfd .GetByte (_acga );_cfgc !=nil {return _dgaf ,false ,_c .Wrap (_cfgc ,_bae ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _dcbg ==0{continue ;
|
|
};for _cgba =0;_cgba < 8&&_cgcc < _gegb ;_cgba ,_cgcc =_cgba +1,_cgcc +1{if _gfd .GetPixel (_cgcc ,_gca ){_dgaf .X =_cgcc ;_dgaf .Y =_gca ;return _dgaf ,true ,nil ;};};};};return _dgaf ,false ,nil ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _cde ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";
|
|
_ggg :=_agg (width ,height );_ggg .Data =data ;if len (data )< height *_ggg .RowStride {return nil ,_c .Errorf (_cde ,"\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 *_ggg .RowStride );
|
|
};return _ggg ,nil ;};func _gb ()(_gda [256]uint16 ){for _fcc :=0;_fcc < 256;_fcc ++{if _fcc &0x01!=0{_gda [_fcc ]|=0x3;};if _fcc &0x02!=0{_gda [_fcc ]|=0xc;};if _fcc &0x04!=0{_gda [_fcc ]|=0x30;};if _fcc &0x08!=0{_gda [_fcc ]|=0xc0;};if _fcc &0x10!=0{_gda [_fcc ]|=0x300;
|
|
};if _fcc &0x20!=0{_gda [_fcc ]|=0xc00;};if _fcc &0x40!=0{_gda [_fcc ]|=0x3000;};if _fcc &0x80!=0{_gda [_fcc ]|=0xc000;};};return _gda ;};func (_ddgea *Bitmaps )selectByIndicator (_bgfg *_cc .NumSlice )(_babc *Bitmaps ,_aaaa error ){const _dafg ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
|
|
if _ddgea ==nil {return nil ,_c .Error (_dafg ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _bgfg ==nil {return nil ,_c .Error (_dafg ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
|
|
};if len (_ddgea .Values )==0{return _ddgea ,nil ;};if len (*_bgfg )!=len (_ddgea .Values ){return nil ,_c .Errorf (_dafg ,"\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 (*_bgfg ),len (_ddgea .Values ));
|
|
};var _ebagaf ,_dgafb ,_dgaagc int ;for _dgafb =0;_dgafb < len (*_bgfg );_dgafb ++{if _ebagaf ,_aaaa =_bgfg .GetInt (_dgafb );_aaaa !=nil {return nil ,_c .Wrap (_aaaa ,_dafg ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _ebagaf ==1{_dgaagc ++;
|
|
};};if _dgaagc ==len (_ddgea .Values ){return _ddgea ,nil ;};_babc =&Bitmaps {};_agada :=len (_ddgea .Values )==len (_ddgea .Boxes );for _dgafb =0;_dgafb < len (*_bgfg );_dgafb ++{if _ebagaf =int ((*_bgfg )[_dgafb ]);_ebagaf ==0{continue ;};_babc .Values =append (_babc .Values ,_ddgea .Values [_dgafb ]);
|
|
if _agada {_babc .Boxes =append (_babc .Boxes ,_ddgea .Boxes [_dgafb ]);};};return _babc ,nil ;};var MorphBC BoundaryCondition ;func _becf (_ageg uint ,_affd byte )byte {return _affd >>_ageg <<_ageg };const _decf =5000;type Component int ;var (_begfc *Bitmap ;
|
|
_cecc *Bitmap ;);func (_geg *Bitmap )GetPixel (x ,y int )bool {_cac :=_geg .GetByteIndex (x ,y );_aaf :=_geg .GetBitOffset (x );_facc :=uint (7-_aaf );if _cac > len (_geg .Data )-1{_fe .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 ,_geg );
|
|
return false ;};if (_geg .Data [_cac ]>>_facc )&0x01>=1{return true ;};return false ;};func _afee (_bece *Bitmap ,_accf *Bitmap ,_cgecg int )(_ggcf error ){const _acdff ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";
|
|
_agad :=_dfgg (_bece .Height ,_accf .Height );_egaf :=_dfgg (_bece .RowStride ,_accf .RowStride );switch _cgecg {case 4:_ggcf =_baag (_bece ,_accf ,_agad ,_egaf );case 8:_ggcf =_ebfgd (_bece ,_accf ,_agad ,_egaf );default:return _c .Errorf (_acdff ,"\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",_cgecg );
|
|
};if _ggcf !=nil {return _c .Wrap (_ggcf ,_acdff ,"");};return nil ;};func (_baeg *Bitmaps )Size ()int {return len (_baeg .Values )};func TstDSymbol (t *_eb .T ,scale ...int )*Bitmap {_ecfebb ,_adag :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});
|
|
_e .NoError (t ,_adag );return TstGetScaledSymbol (t ,_ecfebb ,scale ...);};func _eccc (_fddg ,_fbaa int ,_cgae string )*Selection {_gfbaf :=&Selection {Height :_fddg ,Width :_fbaa ,Name :_cgae };_gfbaf .Data =make ([][]SelectionValue ,_fddg );for _dcbdg :=0;
|
|
_dcbdg < _fddg ;_dcbdg ++{_gfbaf .Data [_dcbdg ]=make ([]SelectionValue ,_fbaa );};return _gfbaf ;};func _aeccf (_aefab *Bitmap ,_ebcb ,_fgbf ,_gfef ,_ffcd int ,_baed RasterOperator ){if _ebcb < 0{_gfef +=_ebcb ;_ebcb =0;};_dcae :=_ebcb +_gfef -_aefab .Width ;
|
|
if _dcae > 0{_gfef -=_dcae ;};if _fgbf < 0{_ffcd +=_fgbf ;_fgbf =0;};_dgbd :=_fgbf +_ffcd -_aefab .Height ;if _dgbd > 0{_ffcd -=_dgbd ;};if _gfef <=0||_ffcd <=0{return ;};if (_ebcb &7)==0{_eege (_aefab ,_ebcb ,_fgbf ,_gfef ,_ffcd ,_baed );}else {_deff (_aefab ,_ebcb ,_fgbf ,_gfef ,_ffcd ,_baed );
|
|
};};func TstVSymbol (t *_eb .T ,scale ...int )*Bitmap {_eccb ,_dbfca :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_e .NoError (t ,_dbfca );return TstGetScaledSymbol (t ,_eccb ,scale ...);};func (_feda *Bitmaps )SortByHeight (){_ecga :=(*byHeight )(_feda );
|
|
_f .Sort (_ecga )};type byHeight Bitmaps ;func (_gdgab *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_ebeee *Boxes ,_gacb error ){const _adfb ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
|
|
if _gdgab ==nil {return nil ,_c .Error (_adfb ,"\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 (_adfb ,"\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 _ebeee ,_gacb =_gdgab .connComponentsBB (connectivity );_gacb !=nil {return nil ,_c .Wrap (_gacb ,_adfb ,"");};}else {if _ebeee ,_gacb =_gdgab .connComponentsBitmapsBB (bms ,connectivity );_gacb !=nil {return nil ,_c .Wrap (_gacb ,_adfb ,"");
|
|
};};return _ebeee ,nil ;};func TstWSymbol (t *_eb .T ,scale ...int )*Bitmap {_dcfge ,_adbd :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_e .NoError (t ,_adbd );return TstGetScaledSymbol (t ,_dcfge ,scale ...);};func TstESymbol (t *_eb .T ,scale ...int )*Bitmap {_afbc ,_decfa :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});
|
|
_e .NoError (t ,_decfa );return TstGetScaledSymbol (t ,_afbc ,scale ...);};func _agg (_dffe ,_cgf int )*Bitmap {return &Bitmap {Width :_dffe ,Height :_cgf ,RowStride :(_dffe +7)>>3};};func (_aefda *Bitmaps )CountPixels ()*_cc .NumSlice {_adgf :=&_cc .NumSlice {};
|
|
for _ ,_bgaf :=range _aefda .Values {_adgf .AddInt (_bgaf .CountPixels ());};return _adgf ;};func (_gbf *Bitmap )inverseData (){if _fagg :=_gbf .RasterOperation (0,0,_gbf .Width ,_gbf .Height ,PixNotDst ,nil ,0,0);_fagg !=nil {_fe .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_fagg );
|
|
};if _gbf .Color ==Chocolate {_gbf .Color =Vanilla ;}else {_gbf .Color =Chocolate ;};};func _eaa ()(_ccf []byte ){_ccf =make ([]byte ,256);for _dae :=0;_dae < 256;_dae ++{_bgb :=byte (_dae );_ccf [_bgb ]=(_bgb &0x01)|((_bgb &0x04)>>1)|((_bgb &0x10)>>2)|((_bgb &0x40)>>3)|((_bgb &0x02)<<3)|((_bgb &0x08)<<2)|((_bgb &0x20)<<1)|(_bgb &0x80);
|
|
};return _ccf ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_cbcc float64 ,_cacg error ){const _eecb ="\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 _cbcc ,_c .Error (_eecb ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _cbcc ,_c .Error (_eecb ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if area1 ==0||area2 ==0{return _cbcc ,_c .Error (_eecb ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_ebaa ,_dbff :=bm1 .Width ,bm1 .Height ;_bddde ,_cffc :=bm2 .Width ,bm2 .Height ;
|
|
if _aebg (_ebaa -_bddde )> maxDiffW {return 0,nil ;};if _aebg (_dbff -_cffc )> maxDiffH {return 0,nil ;};var _fdga ,_gfc int ;if delX >=0{_fdga =int (delX +0.5);}else {_fdga =int (delX -0.5);};if delY >=0{_gfc =int (delY +0.5);}else {_gfc =int (delY -0.5);
|
|
};_cfeda :=bm1 .createTemplate ();if _cacg =_cfeda .RasterOperation (_fdga ,_gfc ,_bddde ,_cffc ,PixSrc ,bm2 ,0,0);_cacg !=nil {return _cbcc ,_c .Wrap (_cacg ,_eecb ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};
|
|
if _cacg =_cfeda .RasterOperation (0,0,_ebaa ,_dbff ,PixSrcAndDst ,bm1 ,0,0);_cacg !=nil {return _cbcc ,_c .Wrap (_cacg ,_eecb ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_cdb :=_cfeda .countPixels ();_cbcc =float64 (_cdb )*float64 (_cdb )/(float64 (area1 )*float64 (area2 ));
|
|
return _cbcc ,nil ;};func _abd (_cffdf ,_afcg *Bitmap ,_aeag ,_dadb int )(*Bitmap ,error ){const _gbeb ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _afcg ==nil {_fe .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 (_gbeb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _aeag < 1||_dadb < 1{return nil ,_c .Error (_gbeb ,"\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 _aeag ==1&&_dadb ==1{_egfe ,_dacd :=_edfg (_cffdf ,_afcg );if _dacd !=nil {return nil ,_c .Wrap (_dacd ,_gbeb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _egfe ,nil ;};if _aeag ==1||_dadb ==1{_gdea :=SelCreateBrick (_dadb ,_aeag ,_dadb /2,_aeag /2,SelHit );_dde ,_aefb :=_cggff (_cffdf ,_afcg ,_gdea );if _aefb !=nil {return nil ,_c .Wrap (_aefb ,_gbeb ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _dde ,nil ;};_ffcc :=SelCreateBrick (1,_aeag ,0,_aeag /2,SelHit );_ebgec :=SelCreateBrick (_dadb ,1,_dadb /2,0,SelHit );_edae ,_cffdd :=_cggff (nil ,_afcg ,_ffcc );if _cffdd !=nil {return nil ,_c .Wrap (_cffdd ,_gbeb ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
|
|
};_cffdf ,_cffdd =_cggff (_cffdf ,_edae ,_ebgec );if _cffdd !=nil {return nil ,_c .Wrap (_cffdd ,_gbeb ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _cffdf ,nil ;};func (_dab *Bitmap )GetVanillaData ()[]byte {if _dab .Color ==Chocolate {_dab .inverseData ();
|
|
};return _dab .Data ;};func (_gdged *Bitmap )GetByteIndex (x ,y int )int {return y *_gdged .RowStride +(x >>3)};func (_agcg *byWidth )Swap (i ,j int ){_agcg .Values [i ],_agcg .Values [j ]=_agcg .Values [j ],_agcg .Values [i ];if _agcg .Boxes !=nil {_agcg .Boxes [i ],_agcg .Boxes [j ]=_agcg .Boxes [j ],_agcg .Boxes [i ];
|
|
};};func _ffgd (_gbdg *Bitmap ,_fbcbg ,_caaa ,_gdcf ,_befd int ,_eafc RasterOperator ,_acdf *Bitmap ,_aaag ,_beaf int )error {var (_dggb bool ;_fecdb bool ;_ggedd int ;_begfe int ;_eaeac int ;_caag bool ;_gbgd byte ;_fdfa int ;_cabdf int ;_facec int ;_beafg ,_gcegc int ;
|
|
);_cfbde :=8-(_fbcbg &7);_dgeg :=_geea [_cfbde ];_bbdb :=_gbdg .RowStride *_caaa +(_fbcbg >>3);_dacb :=_acdf .RowStride *_beaf +(_aaag >>3);if _gdcf < _cfbde {_dggb =true ;_dgeg &=_aceg [8-_cfbde +_gdcf ];};if !_dggb {_ggedd =(_gdcf -_cfbde )>>3;if _ggedd > 0{_fecdb =true ;
|
|
_begfe =_bbdb +1;_eaeac =_dacb +1;};};_fdfa =(_fbcbg +_gdcf )&7;if !(_dggb ||_fdfa ==0){_caag =true ;_gbgd =_aceg [_fdfa ];_cabdf =_bbdb +1+_ggedd ;_facec =_dacb +1+_ggedd ;};switch _eafc {case PixSrc :for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_bbdb ]=_cadg (_gbdg .Data [_bbdb ],_acdf .Data [_dacb ],_dgeg );
|
|
_bbdb +=_gbdg .RowStride ;_dacb +=_acdf .RowStride ;};if _fecdb {for _beafg =0;_beafg < _befd ;_beafg ++{for _gcegc =0;_gcegc < _ggedd ;_gcegc ++{_gbdg .Data [_begfe +_gcegc ]=_acdf .Data [_eaeac +_gcegc ];};_begfe +=_gbdg .RowStride ;_eaeac +=_acdf .RowStride ;
|
|
};};if _caag {for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_cabdf ]=_cadg (_gbdg .Data [_cabdf ],_acdf .Data [_facec ],_gbgd );_cabdf +=_gbdg .RowStride ;_facec +=_acdf .RowStride ;};};case PixNotSrc :for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_bbdb ]=_cadg (_gbdg .Data [_bbdb ],^_acdf .Data [_dacb ],_dgeg );
|
|
_bbdb +=_gbdg .RowStride ;_dacb +=_acdf .RowStride ;};if _fecdb {for _beafg =0;_beafg < _befd ;_beafg ++{for _gcegc =0;_gcegc < _ggedd ;_gcegc ++{_gbdg .Data [_begfe +_gcegc ]=^_acdf .Data [_eaeac +_gcegc ];};_begfe +=_gbdg .RowStride ;_eaeac +=_acdf .RowStride ;
|
|
};};if _caag {for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_cabdf ]=_cadg (_gbdg .Data [_cabdf ],^_acdf .Data [_facec ],_gbgd );_cabdf +=_gbdg .RowStride ;_facec +=_acdf .RowStride ;};};case PixSrcOrDst :for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_bbdb ]=_cadg (_gbdg .Data [_bbdb ],_acdf .Data [_dacb ]|_gbdg .Data [_bbdb ],_dgeg );
|
|
_bbdb +=_gbdg .RowStride ;_dacb +=_acdf .RowStride ;};if _fecdb {for _beafg =0;_beafg < _befd ;_beafg ++{for _gcegc =0;_gcegc < _ggedd ;_gcegc ++{_gbdg .Data [_begfe +_gcegc ]|=_acdf .Data [_eaeac +_gcegc ];};_begfe +=_gbdg .RowStride ;_eaeac +=_acdf .RowStride ;
|
|
};};if _caag {for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_cabdf ]=_cadg (_gbdg .Data [_cabdf ],_acdf .Data [_facec ]|_gbdg .Data [_cabdf ],_gbgd );_cabdf +=_gbdg .RowStride ;_facec +=_acdf .RowStride ;};};case PixSrcAndDst :for _beafg =0;_beafg < _befd ;
|
|
_beafg ++{_gbdg .Data [_bbdb ]=_cadg (_gbdg .Data [_bbdb ],_acdf .Data [_dacb ]&_gbdg .Data [_bbdb ],_dgeg );_bbdb +=_gbdg .RowStride ;_dacb +=_acdf .RowStride ;};if _fecdb {for _beafg =0;_beafg < _befd ;_beafg ++{for _gcegc =0;_gcegc < _ggedd ;_gcegc ++{_gbdg .Data [_begfe +_gcegc ]&=_acdf .Data [_eaeac +_gcegc ];
|
|
};_begfe +=_gbdg .RowStride ;_eaeac +=_acdf .RowStride ;};};if _caag {for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_cabdf ]=_cadg (_gbdg .Data [_cabdf ],_acdf .Data [_facec ]&_gbdg .Data [_cabdf ],_gbgd );_cabdf +=_gbdg .RowStride ;_facec +=_acdf .RowStride ;
|
|
};};case PixSrcXorDst :for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_bbdb ]=_cadg (_gbdg .Data [_bbdb ],_acdf .Data [_dacb ]^_gbdg .Data [_bbdb ],_dgeg );_bbdb +=_gbdg .RowStride ;_dacb +=_acdf .RowStride ;};if _fecdb {for _beafg =0;_beafg < _befd ;
|
|
_beafg ++{for _gcegc =0;_gcegc < _ggedd ;_gcegc ++{_gbdg .Data [_begfe +_gcegc ]^=_acdf .Data [_eaeac +_gcegc ];};_begfe +=_gbdg .RowStride ;_eaeac +=_acdf .RowStride ;};};if _caag {for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_cabdf ]=_cadg (_gbdg .Data [_cabdf ],_acdf .Data [_facec ]^_gbdg .Data [_cabdf ],_gbgd );
|
|
_cabdf +=_gbdg .RowStride ;_facec +=_acdf .RowStride ;};};case PixNotSrcOrDst :for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_bbdb ]=_cadg (_gbdg .Data [_bbdb ],^(_acdf .Data [_dacb ])|_gbdg .Data [_bbdb ],_dgeg );_bbdb +=_gbdg .RowStride ;_dacb +=_acdf .RowStride ;
|
|
};if _fecdb {for _beafg =0;_beafg < _befd ;_beafg ++{for _gcegc =0;_gcegc < _ggedd ;_gcegc ++{_gbdg .Data [_begfe +_gcegc ]|=^(_acdf .Data [_eaeac +_gcegc ]);};_begfe +=_gbdg .RowStride ;_eaeac +=_acdf .RowStride ;};};if _caag {for _beafg =0;_beafg < _befd ;
|
|
_beafg ++{_gbdg .Data [_cabdf ]=_cadg (_gbdg .Data [_cabdf ],^(_acdf .Data [_facec ])|_gbdg .Data [_cabdf ],_gbgd );_cabdf +=_gbdg .RowStride ;_facec +=_acdf .RowStride ;};};case PixNotSrcAndDst :for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_bbdb ]=_cadg (_gbdg .Data [_bbdb ],^(_acdf .Data [_dacb ])&_gbdg .Data [_bbdb ],_dgeg );
|
|
_bbdb +=_gbdg .RowStride ;_dacb +=_acdf .RowStride ;};if _fecdb {for _beafg =0;_beafg < _befd ;_beafg ++{for _gcegc =0;_gcegc < _ggedd ;_gcegc ++{_gbdg .Data [_begfe +_gcegc ]&=^_acdf .Data [_eaeac +_gcegc ];};_begfe +=_gbdg .RowStride ;_eaeac +=_acdf .RowStride ;
|
|
};};if _caag {for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_cabdf ]=_cadg (_gbdg .Data [_cabdf ],^(_acdf .Data [_facec ])&_gbdg .Data [_cabdf ],_gbgd );_cabdf +=_gbdg .RowStride ;_facec +=_acdf .RowStride ;};};case PixSrcOrNotDst :for _beafg =0;
|
|
_beafg < _befd ;_beafg ++{_gbdg .Data [_bbdb ]=_cadg (_gbdg .Data [_bbdb ],_acdf .Data [_dacb ]|^(_gbdg .Data [_bbdb ]),_dgeg );_bbdb +=_gbdg .RowStride ;_dacb +=_acdf .RowStride ;};if _fecdb {for _beafg =0;_beafg < _befd ;_beafg ++{for _gcegc =0;_gcegc < _ggedd ;
|
|
_gcegc ++{_gbdg .Data [_begfe +_gcegc ]=_acdf .Data [_eaeac +_gcegc ]|^(_gbdg .Data [_begfe +_gcegc ]);};_begfe +=_gbdg .RowStride ;_eaeac +=_acdf .RowStride ;};};if _caag {for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_cabdf ]=_cadg (_gbdg .Data [_cabdf ],_acdf .Data [_facec ]|^(_gbdg .Data [_cabdf ]),_gbgd );
|
|
_cabdf +=_gbdg .RowStride ;_facec +=_acdf .RowStride ;};};case PixSrcAndNotDst :for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_bbdb ]=_cadg (_gbdg .Data [_bbdb ],_acdf .Data [_dacb ]&^(_gbdg .Data [_bbdb ]),_dgeg );_bbdb +=_gbdg .RowStride ;_dacb +=_acdf .RowStride ;
|
|
};if _fecdb {for _beafg =0;_beafg < _befd ;_beafg ++{for _gcegc =0;_gcegc < _ggedd ;_gcegc ++{_gbdg .Data [_begfe +_gcegc ]=_acdf .Data [_eaeac +_gcegc ]&^(_gbdg .Data [_begfe +_gcegc ]);};_begfe +=_gbdg .RowStride ;_eaeac +=_acdf .RowStride ;};};if _caag {for _beafg =0;
|
|
_beafg < _befd ;_beafg ++{_gbdg .Data [_cabdf ]=_cadg (_gbdg .Data [_cabdf ],_acdf .Data [_facec ]&^(_gbdg .Data [_cabdf ]),_gbgd );_cabdf +=_gbdg .RowStride ;_facec +=_acdf .RowStride ;};};case PixNotPixSrcOrDst :for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_bbdb ]=_cadg (_gbdg .Data [_bbdb ],^(_acdf .Data [_dacb ]|_gbdg .Data [_bbdb ]),_dgeg );
|
|
_bbdb +=_gbdg .RowStride ;_dacb +=_acdf .RowStride ;};if _fecdb {for _beafg =0;_beafg < _befd ;_beafg ++{for _gcegc =0;_gcegc < _ggedd ;_gcegc ++{_gbdg .Data [_begfe +_gcegc ]=^(_acdf .Data [_eaeac +_gcegc ]|_gbdg .Data [_begfe +_gcegc ]);};_begfe +=_gbdg .RowStride ;
|
|
_eaeac +=_acdf .RowStride ;};};if _caag {for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_cabdf ]=_cadg (_gbdg .Data [_cabdf ],^(_acdf .Data [_facec ]|_gbdg .Data [_cabdf ]),_gbgd );_cabdf +=_gbdg .RowStride ;_facec +=_acdf .RowStride ;};};case PixNotPixSrcAndDst :for _beafg =0;
|
|
_beafg < _befd ;_beafg ++{_gbdg .Data [_bbdb ]=_cadg (_gbdg .Data [_bbdb ],^(_acdf .Data [_dacb ]&_gbdg .Data [_bbdb ]),_dgeg );_bbdb +=_gbdg .RowStride ;_dacb +=_acdf .RowStride ;};if _fecdb {for _beafg =0;_beafg < _befd ;_beafg ++{for _gcegc =0;_gcegc < _ggedd ;
|
|
_gcegc ++{_gbdg .Data [_begfe +_gcegc ]=^(_acdf .Data [_eaeac +_gcegc ]&_gbdg .Data [_begfe +_gcegc ]);};_begfe +=_gbdg .RowStride ;_eaeac +=_acdf .RowStride ;};};if _caag {for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_cabdf ]=_cadg (_gbdg .Data [_cabdf ],^(_acdf .Data [_facec ]&_gbdg .Data [_cabdf ]),_gbgd );
|
|
_cabdf +=_gbdg .RowStride ;_facec +=_acdf .RowStride ;};};case PixNotPixSrcXorDst :for _beafg =0;_beafg < _befd ;_beafg ++{_gbdg .Data [_bbdb ]=_cadg (_gbdg .Data [_bbdb ],^(_acdf .Data [_dacb ]^_gbdg .Data [_bbdb ]),_dgeg );_bbdb +=_gbdg .RowStride ;_dacb +=_acdf .RowStride ;
|
|
};if _fecdb {for _beafg =0;_beafg < _befd ;_beafg ++{for _gcegc =0;_gcegc < _ggedd ;_gcegc ++{_gbdg .Data [_begfe +_gcegc ]=^(_acdf .Data [_eaeac +_gcegc ]^_gbdg .Data [_begfe +_gcegc ]);};_begfe +=_gbdg .RowStride ;_eaeac +=_acdf .RowStride ;};};if _caag {for _beafg =0;
|
|
_beafg < _befd ;_beafg ++{_gbdg .Data [_cabdf ]=_cadg (_gbdg .Data [_cabdf ],^(_acdf .Data [_facec ]^_gbdg .Data [_cabdf ]),_gbgd );_cabdf +=_gbdg .RowStride ;_facec +=_acdf .RowStride ;};};default:_fe .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",_eafc );
|
|
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 (_dfbge *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_gfeb *Bitmaps ,_bcffd *Boxes ,_gaca error ){const _cbfgd ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
|
|
if _dfbge ==nil {return nil ,nil ,_c .Error (_cbfgd ,"\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 (_cbfgd ,"\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 _dfbge .Zero (){_bcffd =&Boxes {};_gfeb =&Bitmaps {};return _gfeb ,_bcffd ,nil ;};switch components {case ComponentConn :_gfeb =&Bitmaps {};if _bcffd ,_gaca =_dfbge .ConnComponents (_gfeb ,8);_gaca !=nil {return nil ,nil ,_c .Wrap (_gaca ,_cbfgd ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};case ComponentCharacters :_afac ,_fbff :=MorphSequence (_dfbge ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _fbff !=nil {return nil ,nil ,_c .Wrap (_fbff ,_cbfgd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};if _fe .Log .IsLogLevel (_fe .LogLevelTrace ){_fe .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",_afac .String ());
|
|
};_adc :=&Bitmaps {};_bcffd ,_fbff =_afac .ConnComponents (_adc ,8);if _fbff !=nil {return nil ,nil ,_c .Wrap (_fbff ,_cbfgd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
|
|
};if _fe .Log .IsLogLevel (_fe .LogLevelTrace ){_fe .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",_adc .String ());
|
|
};if _gfeb ,_fbff =_adc .ClipToBitmap (_dfbge );_fbff !=nil {return nil ,nil ,_c .Wrap (_fbff ,_cbfgd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_dcad :=1;
|
|
var _dfeg *Bitmap ;switch {case _dfbge .XResolution <=200:_dfeg =_dfbge ;case _dfbge .XResolution <=400:_dcad =2;_dfeg ,_gaca =_gdg (_dfbge ,1,0,0,0);if _gaca !=nil {return nil ,nil ,_c .Wrap (_gaca ,_cbfgd ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
|
|
};default:_dcad =4;_dfeg ,_gaca =_gdg (_dfbge ,1,1,0,0);if _gaca !=nil {return nil ,nil ,_c .Wrap (_gaca ,_cbfgd ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
|
|
};};_cbga ,_ ,_eecc :=_fefda (_dfeg );if _eecc !=nil {return nil ,nil ,_c .Wrap (_eecc ,_cbfgd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_fdeb ,_eecc :=_gcefa (_cbga ,_dcad );if _eecc !=nil {return nil ,nil ,_c .Wrap (_eecc ,_cbfgd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
|
|
};_bbga :=&Bitmaps {};if _bcffd ,_eecc =_fdeb .ConnComponents (_bbga ,4);_eecc !=nil {return nil ,nil ,_c .Wrap (_eecc ,_cbfgd ,"\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 _gfeb ,_eecc =_bbga .ClipToBitmap (_dfbge );_eecc !=nil {return nil ,nil ,_c .Wrap (_eecc ,_cbfgd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_gfeb ,_gaca =_gfeb .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
|
|
if _gaca !=nil {return nil ,nil ,_c .Wrap (_gaca ,_cbfgd ,"");};_bcffd ,_gaca =_bcffd .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _gaca !=nil {return nil ,nil ,_c .Wrap (_gaca ,_cbfgd ,"");};return _gfeb ,_bcffd ,nil ;};func TstWriteSymbols (t *_eb .T ,bms *Bitmaps ,src *Bitmap ){for _cfcgc :=0;
|
|
_cfcgc < bms .Size ();_cfcgc ++{_egadd :=bms .Values [_cfcgc ];_bdea :=bms .Boxes [_cfcgc ];_eede :=src .RasterOperation (_bdea .Min .X ,_bdea .Min .Y ,_egadd .Width ,_egadd .Height ,PixSrc ,_egadd ,0,0);_e .NoError (t ,_eede );};};func _gec (_fcf ,_daa *Bitmap ,_acf int ,_febe []byte ,_dfa int )(_cegd error ){const _gbb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";
|
|
var (_aaa ,_dgc ,_cgc ,_edg ,_dbbd ,_aee ,_agd ,_baad int ;_ega ,_ecb uint32 ;_gaaa ,_fef byte ;_ebfe uint16 ;);_dfbb :=make ([]byte ,4);_dda :=make ([]byte ,4);for _cgc =0;_cgc < _fcf .Height -1;_cgc ,_edg =_cgc +2,_edg +1{_aaa =_cgc *_fcf .RowStride ;
|
|
_dgc =_edg *_daa .RowStride ;for _dbbd ,_aee =0,0;_dbbd < _dfa ;_dbbd ,_aee =_dbbd +4,_aee +1{for _agd =0;_agd < 4;_agd ++{_baad =_aaa +_dbbd +_agd ;if _baad <=len (_fcf .Data )-1&&_baad < _aaa +_fcf .RowStride {_dfbb [_agd ]=_fcf .Data [_baad ];}else {_dfbb [_agd ]=0x00;
|
|
};_baad =_aaa +_fcf .RowStride +_dbbd +_agd ;if _baad <=len (_fcf .Data )-1&&_baad < _aaa +(2*_fcf .RowStride ){_dda [_agd ]=_fcf .Data [_baad ];}else {_dda [_agd ]=0x00;};};_ega =_g .BigEndian .Uint32 (_dfbb );_ecb =_g .BigEndian .Uint32 (_dda );_ecb |=_ega ;
|
|
_ecb |=_ecb <<1;_ecb &=0xaaaaaaaa;_ega =_ecb |(_ecb <<7);_gaaa =byte (_ega >>24);_fef =byte ((_ega >>8)&0xff);_baad =_dgc +_aee ;if _baad +1==len (_daa .Data )-1||_baad +1>=_dgc +_daa .RowStride {_daa .Data [_baad ]=_febe [_gaaa ];}else {_ebfe =(uint16 (_febe [_gaaa ])<<8)|uint16 (_febe [_fef ]);
|
|
if _cegd =_daa .setTwoBytes (_baad ,_ebfe );_cegd !=nil {return _c .Wrapf (_cegd ,_gbb ,"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",_baad );
|
|
};_aee ++;};};};return nil ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_cd .Rectangle ;};func (_ceaf *ClassedPoints )xSortFunction ()func (_fabc int ,_fbbb int )bool {return func (_fbcgg ,_bgdg int )bool {return _ceaf .XAtIndex (_fbcgg )< _ceaf .XAtIndex (_bgdg )};
|
|
};type SizeComparison int ;func _ebfgd (_debc ,_gdab *Bitmap ,_fcab ,_abbf int )(_eddcb error ){const _gbcg ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_bebb ,_efaa ,_ebfee ,_cefg int ;_bfacf ,_eeda ,_ddbf ,_fddb ,_fbda ,_bgac ,_ecdd ,_fcfc byte ;
|
|
);for _bebb =0;_bebb < _fcab ;_bebb ++{_ebfee =_bebb *_debc .RowStride ;_cefg =_bebb *_gdab .RowStride ;for _efaa =0;_efaa < _abbf ;_efaa ++{if _bfacf ,_eddcb =_debc .GetByte (_ebfee +_efaa );_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
|
|
};if _eeda ,_eddcb =_gdab .GetByte (_cefg +_efaa );_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _bebb > 0{if _ddbf ,_eddcb =_debc .GetByte (_ebfee -_debc .RowStride +_efaa );
|
|
_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_bfacf |=_ddbf |(_ddbf <<1)|(_ddbf >>1);if _efaa > 0{if _fcfc ,_eddcb =_debc .GetByte (_ebfee -_debc .RowStride +_efaa -1);_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");
|
|
};_bfacf |=_fcfc <<7;};if _efaa < _abbf -1{if _fcfc ,_eddcb =_debc .GetByte (_ebfee -_debc .RowStride +_efaa +1);_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_bfacf |=_fcfc >>7;
|
|
};};if _efaa > 0{if _fddb ,_eddcb =_debc .GetByte (_ebfee +_efaa -1);_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\u006a\u0020\u003e \u0030");};_bfacf |=_fddb <<7;};_bfacf &=_eeda ;if _bfacf ==0||^_bfacf ==0{if _eddcb =_debc .SetByte (_ebfee +_efaa ,_bfacf );
|
|
_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_ecdd =_bfacf ;_bfacf =(_bfacf |(_bfacf >>1)|(_bfacf <<1))&_eeda ;if (_bfacf ^_ecdd )==0{if _eddcb =_debc .SetByte (_ebfee +_efaa ,_bfacf );
|
|
_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _bebb =_fcab -1;_bebb >=0;_bebb --{_ebfee =_bebb *_debc .RowStride ;_cefg =_bebb *_gdab .RowStride ;
|
|
for _efaa =_abbf -1;_efaa >=0;_efaa --{if _bfacf ,_eddcb =_debc .GetByte (_ebfee +_efaa );_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
|
|
};if _eeda ,_eddcb =_gdab .GetByte (_cefg +_efaa );_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _bebb < _fcab -1{if _fbda ,_eddcb =_debc .GetByte (_ebfee +_debc .RowStride +_efaa );
|
|
_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_bfacf |=_fbda |(_fbda <<1)|_fbda >>1;if _efaa > 0{if _fcfc ,_eddcb =_debc .GetByte (_ebfee +_debc .RowStride +_efaa -1);
|
|
_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\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");};_bfacf |=_fcfc <<7;};if _efaa < _abbf -1{if _fcfc ,_eddcb =_debc .GetByte (_ebfee +_debc .RowStride +_efaa +1);
|
|
_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\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");
|
|
};_bfacf |=_fcfc >>7;};};if _efaa < _abbf -1{if _bgac ,_eddcb =_debc .GetByte (_ebfee +_efaa +1);_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\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");
|
|
};_bfacf |=_bgac >>7;};_bfacf &=_eeda ;if _bfacf ==0||(^_bfacf )==0{if _eddcb =_debc .SetByte (_ebfee +_efaa ,_bfacf );_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};
|
|
for {_ecdd =_bfacf ;_bfacf =(_bfacf |(_bfacf >>1)|(_bfacf <<1))&_eeda ;if (_bfacf ^_ecdd )==0{if _eddcb =_debc .SetByte (_ebfee +_efaa ,_bfacf );_eddcb !=nil {return _c .Wrap (_eddcb ,_gbcg ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
|
|
};break ;};};};};return nil ;};func (_bafb *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_daba *Bitmaps ,_fgff error ){const _fgg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
|
|
if _bafb ==nil {return nil ,_c .Error (_fgg ,"\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 (_fgg ,"\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 (_fgg ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
|
|
};_daaf ,_fgff :=_bafb .makeSizeIndicator (width ,height ,tp ,relation );if _fgff !=nil {return nil ,_c .Wrap (_fgff ,_fgg ,"");};_daba ,_fgff =_bafb .selectByIndicator (_daaf );if _fgff !=nil {return nil ,_c .Wrap (_fgff ,_fgg ,"");};return _daba ,nil ;
|
|
};func TstISymbol (t *_eb .T ,scale ...int )*Bitmap {_aeea ,_cdeg :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_e .NoError (t ,_cdeg );return TstGetScaledSymbol (t ,_aeea ,scale ...);};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _ebfgg ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
|
|
_cbcf ,_cebe :=p1 .Width ,p1 .Height ;_ecefc ,_gaab :=p3 .Width ,p3 .Height ;if _cc .Abs (_cbcf -_ecefc )> maxDiffW {return false ,nil ;};if _cc .Abs (_cebe -_gaab )> maxDiffH {return false ,nil ;};_geafg :=int (delX +_cc .Sign (delX )*0.5);_eafbd :=int (delY +_cc .Sign (delY )*0.5);
|
|
var _dccf error ;_aac :=p1 .CreateTemplate ();if _dccf =_aac .RasterOperation (0,0,_cbcf ,_cebe ,PixSrc ,p1 ,0,0);_dccf !=nil {return false ,_c .Wrap (_dccf ,_ebfgg ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _dccf =_aac .RasterOperation (_geafg ,_eafbd ,_cbcf ,_cebe ,PixNotSrcAndDst ,p4 ,0,0);
|
|
_dccf !=nil {return false ,_c .Wrap (_dccf ,_ebfgg ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _aac .Zero (){return false ,nil ;};if _dccf =_aac .RasterOperation (_geafg ,_eafbd ,_ecefc ,_gaab ,PixSrc ,p3 ,0,0);_dccf !=nil {return false ,_c .Wrap (_dccf ,_ebfgg ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");
|
|
};if _dccf =_aac .RasterOperation (0,0,_ecefc ,_gaab ,PixNotSrcAndDst ,p2 ,0,0);_dccf !=nil {return false ,_c .Wrap (_dccf ,_ebfgg ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _aac .Zero (),nil ;};type RasterOperator int ;func (_dbgd *Selection )setOrigin (_dacac ,_dgbde int ){_dbgd .Cy ,_dbgd .Cx =_dacac ,_dgbde };
|
|
func (_cbca *Points )AddPoint (x ,y float32 ){*_cbca =append (*_cbca ,Point {x ,y })};func (_cfdf *Bitmaps )WidthSorter ()func (_debbc ,_ggecg int )bool {return func (_afgbb ,_abcagaa int )bool {return _cfdf .Values [_afgbb ].Width < _cfdf .Values [_abcagaa ].Width };
|
|
};func (_gdaa *Bitmap )thresholdPixelSum (_fbb int )bool {var (_ebbf int ;_fecde uint8 ;_eea byte ;_cbc int ;);_eba :=_gdaa .RowStride ;_bdca :=uint (_gdaa .Width &0x07);if _bdca !=0{_fecde =uint8 ((0xff<<(8-_bdca ))&0xff);_eba --;};for _gdca :=0;_gdca < _gdaa .Height ;
|
|
_gdca ++{for _cbc =0;_cbc < _eba ;_cbc ++{_eea =_gdaa .Data [_gdca *_gdaa .RowStride +_cbc ];_ebbf +=int (_gedf [_eea ]);};if _bdca !=0{_eea =_gdaa .Data [_gdca *_gdaa .RowStride +_cbc ]&_fecde ;_ebbf +=int (_gedf [_eea ]);};if _ebbf > _fbb {return true ;
|
|
};};return false ;};func _fefda (_bdbg *Bitmap )(_cbef *Bitmap ,_dddd int ,_fbeb error ){const _fab ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";if _bdbg ==nil {return nil ,0,_c .Errorf (_fab ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");
|
|
};var _fada ,_adgc *Bitmap ;if _fada ,_fbeb =_edfg (nil ,_bdbg );_fbeb !=nil {return nil ,0,_c .Wrap (_fbeb ,_fab ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");};var (_bgdab [13]int ;_eeaeg ,_feed int ;);_eaaf :=12;_bgfc :=_cc .NewNumSlice (_eaaf +1);
|
|
_feaa :=_cc .NewNumSlice (_eaaf +1);var _feeac *Boxes ;for _dfbe :=0;_dfbe <=_eaaf ;_dfbe ++{if _dfbe ==0{if _adgc ,_fbeb =_edfg (nil ,_fada );_fbeb !=nil {return nil ,0,_c .Wrap (_fbeb ,_fab ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");};}else {if _adgc ,_fbeb =_ddgb (_fada ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});
|
|
_fbeb !=nil {return nil ,0,_c .Wrap (_fbeb ,_fab ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _feeac ,_fbeb =_adgc .connComponentsBB (4);_fbeb !=nil {return nil ,0,_c .Wrap (_fbeb ,_fab ,"");};_bgdab [_dfbe ]=len (*_feeac );
|
|
_bgfc .AddInt (_bgdab [_dfbe ]);switch _dfbe {case 0:_eeaeg =_bgdab [0];default:_feed =_bgdab [_dfbe -1]-_bgdab [_dfbe ];_feaa .AddInt (_feed );};_fada =_adgc ;};_afbb :=true ;_ecfe :=2;var _ddfa ,_ddac int ;for _dfbd :=1;_dfbd < len (*_feaa );_dfbd ++{if _ddfa ,_fbeb =_bgfc .GetInt (_dfbd );
|
|
_fbeb !=nil {return nil ,0,_c .Wrap (_fbeb ,_fab ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");};if _afbb &&_ddfa < int (0.3*float32 (_eeaeg )){_ecfe =_dfbd +1;_afbb =false ;};
|
|
if _feed ,_fbeb =_feaa .GetInt (_dfbd );_fbeb !=nil {return nil ,0,_c .Wrap (_fbeb ,_fab ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");};if _feed > _ddac {_ddac =_feed ;};};_faaad :=_bdbg .XResolution ;if _faaad ==0{_faaad =150;
|
|
};if _faaad > 110{_ecfe ++;};if _ecfe < 2{_fe .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");
|
|
_ecfe =2;};_dddd =_ecfe +1;if _cbef ,_fbeb =_bcde (nil ,_bdbg ,_ecfe +1,1);_fbeb !=nil {return nil ,0,_c .Wrap (_fbeb ,_fab ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _cbef ,_dddd ,nil ;
|
|
};func (_aaeb Points )Get (i int )(Point ,error ){if i > len (_aaeb )-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 _aaeb [i ],nil ;};func _gcefa (_ecdb *Bitmap ,_faag int )(*Bitmap ,error ){const _gacd ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _ecdb ==nil {return nil ,_c .Error (_gacd ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _faag <=0{return nil ,_c .Error (_gacd ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _faag ==1{_cgef ,_gged :=_edfg (nil ,_ecdb );if _gged !=nil {return nil ,_c .Wrap (_gged ,_gacd ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");
|
|
};return _cgef ,nil ;};_cdgb ,_cda :=_ddg (_ecdb ,_faag ,_faag );if _cda !=nil {return nil ,_c .Wrap (_cda ,_gacd ,"");};return _cdgb ,nil ;};func (_eeeb Points )Size ()int {return len (_eeeb )};func _daca ()[]int {_ggbb :=make ([]int ,256);for _egecc :=0;
|
|
_egecc <=0xff;_egecc ++{_dgba :=byte (_egecc );_ggbb [_dgba ]=int (_dgba &0x1)+(int (_dgba >>1)&0x1)+(int (_dgba >>2)&0x1)+(int (_dgba >>3)&0x1)+(int (_dgba >>4)&0x1)+(int (_dgba >>5)&0x1)+(int (_dgba >>6)&0x1)+(int (_dgba >>7)&0x1);};return _ggbb ;};func MakePixelSumTab8 ()[]int {return _daca ()};
|
|
const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);type CombinationOperator int ;func (_dcaa *Bitmaps )GetBox (i int )(*_cd .Rectangle ,error ){const _eceg ="\u0047\u0065\u0074\u0042\u006f\u0078";
|
|
if _dcaa ==nil {return nil ,_c .Error (_eceg ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_dcaa .Boxes )-1{return nil ,_c .Errorf (_eceg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
|
|
};return _dcaa .Boxes [i ],nil ;};func (_add *Bitmap )ToImage ()_cd .Image {_dgaa ,_abcb :=_da .NewImage (_add .Width ,_add .Height ,1,1,_add .Data ,nil ,nil );if _abcb !=nil {_fe .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",_abcb );
|
|
};return _dgaa ;};func (_cgdd *Bitmap )setEightPartlyBytes (_agdd ,_adec int ,_fbgg uint64 )(_caff error ){var (_cbbb byte ;_cbfg int ;);const _cacf ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";
|
|
for _cbeg :=1;_cbeg <=_adec ;_cbeg ++{_cbfg =64-_cbeg *8;_cbbb =byte (_fbgg >>uint (_cbfg )&0xff);_fe .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",_cbbb ,_agdd ,_agdd +_cbeg -1,_adec ,_cbfg );
|
|
if _caff =_cgdd .SetByte (_agdd +_cbeg -1,_cbbb );_caff !=nil {return _c .Wrap (_caff ,_cacf ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_cfba :=_cgdd .RowStride *8-_cgdd .Width ;if _cfba ==0{return nil ;};_cbfg -=8;_cbbb =byte (_fbgg >>uint (_cbfg )&0xff)<<uint (_cfba );
|
|
if _caff =_cgdd .SetByte (_agdd +_adec ,_cbbb );_caff !=nil {return _c .Wrap (_caff ,_cacf ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func (_bcgc Points )YSorter ()func (_gcfd ,_feef int )bool {return func (_fabe ,_adgd int )bool {return _bcgc [_fabe ].Y < _bcgc [_adgd ].Y };
|
|
};var (_efaf =_gb ();_ccge =_aeb ();_gaabg =_cfc (););const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func Extract (roi _cd .Rectangle ,src *Bitmap )(*Bitmap ,error ){_gdd :=New (roi .Dx (),roi .Dy ());_fea :=roi .Min .X &0x07;_fdff :=8-_fea ;
|
|
_fed :=uint (8-_gdd .Width &0x07);_bca :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_eeae :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_aabbb :=_gdd .RowStride ==_eeae +1-_bca ;var _ecac int ;for _cgdf :=roi .Min .Y ;_cgdf < roi .Max .Y ;_cgdf ++{_ccbc :=_bca ;
|
|
_gagd :=_ecac ;switch {case _bca ==_eeae :_gfde ,_bgdae :=src .GetByte (_ccbc );if _bgdae !=nil {return nil ,_bgdae ;};_gfde <<=uint (_fea );_bgdae =_gdd .SetByte (_gagd ,_becf (_fed ,_gfde ));if _bgdae !=nil {return nil ,_bgdae ;};case _fea ==0:for _gad :=_bca ;
|
|
_gad <=_eeae ;_gad ++{_edbg ,_ecbed :=src .GetByte (_ccbc );if _ecbed !=nil {return nil ,_ecbed ;};_ccbc ++;if _gad ==_eeae &&_aabbb {_edbg =_becf (_fed ,_edbg );};_ecbed =_gdd .SetByte (_gagd ,_edbg );if _ecbed !=nil {return nil ,_ecbed ;};_gagd ++;};
|
|
default:_cgec :=_facg (src ,_gdd ,uint (_fea ),uint (_fdff ),_fed ,_bca ,_eeae ,_aabbb ,_ccbc ,_gagd );if _cgec !=nil {return nil ,_cgec ;};};_bca +=src .RowStride ;_eeae +=src .RowStride ;_ecac +=_gdd .RowStride ;};return _gdd ,nil ;};func (_baef *ClassedPoints )XAtIndex (i int )float32 {return (*_baef .Points )[_baef .IntSlice [i ]].X };
|
|
func (_dcc *Boxes )makeSizeIndicator (_gfge ,_dabc int ,_dbe LocationFilter ,_agbc SizeComparison )*_cc .NumSlice {_bccd :=&_cc .NumSlice {};var _bfcb ,_baf ,_dgbg int ;for _ ,_ebeed :=range *_dcc {_bfcb =0;_baf ,_dgbg =_ebeed .Dx (),_ebeed .Dy ();switch _dbe {case LocSelectWidth :if (_agbc ==SizeSelectIfLT &&_baf < _gfge )||(_agbc ==SizeSelectIfGT &&_baf > _gfge )||(_agbc ==SizeSelectIfLTE &&_baf <=_gfge )||(_agbc ==SizeSelectIfGTE &&_baf >=_gfge ){_bfcb =1;
|
|
};case LocSelectHeight :if (_agbc ==SizeSelectIfLT &&_dgbg < _dabc )||(_agbc ==SizeSelectIfGT &&_dgbg > _dabc )||(_agbc ==SizeSelectIfLTE &&_dgbg <=_dabc )||(_agbc ==SizeSelectIfGTE &&_dgbg >=_dabc ){_bfcb =1;};case LocSelectIfEither :if (_agbc ==SizeSelectIfLT &&(_dgbg < _dabc ||_baf < _gfge ))||(_agbc ==SizeSelectIfGT &&(_dgbg > _dabc ||_baf > _gfge ))||(_agbc ==SizeSelectIfLTE &&(_dgbg <=_dabc ||_baf <=_gfge ))||(_agbc ==SizeSelectIfGTE &&(_dgbg >=_dabc ||_baf >=_gfge )){_bfcb =1;
|
|
};case LocSelectIfBoth :if (_agbc ==SizeSelectIfLT &&(_dgbg < _dabc &&_baf < _gfge ))||(_agbc ==SizeSelectIfGT &&(_dgbg > _dabc &&_baf > _gfge ))||(_agbc ==SizeSelectIfLTE &&(_dgbg <=_dabc &&_baf <=_gfge ))||(_agbc ==SizeSelectIfGTE &&(_dgbg >=_dabc &&_baf >=_gfge )){_bfcb =1;
|
|
};};_bccd .AddInt (_bfcb );};return _bccd ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _bedf ,_fdge int ;_fcdd :=src .RowStride -1;if x < 0{_fdge =-x ;x =0;}else if x +src .Width > dst .Width {_fcdd -=src .Width +x -dst .Width ;
|
|
};if y < 0{_bedf =-y ;y =0;_fdge +=src .RowStride ;_fcdd +=src .RowStride ;}else if y +src .Height > dst .Height {_bedf =src .Height +y -dst .Height ;};var (_fcgd int ;_bcff error ;);_abgd :=x &0x07;_gecd :=8-_abgd ;_becd :=src .Width &0x07;_adda :=_gecd -_becd ;
|
|
_cae :=_gecd &0x07!=0;_eecg :=src .Width <=((_fcdd -_fdge )<<3)+_gecd ;_gaea :=dst .GetByteIndex (x ,y );_eaaea :=_bedf +dst .Height ;if src .Height > _eaaea {_fcgd =_eaaea ;}else {_fcgd =src .Height ;};switch {case !_cae :_bcff =_gbgf (src ,dst ,_bedf ,_fcgd ,_gaea ,_fdge ,_fcdd ,op );
|
|
case _eecg :_bcff =_gbaf (src ,dst ,_bedf ,_fcgd ,_gaea ,_fdge ,_fcdd ,_adda ,_abgd ,_gecd ,op );default:_bcff =_baaca (src ,dst ,_bedf ,_fcgd ,_gaea ,_fdge ,_fcdd ,_adda ,_abgd ,_gecd ,op ,_becd );};return _bcff ;};func (_caab *Bitmaps )HeightSorter ()func (_gcfe ,_dedd int )bool {return func (_ebec ,_bbbfc int )bool {_dgeaa :=_caab .Values [_ebec ].Height < _caab .Values [_bbbfc ].Height ;
|
|
_fe .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_caab .Values [_ebec ].Height ,_caab .Values [_bbbfc ].Height ,_dgeaa );return _dgeaa ;};};const (MopDilation MorphOperation =iota ;MopErosion ;
|
|
MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_dgdg *Bitmap )SetPadBits (value int ){_dgdg .setPadBits (value )};func (_ebbc *byHeight )Len ()int {return len (_ebbc .Values )};func (_cede *Bitmap )CreateTemplate ()*Bitmap {return _cede .createTemplate ()};
|
|
func _bfbb (_agfad *Bitmap ,_afgde ,_gbef ,_cacbf ,_dggf int ,_dcdc RasterOperator ,_cbaf *Bitmap ,_febcg ,_bafe int )error {var (_dcfb bool ;_cggg bool ;_gaec byte ;_ecfc int ;_acadf int ;_aagef int ;_bbbd int ;_dacga bool ;_fdffb int ;_cgab int ;_bgbc int ;
|
|
_aga bool ;_fcdfg byte ;_fffga int ;_bdgc int ;_gcec int ;_cbgf byte ;_adfa int ;_dgda int ;_bfba uint ;_cfcg uint ;_bcbc byte ;_bgae shift ;_dbad bool ;_ada bool ;_baea ,_acfb int ;);if _febcg &7!=0{_dgda =8-(_febcg &7);};if _afgde &7!=0{_acadf =8-(_afgde &7);
|
|
};if _dgda ==0&&_acadf ==0{_bcbc =_geea [0];}else {if _acadf > _dgda {_bfba =uint (_acadf -_dgda );}else {_bfba =uint (8-(_dgda -_acadf ));};_cfcg =8-_bfba ;_bcbc =_geea [_bfba ];};if (_afgde &7)!=0{_dcfb =true ;_ecfc =8-(_afgde &7);_gaec =_geea [_ecfc ];
|
|
_aagef =_agfad .RowStride *_gbef +(_afgde >>3);_bbbd =_cbaf .RowStride *_bafe +(_febcg >>3);_adfa =8-(_febcg &7);if _ecfc > _adfa {_bgae =_faef ;if _cacbf >=_dgda {_dbad =true ;};}else {_bgae =_fagc ;};};if _cacbf < _ecfc {_cggg =true ;_gaec &=_aceg [8-_ecfc +_cacbf ];
|
|
};if !_cggg {_fdffb =(_cacbf -_ecfc )>>3;if _fdffb !=0{_dacga =true ;_cgab =_agfad .RowStride *_gbef +((_afgde +_acadf )>>3);_bgbc =_cbaf .RowStride *_bafe +((_febcg +_acadf )>>3);};};_fffga =(_afgde +_cacbf )&7;if !(_cggg ||_fffga ==0){_aga =true ;_fcdfg =_aceg [_fffga ];
|
|
_bdgc =_agfad .RowStride *_gbef +((_afgde +_acadf )>>3)+_fdffb ;_gcec =_cbaf .RowStride *_bafe +((_febcg +_acadf )>>3)+_fdffb ;if _fffga > int (_cfcg ){_ada =true ;};};switch _dcdc {case PixSrc :if _dcfb {for _baea =0;_baea < _dggf ;_baea ++{if _bgae ==_faef {_cbgf =_cbaf .Data [_bbbd ]<<_bfba ;
|
|
if _dbad {_cbgf =_cadg (_cbgf ,_cbaf .Data [_bbbd +1]>>_cfcg ,_bcbc );};}else {_cbgf =_cbaf .Data [_bbbd ]>>_cfcg ;};_agfad .Data [_aagef ]=_cadg (_agfad .Data [_aagef ],_cbgf ,_gaec );_aagef +=_agfad .RowStride ;_bbbd +=_cbaf .RowStride ;};};if _dacga {for _baea =0;
|
|
_baea < _dggf ;_baea ++{for _acfb =0;_acfb < _fdffb ;_acfb ++{_cbgf =_cadg (_cbaf .Data [_bgbc +_acfb ]<<_bfba ,_cbaf .Data [_bgbc +_acfb +1]>>_cfcg ,_bcbc );_agfad .Data [_cgab +_acfb ]=_cbgf ;};_cgab +=_agfad .RowStride ;_bgbc +=_cbaf .RowStride ;};};
|
|
if _aga {for _baea =0;_baea < _dggf ;_baea ++{_cbgf =_cbaf .Data [_gcec ]<<_bfba ;if _ada {_cbgf =_cadg (_cbgf ,_cbaf .Data [_gcec +1]>>_cfcg ,_bcbc );};_agfad .Data [_bdgc ]=_cadg (_agfad .Data [_bdgc ],_cbgf ,_fcdfg );_bdgc +=_agfad .RowStride ;_gcec +=_cbaf .RowStride ;
|
|
};};case PixNotSrc :if _dcfb {for _baea =0;_baea < _dggf ;_baea ++{if _bgae ==_faef {_cbgf =_cbaf .Data [_bbbd ]<<_bfba ;if _dbad {_cbgf =_cadg (_cbgf ,_cbaf .Data [_bbbd +1]>>_cfcg ,_bcbc );};}else {_cbgf =_cbaf .Data [_bbbd ]>>_cfcg ;};_agfad .Data [_aagef ]=_cadg (_agfad .Data [_aagef ],^_cbgf ,_gaec );
|
|
_aagef +=_agfad .RowStride ;_bbbd +=_cbaf .RowStride ;};};if _dacga {for _baea =0;_baea < _dggf ;_baea ++{for _acfb =0;_acfb < _fdffb ;_acfb ++{_cbgf =_cadg (_cbaf .Data [_bgbc +_acfb ]<<_bfba ,_cbaf .Data [_bgbc +_acfb +1]>>_cfcg ,_bcbc );_agfad .Data [_cgab +_acfb ]=^_cbgf ;
|
|
};_cgab +=_agfad .RowStride ;_bgbc +=_cbaf .RowStride ;};};if _aga {for _baea =0;_baea < _dggf ;_baea ++{_cbgf =_cbaf .Data [_gcec ]<<_bfba ;if _ada {_cbgf =_cadg (_cbgf ,_cbaf .Data [_gcec +1]>>_cfcg ,_bcbc );};_agfad .Data [_bdgc ]=_cadg (_agfad .Data [_bdgc ],^_cbgf ,_fcdfg );
|
|
_bdgc +=_agfad .RowStride ;_gcec +=_cbaf .RowStride ;};};case PixSrcOrDst :if _dcfb {for _baea =0;_baea < _dggf ;_baea ++{if _bgae ==_faef {_cbgf =_cbaf .Data [_bbbd ]<<_bfba ;if _dbad {_cbgf =_cadg (_cbgf ,_cbaf .Data [_bbbd +1]>>_cfcg ,_bcbc );};}else {_cbgf =_cbaf .Data [_bbbd ]>>_cfcg ;
|
|
};_agfad .Data [_aagef ]=_cadg (_agfad .Data [_aagef ],_cbgf |_agfad .Data [_aagef ],_gaec );_aagef +=_agfad .RowStride ;_bbbd +=_cbaf .RowStride ;};};if _dacga {for _baea =0;_baea < _dggf ;_baea ++{for _acfb =0;_acfb < _fdffb ;_acfb ++{_cbgf =_cadg (_cbaf .Data [_bgbc +_acfb ]<<_bfba ,_cbaf .Data [_bgbc +_acfb +1]>>_cfcg ,_bcbc );
|
|
_agfad .Data [_cgab +_acfb ]|=_cbgf ;};_cgab +=_agfad .RowStride ;_bgbc +=_cbaf .RowStride ;};};if _aga {for _baea =0;_baea < _dggf ;_baea ++{_cbgf =_cbaf .Data [_gcec ]<<_bfba ;if _ada {_cbgf =_cadg (_cbgf ,_cbaf .Data [_gcec +1]>>_cfcg ,_bcbc );};_agfad .Data [_bdgc ]=_cadg (_agfad .Data [_bdgc ],_cbgf |_agfad .Data [_bdgc ],_fcdfg );
|
|
_bdgc +=_agfad .RowStride ;_gcec +=_cbaf .RowStride ;};};case PixSrcAndDst :if _dcfb {for _baea =0;_baea < _dggf ;_baea ++{if _bgae ==_faef {_cbgf =_cbaf .Data [_bbbd ]<<_bfba ;if _dbad {_cbgf =_cadg (_cbgf ,_cbaf .Data [_bbbd +1]>>_cfcg ,_bcbc );};}else {_cbgf =_cbaf .Data [_bbbd ]>>_cfcg ;
|
|
};_agfad .Data [_aagef ]=_cadg (_agfad .Data [_aagef ],_cbgf &_agfad .Data [_aagef ],_gaec );_aagef +=_agfad .RowStride ;_bbbd +=_cbaf .RowStride ;};};if _dacga {for _baea =0;_baea < _dggf ;_baea ++{for _acfb =0;_acfb < _fdffb ;_acfb ++{_cbgf =_cadg (_cbaf .Data [_bgbc +_acfb ]<<_bfba ,_cbaf .Data [_bgbc +_acfb +1]>>_cfcg ,_bcbc );
|
|
_agfad .Data [_cgab +_acfb ]&=_cbgf ;};_cgab +=_agfad .RowStride ;_bgbc +=_cbaf .RowStride ;};};if _aga {for _baea =0;_baea < _dggf ;_baea ++{_cbgf =_cbaf .Data [_gcec ]<<_bfba ;if _ada {_cbgf =_cadg (_cbgf ,_cbaf .Data [_gcec +1]>>_cfcg ,_bcbc );};_agfad .Data [_bdgc ]=_cadg (_agfad .Data [_bdgc ],_cbgf &_agfad .Data [_bdgc ],_fcdfg );
|
|
_bdgc +=_agfad .RowStride ;_gcec +=_cbaf .RowStride ;};};case PixSrcXorDst :if _dcfb {for _baea =0;_baea < _dggf ;_baea ++{if _bgae ==_faef {_cbgf =_cbaf .Data [_bbbd ]<<_bfba ;if _dbad {_cbgf =_cadg (_cbgf ,_cbaf .Data [_bbbd +1]>>_cfcg ,_bcbc );};}else {_cbgf =_cbaf .Data [_bbbd ]>>_cfcg ;
|
|
};_agfad .Data [_aagef ]=_cadg (_agfad .Data [_aagef ],_cbgf ^_agfad .Data [_aagef ],_gaec );_aagef +=_agfad .RowStride ;_bbbd +=_cbaf .RowStride ;};};if _dacga {for _baea =0;_baea < _dggf ;_baea ++{for _acfb =0;_acfb < _fdffb ;_acfb ++{_cbgf =_cadg (_cbaf .Data [_bgbc +_acfb ]<<_bfba ,_cbaf .Data [_bgbc +_acfb +1]>>_cfcg ,_bcbc );
|
|
_agfad .Data [_cgab +_acfb ]^=_cbgf ;};_cgab +=_agfad .RowStride ;_bgbc +=_cbaf .RowStride ;};};if _aga {for _baea =0;_baea < _dggf ;_baea ++{_cbgf =_cbaf .Data [_gcec ]<<_bfba ;if _ada {_cbgf =_cadg (_cbgf ,_cbaf .Data [_gcec +1]>>_cfcg ,_bcbc );};_agfad .Data [_bdgc ]=_cadg (_agfad .Data [_bdgc ],_cbgf ^_agfad .Data [_bdgc ],_fcdfg );
|
|
_bdgc +=_agfad .RowStride ;_gcec +=_cbaf .RowStride ;};};case PixNotSrcOrDst :if _dcfb {for _baea =0;_baea < _dggf ;_baea ++{if _bgae ==_faef {_cbgf =_cbaf .Data [_bbbd ]<<_bfba ;if _dbad {_cbgf =_cadg (_cbgf ,_cbaf .Data [_bbbd +1]>>_cfcg ,_bcbc );};}else {_cbgf =_cbaf .Data [_bbbd ]>>_cfcg ;
|
|
};_agfad .Data [_aagef ]=_cadg (_agfad .Data [_aagef ],^_cbgf |_agfad .Data [_aagef ],_gaec );_aagef +=_agfad .RowStride ;_bbbd +=_cbaf .RowStride ;};};if _dacga {for _baea =0;_baea < _dggf ;_baea ++{for _acfb =0;_acfb < _fdffb ;_acfb ++{_cbgf =_cadg (_cbaf .Data [_bgbc +_acfb ]<<_bfba ,_cbaf .Data [_bgbc +_acfb +1]>>_cfcg ,_bcbc );
|
|
_agfad .Data [_cgab +_acfb ]|=^_cbgf ;};_cgab +=_agfad .RowStride ;_bgbc +=_cbaf .RowStride ;};};if _aga {for _baea =0;_baea < _dggf ;_baea ++{_cbgf =_cbaf .Data [_gcec ]<<_bfba ;if _ada {_cbgf =_cadg (_cbgf ,_cbaf .Data [_gcec +1]>>_cfcg ,_bcbc );};_agfad .Data [_bdgc ]=_cadg (_agfad .Data [_bdgc ],^_cbgf |_agfad .Data [_bdgc ],_fcdfg );
|
|
_bdgc +=_agfad .RowStride ;_gcec +=_cbaf .RowStride ;};};case PixNotSrcAndDst :if _dcfb {for _baea =0;_baea < _dggf ;_baea ++{if _bgae ==_faef {_cbgf =_cbaf .Data [_bbbd ]<<_bfba ;if _dbad {_cbgf =_cadg (_cbgf ,_cbaf .Data [_bbbd +1]>>_cfcg ,_bcbc );};
|
|
}else {_cbgf =_cbaf .Data [_bbbd ]>>_cfcg ;};_agfad .Data [_aagef ]=_cadg (_agfad .Data [_aagef ],^_cbgf &_agfad .Data [_aagef ],_gaec );_aagef +=_agfad .RowStride ;_bbbd +=_cbaf .RowStride ;};};if _dacga {for _baea =0;_baea < _dggf ;_baea ++{for _acfb =0;
|
|
_acfb < _fdffb ;_acfb ++{_cbgf =_cadg (_cbaf .Data [_bgbc +_acfb ]<<_bfba ,_cbaf .Data [_bgbc +_acfb +1]>>_cfcg ,_bcbc );_agfad .Data [_cgab +_acfb ]&=^_cbgf ;};_cgab +=_agfad .RowStride ;_bgbc +=_cbaf .RowStride ;};};if _aga {for _baea =0;_baea < _dggf ;
|
|
_baea ++{_cbgf =_cbaf .Data [_gcec ]<<_bfba ;if _ada {_cbgf =_cadg (_cbgf ,_cbaf .Data [_gcec +1]>>_cfcg ,_bcbc );};_agfad .Data [_bdgc ]=_cadg (_agfad .Data [_bdgc ],^_cbgf &_agfad .Data [_bdgc ],_fcdfg );_bdgc +=_agfad .RowStride ;_gcec +=_cbaf .RowStride ;
|
|
};};case PixSrcOrNotDst :if _dcfb {for _baea =0;_baea < _dggf ;_baea ++{if _bgae ==_faef {_cbgf =_cbaf .Data [_bbbd ]<<_bfba ;if _dbad {_cbgf =_cadg (_cbgf ,_cbaf .Data [_bbbd +1]>>_cfcg ,_bcbc );};}else {_cbgf =_cbaf .Data [_bbbd ]>>_cfcg ;};_agfad .Data [_aagef ]=_cadg (_agfad .Data [_aagef ],_cbgf |^_agfad .Data [_aagef ],_gaec );
|
|
_aagef +=_agfad .RowStride ;_bbbd +=_cbaf .RowStride ;};};if _dacga {for _baea =0;_baea < _dggf ;_baea ++{for _acfb =0;_acfb < _fdffb ;_acfb ++{_cbgf =_cadg (_cbaf .Data [_bgbc +_acfb ]<<_bfba ,_cbaf .Data [_bgbc +_acfb +1]>>_cfcg ,_bcbc );_agfad .Data [_cgab +_acfb ]=_cbgf |^_agfad .Data [_cgab +_acfb ];
|
|
};_cgab +=_agfad .RowStride ;_bgbc +=_cbaf .RowStride ;};};if _aga {for _baea =0;_baea < _dggf ;_baea ++{_cbgf =_cbaf .Data [_gcec ]<<_bfba ;if _ada {_cbgf =_cadg (_cbgf ,_cbaf .Data [_gcec +1]>>_cfcg ,_bcbc );};_agfad .Data [_bdgc ]=_cadg (_agfad .Data [_bdgc ],_cbgf |^_agfad .Data [_bdgc ],_fcdfg );
|
|
_bdgc +=_agfad .RowStride ;_gcec +=_cbaf .RowStride ;};};case PixSrcAndNotDst :if _dcfb {for _baea =0;_baea < _dggf ;_baea ++{if _bgae ==_faef {_cbgf =_cbaf .Data [_bbbd ]<<_bfba ;if _dbad {_cbgf =_cadg (_cbgf ,_cbaf .Data [_bbbd +1]>>_cfcg ,_bcbc );};
|
|
}else {_cbgf =_cbaf .Data [_bbbd ]>>_cfcg ;};_agfad .Data [_aagef ]=_cadg (_agfad .Data [_aagef ],_cbgf &^_agfad .Data [_aagef ],_gaec );_aagef +=_agfad .RowStride ;_bbbd +=_cbaf .RowStride ;};};if _dacga {for _baea =0;_baea < _dggf ;_baea ++{for _acfb =0;
|
|
_acfb < _fdffb ;_acfb ++{_cbgf =_cadg (_cbaf .Data [_bgbc +_acfb ]<<_bfba ,_cbaf .Data [_bgbc +_acfb +1]>>_cfcg ,_bcbc );_agfad .Data [_cgab +_acfb ]=_cbgf &^_agfad .Data [_cgab +_acfb ];};_cgab +=_agfad .RowStride ;_bgbc +=_cbaf .RowStride ;};};if _aga {for _baea =0;
|
|
_baea < _dggf ;_baea ++{_cbgf =_cbaf .Data [_gcec ]<<_bfba ;if _ada {_cbgf =_cadg (_cbgf ,_cbaf .Data [_gcec +1]>>_cfcg ,_bcbc );};_agfad .Data [_bdgc ]=_cadg (_agfad .Data [_bdgc ],_cbgf &^_agfad .Data [_bdgc ],_fcdfg );_bdgc +=_agfad .RowStride ;_gcec +=_cbaf .RowStride ;
|
|
};};case PixNotPixSrcOrDst :if _dcfb {for _baea =0;_baea < _dggf ;_baea ++{if _bgae ==_faef {_cbgf =_cbaf .Data [_bbbd ]<<_bfba ;if _dbad {_cbgf =_cadg (_cbgf ,_cbaf .Data [_bbbd +1]>>_cfcg ,_bcbc );};}else {_cbgf =_cbaf .Data [_bbbd ]>>_cfcg ;};_agfad .Data [_aagef ]=_cadg (_agfad .Data [_aagef ],^(_cbgf |_agfad .Data [_aagef ]),_gaec );
|
|
_aagef +=_agfad .RowStride ;_bbbd +=_cbaf .RowStride ;};};if _dacga {for _baea =0;_baea < _dggf ;_baea ++{for _acfb =0;_acfb < _fdffb ;_acfb ++{_cbgf =_cadg (_cbaf .Data [_bgbc +_acfb ]<<_bfba ,_cbaf .Data [_bgbc +_acfb +1]>>_cfcg ,_bcbc );_agfad .Data [_cgab +_acfb ]=^(_cbgf |_agfad .Data [_cgab +_acfb ]);
|
|
};_cgab +=_agfad .RowStride ;_bgbc +=_cbaf .RowStride ;};};if _aga {for _baea =0;_baea < _dggf ;_baea ++{_cbgf =_cbaf .Data [_gcec ]<<_bfba ;if _ada {_cbgf =_cadg (_cbgf ,_cbaf .Data [_gcec +1]>>_cfcg ,_bcbc );};_agfad .Data [_bdgc ]=_cadg (_agfad .Data [_bdgc ],^(_cbgf |_agfad .Data [_bdgc ]),_fcdfg );
|
|
_bdgc +=_agfad .RowStride ;_gcec +=_cbaf .RowStride ;};};case PixNotPixSrcAndDst :if _dcfb {for _baea =0;_baea < _dggf ;_baea ++{if _bgae ==_faef {_cbgf =_cbaf .Data [_bbbd ]<<_bfba ;if _dbad {_cbgf =_cadg (_cbgf ,_cbaf .Data [_bbbd +1]>>_cfcg ,_bcbc );
|
|
};}else {_cbgf =_cbaf .Data [_bbbd ]>>_cfcg ;};_agfad .Data [_aagef ]=_cadg (_agfad .Data [_aagef ],^(_cbgf &_agfad .Data [_aagef ]),_gaec );_aagef +=_agfad .RowStride ;_bbbd +=_cbaf .RowStride ;};};if _dacga {for _baea =0;_baea < _dggf ;_baea ++{for _acfb =0;
|
|
_acfb < _fdffb ;_acfb ++{_cbgf =_cadg (_cbaf .Data [_bgbc +_acfb ]<<_bfba ,_cbaf .Data [_bgbc +_acfb +1]>>_cfcg ,_bcbc );_agfad .Data [_cgab +_acfb ]=^(_cbgf &_agfad .Data [_cgab +_acfb ]);};_cgab +=_agfad .RowStride ;_bgbc +=_cbaf .RowStride ;};};if _aga {for _baea =0;
|
|
_baea < _dggf ;_baea ++{_cbgf =_cbaf .Data [_gcec ]<<_bfba ;if _ada {_cbgf =_cadg (_cbgf ,_cbaf .Data [_gcec +1]>>_cfcg ,_bcbc );};_agfad .Data [_bdgc ]=_cadg (_agfad .Data [_bdgc ],^(_cbgf &_agfad .Data [_bdgc ]),_fcdfg );_bdgc +=_agfad .RowStride ;_gcec +=_cbaf .RowStride ;
|
|
};};case PixNotPixSrcXorDst :if _dcfb {for _baea =0;_baea < _dggf ;_baea ++{if _bgae ==_faef {_cbgf =_cbaf .Data [_bbbd ]<<_bfba ;if _dbad {_cbgf =_cadg (_cbgf ,_cbaf .Data [_bbbd +1]>>_cfcg ,_bcbc );};}else {_cbgf =_cbaf .Data [_bbbd ]>>_cfcg ;};_agfad .Data [_aagef ]=_cadg (_agfad .Data [_aagef ],^(_cbgf ^_agfad .Data [_aagef ]),_gaec );
|
|
_aagef +=_agfad .RowStride ;_bbbd +=_cbaf .RowStride ;};};if _dacga {for _baea =0;_baea < _dggf ;_baea ++{for _acfb =0;_acfb < _fdffb ;_acfb ++{_cbgf =_cadg (_cbaf .Data [_bgbc +_acfb ]<<_bfba ,_cbaf .Data [_bgbc +_acfb +1]>>_cfcg ,_bcbc );_agfad .Data [_cgab +_acfb ]=^(_cbgf ^_agfad .Data [_cgab +_acfb ]);
|
|
};_cgab +=_agfad .RowStride ;_bgbc +=_cbaf .RowStride ;};};if _aga {for _baea =0;_baea < _dggf ;_baea ++{_cbgf =_cbaf .Data [_gcec ]<<_bfba ;if _ada {_cbgf =_cadg (_cbgf ,_cbaf .Data [_gcec +1]>>_cfcg ,_bcbc );};_agfad .Data [_bdgc ]=_cadg (_agfad .Data [_bdgc ],^(_cbgf ^_agfad .Data [_bdgc ]),_fcdfg );
|
|
_bdgc +=_agfad .RowStride ;_gcec +=_cbaf .RowStride ;};};default:_fe .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",_dcdc );
|
|
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 (_dbbe *Bitmap )addPadBits ()(_deed error ){const _ggga ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_fdd :=_dbbe .Width %8;if _fdd ==0{return nil ;};_dacg :=_dbbe .Width /8;_bgda :=_ce .NewReader (_dbbe .Data );
|
|
_ecbe :=make ([]byte ,_dbbe .Height *_dbbe .RowStride );_deedb :=_ce .NewWriterMSB (_ecbe );_ebge :=make ([]byte ,_dacg );var (_cgbe int ;_cega uint64 ;);for _cgbe =0;_cgbe < _dbbe .Height ;_cgbe ++{if _ ,_deed =_bgda .Read (_ebge );_deed !=nil {return _c .Wrap (_deed ,_ggga ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");
|
|
};if _ ,_deed =_deedb .Write (_ebge );_deed !=nil {return _c .Wrap (_deed ,_ggga ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _cega ,_deed =_bgda .ReadBits (byte (_fdd ));_deed !=nil {return _c .Wrap (_deed ,_ggga ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");
|
|
};if _deed =_deedb .WriteByte (byte (_cega )<<uint (8-_fdd ));_deed !=nil {return _c .Wrap (_deed ,_ggga ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");};};_dbbe .Data =_deedb .Data ();return nil ;};func (_gffcg Points )GetIntY (i int )(int ,error ){if i >=len (_gffcg ){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 (_gffcg [i ].Y ),nil ;};func (_cfbfg *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _cfbfg .removeBorderGeneral (left ,right ,top ,bot );};func _bag (_gaeaa *_cc .Stack ,_ebfb ,_deage ,_gfad ,_dbfg ,_aaeef int ,_ccdb *_cd .Rectangle )(_gdgg error ){const _eggg ="\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 _gaeaa ==nil {return _c .Error (_eggg ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _ccdb ==nil {return _c .Error (_eggg ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
|
|
};_ccdb .Min .X =_cc .Min (_ccdb .Min .X ,_ebfb );_ccdb .Max .X =_cc .Max (_ccdb .Max .X ,_deage );_ccdb .Min .Y =_cc .Min (_ccdb .Min .Y ,_gfad );_ccdb .Max .Y =_cc .Max (_ccdb .Max .Y ,_gfad );if !(_gfad +_dbfg >=0&&_gfad +_dbfg <=_aaeef ){return nil ;
|
|
};if _gaeaa .Aux ==nil {return _c .Error (_eggg ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _cceg *fillSegment ;_dbgfc ,_aebgg :=_gaeaa .Aux .Pop ();if _aebgg {if _cceg ,_aebgg =_dbgfc .(*fillSegment );
|
|
!_aebgg {return _c .Error (_eggg ,"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 {_cceg =&fillSegment {};
|
|
};_cceg ._daaea =_ebfb ;_cceg ._bdeg =_deage ;_cceg ._edde =_gfad ;_cceg ._egafg =_dbfg ;_gaeaa .Push (_cceg );return nil ;};func (_dbgf *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _befa (_dbgf ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
|
|
};func (_dacag *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _agfc ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _ccfa :=_dacag .validateIntSlice ();_ccfa !=nil {return nil ,_c .Wrap (_ccfa ,_agfc ,"");
|
|
};if _dacag .IntSlice .Size ()==0{return nil ,_c .Error (_agfc ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_dacag .SortByY ();var (_gefba []*ClassedPoints ;_egfa int ;);_afedf :=-1;var _acfd *ClassedPoints ;
|
|
for _ecfeb :=0;_ecfeb < len (_dacag .IntSlice );_ecfeb ++{_egfa =int (_dacag .YAtIndex (_ecfeb ));if _egfa !=_afedf {_acfd =&ClassedPoints {Points :_dacag .Points };_afedf =_egfa ;_gefba =append (_gefba ,_acfd );};_acfd .IntSlice =append (_acfd .IntSlice ,_dacag .IntSlice [_ecfeb ]);
|
|
};for _ ,_aegfg :=range _gefba {_aegfg .SortByX ();};return _gefba ,nil ;};func _fca (_ebf *Bitmap ,_egd *Bitmap ,_agc int )(_ggf error ){const _bdg ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";
|
|
switch _agc {case 2:_ggf =_dc (_ebf ,_egd );case 4:_ggf =_fd (_ebf ,_egd );case 8:_ggf =_dac (_ebf ,_egd );default:return _c .Error (_bdg ,"\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 _ggf !=nil {_ggf =_c .Wrap (_ggf ,_bdg ,"");};return _ggf ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_dabf :=_eccc (h ,w ,"");_dabf .setOrigin (cy ,cx );var _egef ,_feada int ;for _egef =0;_egef < h ;_egef ++{for _feada =0;
|
|
_feada < w ;_feada ++{_dabf .Data [_egef ][_feada ]=tp ;};};return _dabf ;};func (_egga *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_eaae bool ,_aaef error ){const _gcbd ="\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 =_daca ();};_egc :=_egga .Width >>3;_cggf :=_egga .Width &7;_eef :=byte (0xff<<uint (8-_cggf ));var (_bcgd ,_ade ,_fffa ,_acffg int ;_ggad byte ;);for _bcgd =0;_bcgd < _egga .Height ;_bcgd ++{_fffa =_egga .RowStride *_bcgd ;for _ade =0;
|
|
_ade < _egc ;_ade ++{_ggad ,_aaef =_egga .GetByte (_fffa +_ade );if _aaef !=nil {return false ,_c .Wrap (_aaef ,_gcbd ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_acffg +=tab8 [_ggad ];};if _cggf !=0{_ggad ,_aaef =_egga .GetByte (_fffa +_ade );
|
|
if _aaef !=nil {return false ,_c .Wrap (_aaef ,_gcbd ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_ggad &=_eef ;_acffg +=tab8 [_ggad ];};if _acffg > thresh {return true ,nil ;};};return _eaae ,nil ;};func (_dabee *byWidth )Len ()int {return len (_dabee .Values )};
|
|
func _egae (_egfad *Bitmap ,_efbd ,_aecc int ,_gbfeb ,_badf int ,_aeagd RasterOperator ,_decge *Bitmap ,_bedg ,_dcbd int )error {var _gddfa ,_cbff ,_ccgg ,_efgf int ;if _efbd < 0{_bedg -=_efbd ;_gbfeb +=_efbd ;_efbd =0;};if _bedg < 0{_efbd -=_bedg ;_gbfeb +=_bedg ;
|
|
_bedg =0;};_gddfa =_efbd +_gbfeb -_egfad .Width ;if _gddfa > 0{_gbfeb -=_gddfa ;};_cbff =_bedg +_gbfeb -_decge .Width ;if _cbff > 0{_gbfeb -=_cbff ;};if _aecc < 0{_dcbd -=_aecc ;_badf +=_aecc ;_aecc =0;};if _dcbd < 0{_aecc -=_dcbd ;_badf +=_dcbd ;_dcbd =0;
|
|
};_ccgg =_aecc +_badf -_egfad .Height ;if _ccgg > 0{_badf -=_ccgg ;};_efgf =_dcbd +_badf -_decge .Height ;if _efgf > 0{_badf -=_efgf ;};if _gbfeb <=0||_badf <=0{return nil ;};var _fbag error ;switch {case _efbd &7==0&&_bedg &7==0:_fbag =_gbgcf (_egfad ,_efbd ,_aecc ,_gbfeb ,_badf ,_aeagd ,_decge ,_bedg ,_dcbd );
|
|
case _efbd &7==_bedg &7:_fbag =_ffgd (_egfad ,_efbd ,_aecc ,_gbfeb ,_badf ,_aeagd ,_decge ,_bedg ,_dcbd );default:_fbag =_bfbb (_egfad ,_efbd ,_aecc ,_gbfeb ,_badf ,_aeagd ,_decge ,_bedg ,_dcbd );};if _fbag !=nil {return _c .Wrap (_fbag ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");
|
|
};return nil ;};func TstTSymbol (t *_eb .T ,scale ...int )*Bitmap {_fbgcgg ,_gfbb :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_e .NoError (t ,_gfbb );return TstGetScaledSymbol (t ,_fbgcgg ,scale ...);};func (_abc *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _abc .addBorderGeneral (left ,right ,top ,bot ,val );
|
|
};func (_eadb Points )XSorter ()func (_fgba ,_dgaag int )bool {return func (_edgc ,_dgae int )bool {return _eadb [_edgc ].X < _eadb [_dgae ].X };};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _cggff (d ,s ,sel )};func New (width ,height int )*Bitmap {_caf :=_agg (width ,height );
|
|
_caf .Data =make ([]byte ,height *_caf .RowStride );return _caf ;};func (_ddd *Bitmap )Zero ()bool {_cgb :=_ddd .Width /8;_edaa :=_ddd .Width &7;var _cbf byte ;if _edaa !=0{_cbf =byte (0xff<<uint (8-_edaa ));};var _fcg ,_ecf ,_dea int ;for _ecf =0;_ecf < _ddd .Height ;
|
|
_ecf ++{_fcg =_ddd .RowStride *_ecf ;for _dea =0;_dea < _cgb ;_dea ,_fcg =_dea +1,_fcg +1{if _ddd .Data [_fcg ]!=0{return false ;};};if _edaa > 0{if _ddd .Data [_fcg ]&_cbf !=0{return false ;};};};return true ;};type Point struct{X ,Y float32 ;};const (Vanilla Color =iota ;
|
|
Chocolate ;);func (_efgd *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _efgd .Copy (),nil ;};_ccda ,_ggd :=_efgd .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _ggd !=nil {return nil ,_c .Wrap (_ggd ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");
|
|
};return _ccda ,nil ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_cdee *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _ggabc ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";
|
|
_gcfb ,_efgb :=_cdee .selectByIndexes (idx );if _efgb !=nil {return nil ,_c .Wrap (_efgb ,_ggabc ,"");};return _gcfb ,nil ;};func TstWordBitmapWithSpaces (t *_eb .T ,scale ...int )*Bitmap {_gaada :=1;if len (scale )> 0{_gaada =scale [0];};_bfbc :=3;_ecbf :=9+7+15+2*_bfbc +2*_bfbc ;
|
|
_gebb :=5+_bfbc +5+2*_bfbc ;_ffdb :=New (_ecbf *_gaada ,_gebb *_gaada );_bdgdc :=&Bitmaps {};var _aaebd *int ;_bfbc *=_gaada ;_afec :=_bfbc ;_aaebd =&_afec ;_fedb :=_bfbc ;_bbce :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,1*_gaada );
|
|
_bbce =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,_bfbc );_bbce =TstISymbol (t ,scale ...);TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,1*_gaada );_bbce =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,_bfbc );
|
|
_bbce =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,1*_gaada );_bbce =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,1*_gaada );_bbce =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,0);
|
|
*_aaebd =_bfbc ;_fedb =5*_gaada +_bfbc ;_bbce =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,1*_gaada );_bbce =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,_bfbc );_bbce =TstNSymbol (t ,scale ...);
|
|
TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,1*_gaada );_bbce =TstESymbol (t ,scale ...);TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,1*_gaada );_bbce =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,1*_gaada );_bbce =TstESymbol (t ,scale ...);
|
|
TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,1*_gaada );_bbce =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_bdgdc ,_bbce ,_aaebd ,_fedb ,0);TstWriteSymbols (t ,_bdgdc ,_ffdb );return _ffdb ;};func TstAddSymbol (t *_eb .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );
|
|
_fceb :=_cd .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_fceb );*x +=sym .Width +space ;};func _fbcc (_ggge ,_fcae *Bitmap ,_dfec *Selection )(*Bitmap ,error ){const _dfce ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";
|
|
var _fadf ,_cfcd int ;if _fcae ==nil {return nil ,_c .Error (_dfce ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _dfec ==nil {return nil ,_c .Error (_dfce ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};_fadf =_dfec .Width ;_cfcd =_dfec .Height ;if _fadf ==0||_cfcd ==0{return nil ,_c .Error (_dfce ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _ggge ==nil {return _fcae .createTemplate (),nil ;};if _bbde :=_ggge .resizeImageData (_fcae );
|
|
_bbde !=nil {return nil ,_bbde ;};return _ggge ,nil ;};func init (){const _fbea ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_begfc =New (50,40);var _cagf error ;_begfc ,_cagf =_begfc .AddBorder (2,1);
|
|
if _cagf !=nil {panic (_c .Wrap (_cagf ,_fbea ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_cecc ,_cagf =NewWithData (50,22,_bdab );if _cagf !=nil {panic (_c .Wrap (_cagf ,_fbea ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
|
|
};};func _gbgf (_cage ,_fdgb *Bitmap ,_fefd ,_cbee ,_bgca ,_agf ,_fga int ,_gaga CombinationOperator )error {var _dbg int ;_dacgc :=func (){_dbg ++;_bgca +=_fdgb .RowStride ;_agf +=_cage .RowStride ;_fga +=_cage .RowStride };for _dbg =_fefd ;_dbg < _cbee ;
|
|
_dacgc (){_egbb :=_bgca ;for _fbf :=_agf ;_fbf <=_fga ;_fbf ++{_geae ,_baac :=_fdgb .GetByte (_egbb );if _baac !=nil {return _baac ;};_dadf ,_baac :=_cage .GetByte (_fbf );if _baac !=nil {return _baac ;};if _baac =_fdgb .SetByte (_egbb ,_fcgde (_geae ,_dadf ,_gaga ));
|
|
_baac !=nil {return _baac ;};_egbb ++;};};return nil ;};func (_ccff *Bitmap )And (s *Bitmap )(_dgfb *Bitmap ,_eeg error ){const _facf ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _ccff ==nil {return nil ,_c .Error (_facf ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");
|
|
};if s ==nil {return nil ,_c .Error (_facf ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_ccff .SizesEqual (s ){_fe .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",_facf );
|
|
};if _dgfb ,_eeg =_edfg (_dgfb ,_ccff );_eeg !=nil {return nil ,_c .Wrap (_eeg ,_facf ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _eeg =_dgfb .RasterOperation (0,0,_dgfb .Width ,_dgfb .Height ,PixSrcAndDst ,s ,0,0);
|
|
_eeg !=nil {return nil ,_c .Wrap (_eeg ,_facf ,"");};return _dgfb ,nil ;};func _fbeg (_bbgaf ,_abdc *Bitmap ,_fbgc ,_eddb int )(*Bitmap ,error ){const _bbgg ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _abdc ==nil {return nil ,_c .Error (_bbgg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};if _fbgc < 1||_eddb < 1{return nil ,_c .Error (_bbgg ,"\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 _fbgc ==1&&_eddb ==1{_ffg ,_dcfgg :=_edfg (_bbgaf ,_abdc );if _dcfgg !=nil {return nil ,_c .Wrap (_dcfgg ,_bbgg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _ffg ,nil ;};if _fbgc ==1||_eddb ==1{_cgcf :=SelCreateBrick (_eddb ,_fbgc ,_eddb /2,_fbgc /2,SelHit );_adb ,_fgca :=_ggfa (_bbgaf ,_abdc ,_cgcf );if _fgca !=nil {return nil ,_c .Wrap (_fgca ,_bbgg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
|
|
};return _adb ,nil ;};_gdf :=SelCreateBrick (1,_fbgc ,0,_fbgc /2,SelHit );_edbf :=SelCreateBrick (_eddb ,1,_eddb /2,0,SelHit );_fagf ,_beb :=_ggfa (nil ,_abdc ,_gdf );if _beb !=nil {return nil ,_c .Wrap (_beb ,_bbgg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
|
|
};_bbgaf ,_beb =_ggfa (_bbgaf ,_fagf ,_edbf );if _beb !=nil {return nil ,_c .Wrap (_beb ,_bbgg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _bbgaf ,nil ;};func (_dgea *Bitmap )GetUnpaddedData ()([]byte ,error ){_gdad :=uint (_dgea .Width &0x07);
|
|
if _gdad ==0{return _dgea .Data ,nil ;};_acff :=_dgea .Width *_dgea .Height ;if _acff %8!=0{_acff >>=3;_acff ++;}else {_acff >>=3;};_cgda :=make ([]byte ,_acff );_eab :=_ce .NewWriterMSB (_cgda );const _eee ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
|
|
for _ddf :=0;_ddf < _dgea .Height ;_ddf ++{for _dee :=0;_dee < _dgea .RowStride ;_dee ++{_ddb :=_dgea .Data [_ddf *_dgea .RowStride +_dee ];if _dee !=_dgea .RowStride -1{_deca :=_eab .WriteByte (_ddb );if _deca !=nil {return nil ,_c .Wrap (_deca ,_eee ,"");
|
|
};continue ;};for _ebc :=uint (0);_ebc < _gdad ;_ebc ++{_bed :=_eab .WriteBit (int (_ddb >>(7-_ebc )&0x01));if _bed !=nil {return nil ,_c .Wrap (_bed ,_eee ,"");};};};};return _cgda ,nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_eced float64 ,_gccb error ){const _ccgf ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
|
|
if bm1 ==nil ||bm2 ==nil {return 0,_c .Error (_ccgf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_c .Error (_ccgf ,"\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 (_ccgf ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_cdcd ,_edff :=bm1 .Width ,bm1 .Height ;_feeb ,_cfea :=bm2 .Width ,bm2 .Height ;
|
|
_abfg :=_aebg (_cdcd -_feeb );if _abfg > maxDiffW {return 0,nil ;};_gefee :=_aebg (_edff -_cfea );if _gefee > maxDiffH {return 0,nil ;};var _bfff ,_bbaae int ;if delX >=0{_bfff =int (delX +0.5);}else {_bfff =int (delX -0.5);};if delY >=0{_bbaae =int (delY +0.5);
|
|
}else {_bbaae =int (delY -0.5);};_aeeec :=_edec (_bbaae ,0);_gaf :=_dfgg (_cfea +_bbaae ,_edff );_ffa :=bm1 .RowStride *_aeeec ;_egdc :=bm2 .RowStride *(_aeeec -_bbaae );_bfbd :=_edec (_bfff ,0);_gagaa :=_dfgg (_feeb +_bfff ,_cdcd );_bbadd :=bm2 .RowStride ;
|
|
var _afgf ,_fgde int ;if _bfff >=8{_afgf =_bfff >>3;_ffa +=_afgf ;_bfbd -=_afgf <<3;_gagaa -=_afgf <<3;_bfff &=7;}else if _bfff <=-8{_fgde =-((_bfff +7)>>3);_egdc +=_fgde ;_bbadd -=_fgde ;_bfff +=_fgde <<3;};if _bfbd >=_gagaa ||_aeeec >=_gaf {return 0,nil ;
|
|
};_bfac :=(_gagaa +7)>>3;var (_fbd ,_fbbc ,_gaef byte ;_gbdc ,_cbed ,_eega int ;);switch {case _bfff ==0:for _eega =_aeeec ;_eega < _gaf ;_eega ,_ffa ,_egdc =_eega +1,_ffa +bm1 .RowStride ,_egdc +bm2 .RowStride {for _cbed =0;_cbed < _bfac ;_cbed ++{_gaef =bm1 .Data [_ffa +_cbed ]&bm2 .Data [_egdc +_cbed ];
|
|
_gbdc +=tab [_gaef ];};};case _bfff > 0:if _bbadd < _bfac {for _eega =_aeeec ;_eega < _gaf ;_eega ,_ffa ,_egdc =_eega +1,_ffa +bm1 .RowStride ,_egdc +bm2 .RowStride {_fbd ,_fbbc =bm1 .Data [_ffa ],bm2 .Data [_egdc ]>>uint (_bfff );_gaef =_fbd &_fbbc ;_gbdc +=tab [_gaef ];
|
|
for _cbed =1;_cbed < _bbadd ;_cbed ++{_fbd ,_fbbc =bm1 .Data [_ffa +_cbed ],(bm2 .Data [_egdc +_cbed ]>>uint (_bfff ))|(bm2 .Data [_egdc +_cbed -1]<<uint (8-_bfff ));_gaef =_fbd &_fbbc ;_gbdc +=tab [_gaef ];};_fbd =bm1 .Data [_ffa +_cbed ];_fbbc =bm2 .Data [_egdc +_cbed -1]<<uint (8-_bfff );
|
|
_gaef =_fbd &_fbbc ;_gbdc +=tab [_gaef ];};}else {for _eega =_aeeec ;_eega < _gaf ;_eega ,_ffa ,_egdc =_eega +1,_ffa +bm1 .RowStride ,_egdc +bm2 .RowStride {_fbd ,_fbbc =bm1 .Data [_ffa ],bm2 .Data [_egdc ]>>uint (_bfff );_gaef =_fbd &_fbbc ;_gbdc +=tab [_gaef ];
|
|
for _cbed =1;_cbed < _bfac ;_cbed ++{_fbd =bm1 .Data [_ffa +_cbed ];_fbbc =(bm2 .Data [_egdc +_cbed ]>>uint (_bfff ))|(bm2 .Data [_egdc +_cbed -1]<<uint (8-_bfff ));_gaef =_fbd &_fbbc ;_gbdc +=tab [_gaef ];};};};default:if _bfac < _bbadd {for _eega =_aeeec ;
|
|
_eega < _gaf ;_eega ,_ffa ,_egdc =_eega +1,_ffa +bm1 .RowStride ,_egdc +bm2 .RowStride {for _cbed =0;_cbed < _bfac ;_cbed ++{_fbd =bm1 .Data [_ffa +_cbed ];_fbbc =bm2 .Data [_egdc +_cbed ]<<uint (-_bfff );_fbbc |=bm2 .Data [_egdc +_cbed +1]>>uint (8+_bfff );
|
|
_gaef =_fbd &_fbbc ;_gbdc +=tab [_gaef ];};};}else {for _eega =_aeeec ;_eega < _gaf ;_eega ,_ffa ,_egdc =_eega +1,_ffa +bm1 .RowStride ,_egdc +bm2 .RowStride {for _cbed =0;_cbed < _bfac -1;_cbed ++{_fbd =bm1 .Data [_ffa +_cbed ];_fbbc =bm2 .Data [_egdc +_cbed ]<<uint (-_bfff );
|
|
_fbbc |=bm2 .Data [_egdc +_cbed +1]>>uint (8+_bfff );_gaef =_fbd &_fbbc ;_gbdc +=tab [_gaef ];};_fbd =bm1 .Data [_ffa +_cbed ];_fbbc =bm2 .Data [_egdc +_cbed ]<<uint (-_bfff );_gaef =_fbd &_fbbc ;_gbdc +=tab [_gaef ];};};};_eced =float64 (_gbdc )*float64 (_gbdc )/(float64 (area1 )*float64 (area2 ));
|
|
return _eced ,nil ;};func _bedeb (_bgcae ,_gccef *Bitmap ,_aebe *Selection )(*Bitmap ,error ){const _ggac ="\u006f\u0070\u0065\u006e";var _dgbac error ;_bgcae ,_dgbac =_fbcc (_bgcae ,_gccef ,_aebe );if _dgbac !=nil {return nil ,_c .Wrap (_dgbac ,_ggac ,"");
|
|
};_dcadf ,_dgbac :=_ggfa (nil ,_gccef ,_aebe );if _dgbac !=nil {return nil ,_c .Wrap (_dgbac ,_ggac ,"");};_ ,_dgbac =_cggff (_bgcae ,_dcadf ,_aebe );if _dgbac !=nil {return nil ,_c .Wrap (_dgbac ,_ggac ,"");};return _bgcae ,nil ;};func (_aage *Bitmap )GetByte (index int )(byte ,error ){if index > len (_aage .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 _aage .Data [index ],nil ;};func _deag (_addc ,_fbdd *Bitmap ,_abcag ,_bbed int )(*Bitmap ,error ){const _bbbc ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _fbdd ==nil {return nil ,_c .Error (_bbbc ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
|
|
};if _abcag < 1||_bbed < 1{return nil ,_c .Error (_bbbc ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _abcag ==1&&_bbed ==1{return _edfg (_addc ,_fbdd );};
|
|
if MorphBC ==SymmetricMorphBC {_gcdf ,_deec :=_bcde (_addc ,_fbdd ,_abcag ,_bbed );if _deec !=nil {return nil ,_c .Wrap (_deec ,_bbbc ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _gcdf ,nil ;};_bggfe :=_edec (_abcag /2,_bbed /2);
|
|
_bdcc :=8*((_bggfe +7)/8);_fdcg ,_ead :=_fbdd .AddBorder (_bdcc ,0);if _ead !=nil {return nil ,_c .Wrapf (_ead ,_bbbc ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_bdcc );};var _gbag ,_fgebe *Bitmap ;if _abcag ==1||_bbed ==1{_ecadd :=SelCreateBrick (_bbed ,_abcag ,_bbed /2,_abcag /2,SelHit );
|
|
_gbag ,_ead =_fffge (nil ,_fdcg ,_ecadd );if _ead !=nil {return nil ,_c .Wrap (_ead ,_bbbc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_gdcc :=SelCreateBrick (1,_abcag ,0,_abcag /2,SelHit );
|
|
_egfb ,_edee :=_cggff (nil ,_fdcg ,_gdcc );if _edee !=nil {return nil ,_c .Wrap (_edee ,_bbbc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_bgaa :=SelCreateBrick (_bbed ,1,_bbed /2,0,SelHit );
|
|
_gbag ,_edee =_cggff (nil ,_egfb ,_bgaa );if _edee !=nil {return nil ,_c .Wrap (_edee ,_bbbc ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_edee =_ggfa (_egfb ,_gbag ,_gdcc );
|
|
_edee !=nil {return nil ,_c .Wrap (_edee ,_bbbc ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_edee =_ggfa (_gbag ,_egfb ,_bgaa );_edee !=nil {return nil ,_c .Wrap (_edee ,_bbbc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
|
|
};};if _fgebe ,_ead =_gbag .RemoveBorder (_bdcc );_ead !=nil {return nil ,_c .Wrap (_ead ,_bbbc ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _addc ==nil {return _fgebe ,nil ;};if _ ,_ead =_edfg (_addc ,_fgebe );_ead !=nil {return nil ,_ead ;};return _addc ,nil ;
|
|
};func (_bddc *Bitmaps )SortByWidth (){_bbcc :=(*byWidth )(_bddc );_f .Sort (_bbcc )};var _gedf [256]uint8 ;func (_acd *Bitmap )SetByte (index int ,v byte )error {if index > len (_acd .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 );
|
|
};_acd .Data [index ]=v ;return nil ;};func (_bgbe *Bitmap )ClipRectangle (box *_cd .Rectangle )(_gea *Bitmap ,_age *_cd .Rectangle ,_dcdg error ){const _affa ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_c .Error (_affa ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
|
|
};_aabb ,_caae :=_bgbe .Width ,_bgbe .Height ;_cgd :=_cd .Rect (0,0,_aabb ,_caae );if !box .Overlaps (_cgd ){return nil ,nil ,_c .Error (_affa ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_fcd :=box .Intersect (_cgd );
|
|
_gcef ,_bfaf :=_fcd .Min .X ,_fcd .Min .Y ;_cag ,_cbg :=_fcd .Dx (),_fcd .Dy ();_gea =New (_cag ,_cbg );_gea .Text =_bgbe .Text ;if _dcdg =_gea .RasterOperation (0,0,_cag ,_cbg ,PixSrc ,_bgbe ,_gcef ,_bfaf );_dcdg !=nil {return nil ,nil ,_c .Wrap (_dcdg ,_affa ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
|
|
};_age =&_fcd ;return _gea ,_age ,nil ;};func _baba (_efgc ,_egba *Bitmap ,_aag int ,_gbde []byte ,_dff int )(_becc error ){const _dge ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";
|
|
var (_egbf ,_dec ,_gdge ,_gfb ,_cffd ,_caa ,_fff ,_fgee int ;_fae ,_fac uint32 ;_fag ,_bcg byte ;_aagb uint16 ;);_bba :=make ([]byte ,4);_aefaa :=make ([]byte ,4);for _gdge =0;_gdge < _efgc .Height -1;_gdge ,_gfb =_gdge +2,_gfb +1{_egbf =_gdge *_efgc .RowStride ;
|
|
_dec =_gfb *_egba .RowStride ;for _cffd ,_caa =0,0;_cffd < _dff ;_cffd ,_caa =_cffd +4,_caa +1{for _fff =0;_fff < 4;_fff ++{_fgee =_egbf +_cffd +_fff ;if _fgee <=len (_efgc .Data )-1&&_fgee < _egbf +_efgc .RowStride {_bba [_fff ]=_efgc .Data [_fgee ];}else {_bba [_fff ]=0x00;
|
|
};_fgee =_egbf +_efgc .RowStride +_cffd +_fff ;if _fgee <=len (_efgc .Data )-1&&_fgee < _egbf +(2*_efgc .RowStride ){_aefaa [_fff ]=_efgc .Data [_fgee ];}else {_aefaa [_fff ]=0x00;};};_fae =_g .BigEndian .Uint32 (_bba );_fac =_g .BigEndian .Uint32 (_aefaa );
|
|
_fac &=_fae ;_fac &=_fac <<1;_fac &=0xaaaaaaaa;_fae =_fac |(_fac <<7);_fag =byte (_fae >>24);_bcg =byte ((_fae >>8)&0xff);_fgee =_dec +_caa ;if _fgee +1==len (_egba .Data )-1||_fgee +1>=_dec +_egba .RowStride {_egba .Data [_fgee ]=_gbde [_fag ];if _becc =_egba .SetByte (_fgee ,_gbde [_fag ]);
|
|
_becc !=nil {return _c .Wrapf (_becc ,_dge ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_fgee );};}else {_aagb =(uint16 (_gbde [_fag ])<<8)|uint16 (_gbde [_bcg ]);if _becc =_egba .setTwoBytes (_fgee ,_aagb );_becc !=nil {return _c .Wrapf (_becc ,_dge ,"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",_fgee );
|
|
};_caa ++;};};};return nil ;};func (_gee *Bitmap )resizeImageData (_cfga *Bitmap )error {if _cfga ==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 _gee .SizesEqual (_cfga ){return nil ;};_gee .Data =make ([]byte ,len (_cfga .Data ));_gee .Width =_cfga .Width ;_gee .Height =_cfga .Height ;_gee .RowStride =_cfga .RowStride ;return nil ;};func (_bff *Bitmap )SetDefaultPixel (){for _adf :=range _bff .Data {_bff .Data [_adf ]=byte (0xff);
|
|
};};func _fd (_bd ,_eg *Bitmap )(_bfa error ){const _fg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_af :=_eg .RowStride ;_ff :=_bd .RowStride ;_gg :=_eg .RowStride *4-_bd .RowStride ;var (_ea ,_dfb byte ;
|
|
_fdc uint32 ;_gc ,_ac ,_bc ,_dd ,_ba ,_cfg ,_gef int ;);for _bc =0;_bc < _eg .Height ;_bc ++{_gc =_bc *_af ;_ac =4*_bc *_ff ;for _dd =0;_dd < _af ;_dd ++{_ea =_eg .Data [_gc +_dd ];_fdc =_ccge [_ea ];_cfg =_ac +_dd *4;if _gg !=0&&(_dd +1)*4> _bd .RowStride {for _ba =_gg ;
|
|
_ba > 0;_ba --{_dfb =byte ((_fdc >>uint (_ba *8))&0xff);_gef =_cfg +(_gg -_ba );if _bfa =_bd .SetByte (_gef ,_dfb );_bfa !=nil {return _c .Wrapf (_bfa ,_fg ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_ba );
|
|
};};}else if _bfa =_bd .setFourBytes (_cfg ,_fdc );_bfa !=nil {return _c .Wrap (_bfa ,_fg ,"");};if _bfa =_bd .setFourBytes (_ac +_dd *4,_ccge [_eg .Data [_gc +_dd ]]);_bfa !=nil {return _c .Wrap (_bfa ,_fg ,"");};};for _ba =1;_ba < 4;_ba ++{for _dd =0;
|
|
_dd < _ff ;_dd ++{if _bfa =_bd .SetByte (_ac +_ba *_ff +_dd ,_bd .Data [_ac +_dd ]);_bfa !=nil {return _c .Wrapf (_bfa ,_fg ,"\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",_ba ,_dd );
|
|
};};};};return nil ;};func _cfc ()(_gfe [256]uint64 ){for _dcd :=0;_dcd < 256;_dcd ++{if _dcd &0x01!=0{_gfe [_dcd ]|=0xff;};if _dcd &0x02!=0{_gfe [_dcd ]|=0xff00;};if _dcd &0x04!=0{_gfe [_dcd ]|=0xff0000;};if _dcd &0x08!=0{_gfe [_dcd ]|=0xff000000;};if _dcd &0x10!=0{_gfe [_dcd ]|=0xff00000000;
|
|
};if _dcd &0x20!=0{_gfe [_dcd ]|=0xff0000000000;};if _dcd &0x40!=0{_gfe [_dcd ]|=0xff000000000000;};if _dcd &0x80!=0{_gfe [_dcd ]|=0xff00000000000000;};};return _gfe ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;
|
|
SizeSelectByArea ;SizeSelectByPerimeter ;);func (_affbc *ClassedPoints )SortByY (){_affbc ._gbbd =_affbc .ySortFunction ();_f .Sort (_affbc )};func _ggfa (_aeef ,_dfda *Bitmap ,_abde *Selection )(*Bitmap ,error ){const _dccg ="\u0065\u0072\u006fd\u0065";
|
|
var (_caggg error ;_aecd *Bitmap ;);_aeef ,_caggg =_ddff (_aeef ,_dfda ,_abde ,&_aecd );if _caggg !=nil {return nil ,_c .Wrap (_caggg ,_dccg ,"");};if _caggg =_aeef .setAll ();_caggg !=nil {return nil ,_c .Wrap (_caggg ,_dccg ,"");};var _cfff SelectionValue ;
|
|
for _fgb :=0;_fgb < _abde .Height ;_fgb ++{for _eed :=0;_eed < _abde .Width ;_eed ++{_cfff =_abde .Data [_fgb ][_eed ];if _cfff ==SelHit {_caggg =_befa (_aeef ,_abde .Cx -_eed ,_abde .Cy -_fgb ,_dfda .Width ,_dfda .Height ,PixSrcAndDst ,_aecd ,0,0);if _caggg !=nil {return nil ,_c .Wrap (_caggg ,_dccg ,"");
|
|
};};};};if MorphBC ==SymmetricMorphBC {return _aeef ,nil ;};_afd ,_dcef ,_becg ,_egdcb :=_abde .findMaxTranslations ();if _afd > 0{if _caggg =_aeef .RasterOperation (0,0,_afd ,_dfda .Height ,PixClr ,nil ,0,0);_caggg !=nil {return nil ,_c .Wrap (_caggg ,_dccg ,"\u0078\u0070\u0020\u003e\u0020\u0030");
|
|
};};if _becg > 0{if _caggg =_aeef .RasterOperation (_dfda .Width -_becg ,0,_becg ,_dfda .Height ,PixClr ,nil ,0,0);_caggg !=nil {return nil ,_c .Wrap (_caggg ,_dccg ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _dcef > 0{if _caggg =_aeef .RasterOperation (0,0,_dfda .Width ,_dcef ,PixClr ,nil ,0,0);
|
|
_caggg !=nil {return nil ,_c .Wrap (_caggg ,_dccg ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _egdcb > 0{if _caggg =_aeef .RasterOperation (0,_dfda .Height -_egdcb ,_dfda .Width ,_egdcb ,PixClr ,nil ,0,0);_caggg !=nil {return nil ,_c .Wrap (_caggg ,_dccg ,"\u0079\u006e\u0020\u003e\u0020\u0030");
|
|
};};return _aeef ,nil ;};func (_fee *Bitmap )CountPixels ()int {return _fee .countPixels ()};func (_gefe *Boxes )Get (i int )(*_cd .Rectangle ,error ){const _ebfg ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _gefe ==nil {return nil ,_c .Error (_ebfg ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if i > len (*_gefe )-1{return nil ,_c .Errorf (_ebfg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_gefe )[i ],nil ;}; |