unipdf/internal/imageutil/imageutil.go
2022-06-06 22:48:24 +00:00

402 lines
114 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 imageutil ;import (_ca "encoding/binary";_d "errors";_ff "fmt";_cb "github.com/unidoc/unipdf/v3/common";_fe "github.com/unidoc/unipdf/v3/internal/bitwise";_e "image";_f "image/color";_fd "image/draw";_a "math";);func _edcf (_becfc Gray ,_gbge NRGBA ,_bceef _e .Rectangle ){for _ebgc :=0;
_ebgc < _bceef .Max .X ;_ebgc ++{for _bfbgc :=0;_bfbgc < _bceef .Max .Y ;_bfbgc ++{_ddage :=_becfc .GrayAt (_ebgc ,_bfbgc );_gbge .SetNRGBA (_ebgc ,_bfbgc ,_fca (_ddage ));};};};func (_gegc *RGBA32 )RGBAAt (x ,y int )_f .RGBA {_ffeb ,_ :=ColorAtRGBA32 (x ,y ,_gegc .Width ,_gegc .Data ,_gegc .Alpha ,_gegc .Decode );
return _ffeb ;};func _afdb (_ggae *_e .Gray16 ,_gdccd uint8 )*_e .Gray {_egbda :=_ggae .Bounds ();_cdee :=_e .NewGray (_egbda );for _abdce :=0;_abdce < _egbda .Dx ();_abdce ++{for _cebb :=0;_cebb < _egbda .Dy ();_cebb ++{_fcda :=_ggae .Gray16At (_abdce ,_cebb );
_cdee .SetGray (_abdce ,_cebb ,_f .Gray {Y :_cbdc (uint8 (_fcda .Y /256),_gdccd )});};};return _cdee ;};func (_cgcc *Gray4 )At (x ,y int )_f .Color {_febf ,_ :=_cgcc .ColorAt (x ,y );return _febf };func (_dddc *Gray8 )ColorAt (x ,y int )(_f .Color ,error ){return ColorAtGray8BPC (x ,y ,_dddc .BytesPerLine ,_dddc .Data ,_dddc .Decode );
};func (_cfaa *NRGBA16 )setNRGBA (_fgggb ,_fdabg ,_gacca int ,_eeggb _f .NRGBA ){if _fgggb *3%2==0{_cfaa .Data [_gacca ]=(_eeggb .R >>4)<<4|(_eeggb .G >>4);_cfaa .Data [_gacca +1]=(_eeggb .B >>4)<<4|(_cfaa .Data [_gacca +1]&0xf);}else {_cfaa .Data [_gacca ]=(_cfaa .Data [_gacca ]&0xf0)|(_eeggb .R >>4);
_cfaa .Data [_gacca +1]=(_eeggb .G >>4)<<4|(_eeggb .B >>4);};if _cfaa .Alpha !=nil {_fgba :=_fdabg *BytesPerLine (_cfaa .Width ,4,1);if _fgba < len (_cfaa .Alpha ){if _fgggb %2==0{_cfaa .Alpha [_fgba ]=(_eeggb .A >>uint (4))<<uint (4)|(_cfaa .Alpha [_gacca ]&0xf);
}else {_cfaa .Alpha [_fgba ]=(_cfaa .Alpha [_fgba ]&0xf0)|(_eeggb .A >>uint (4));};};};};func _edcd (_becf int ,_gffb int )int {if _becf < _gffb {return _becf ;};return _gffb ;};func _ffc (_bce ,_cfg *Monochrome ,_dd []byte ,_agg int )(_df error ){var (_cbe ,_aed ,_cad ,_afgf ,_daf ,_bfca ,_degd ,_eec int ;
_bd ,_dgd uint32 ;_aac ,_ebd byte ;_gaa uint16 ;);_ecf :=make ([]byte ,4);_ede :=make ([]byte ,4);for _cad =0;_cad < _bce .Height -1;_cad ,_afgf =_cad +2,_afgf +1{_cbe =_cad *_bce .BytesPerLine ;_aed =_afgf *_cfg .BytesPerLine ;for _daf ,_bfca =0,0;_daf < _agg ;
_daf ,_bfca =_daf +4,_bfca +1{for _degd =0;_degd < 4;_degd ++{_eec =_cbe +_daf +_degd ;if _eec <=len (_bce .Data )-1&&_eec < _cbe +_bce .BytesPerLine {_ecf [_degd ]=_bce .Data [_eec ];}else {_ecf [_degd ]=0x00;};_eec =_cbe +_bce .BytesPerLine +_daf +_degd ;
if _eec <=len (_bce .Data )-1&&_eec < _cbe +(2*_bce .BytesPerLine ){_ede [_degd ]=_bce .Data [_eec ];}else {_ede [_degd ]=0x00;};};_bd =_ca .BigEndian .Uint32 (_ecf );_dgd =_ca .BigEndian .Uint32 (_ede );_dgd |=_bd ;_dgd |=_dgd <<1;_dgd &=0xaaaaaaaa;_bd =_dgd |(_dgd <<7);
_aac =byte (_bd >>24);_ebd =byte ((_bd >>8)&0xff);_eec =_aed +_bfca ;if _eec +1==len (_cfg .Data )-1||_eec +1>=_aed +_cfg .BytesPerLine {_cfg .Data [_eec ]=_dd [_aac ];}else {_gaa =(uint16 (_dd [_aac ])<<8)|uint16 (_dd [_ebd ]);if _df =_cfg .setTwoBytes (_eec ,_gaa );
_df !=nil {return _ff .Errorf ("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",_eec );};_bfca ++;};};};return nil ;
};func (_gadgb *NRGBA16 )Set (x ,y int ,c _f .Color ){_bagc :=y *_gadgb .BytesPerLine +x *3/2;if _bagc +1>=len (_gadgb .Data ){return ;};_gfaa :=NRGBA16Model .Convert (c ).(_f .NRGBA );_gadgb .setNRGBA (x ,y ,_bagc ,_gfaa );};var (MonochromeConverter =ConverterFunc (_gcge );
Gray2Converter =ConverterFunc (_efab );Gray4Converter =ConverterFunc (_bbd );GrayConverter =ConverterFunc (_deag );Gray16Converter =ConverterFunc (_affff );NRGBA16Converter =ConverterFunc (_bgbf );NRGBAConverter =ConverterFunc (_adac );NRGBA64Converter =ConverterFunc (_cgad );
RGBAConverter =ConverterFunc (_debg );CMYKConverter =ConverterFunc (_fgg ););var _ _e .Image =&NRGBA32 {};type RGBA32 struct{ImageBase };func (_dgad *Gray16 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_dgad .Width ,Y :_dgad .Height }};
};func _fde ()(_fdcg []byte ){_fdcg =make ([]byte ,256);for _ccg :=0;_ccg < 256;_ccg ++{_abcc :=byte (_ccg );_fdcg [_abcc ]=(_abcc &0x01)|((_abcc &0x04)>>1)|((_abcc &0x10)>>2)|((_abcc &0x40)>>3)|((_abcc &0x02)<<3)|((_abcc &0x08)<<2)|((_abcc &0x20)<<1)|(_abcc &0x80);
};return _fdcg ;};var _ Image =&Gray2 {};func (_agcg *NRGBA16 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_agcg .Width ,Y :_agcg .Height }};};func LinearInterpolate (x ,xmin ,xmax ,ymin ,ymax float64 )float64 {if _a .Abs (xmax -xmin )< 0.000001{return ymin ;
};_gbbe :=ymin +(x -xmin )*(ymax -ymin )/(xmax -xmin );return _gbbe ;};const (PixSrc RasterOperator =0xc;PixDst RasterOperator =0xa;PixNotSrc RasterOperator =0x3;PixNotDst RasterOperator =0x5;PixClr RasterOperator =0x0;PixSet RasterOperator =0xf;PixSrcOrDst RasterOperator =0xe;
PixSrcAndDst RasterOperator =0x8;PixSrcXorDst RasterOperator =0x6;PixNotSrcOrDst RasterOperator =0xb;PixNotSrcAndDst RasterOperator =0x2;PixSrcOrNotDst RasterOperator =0xd;PixSrcAndNotDst RasterOperator =0x4;PixNotPixSrcOrDst RasterOperator =0x1;PixNotPixSrcAndDst RasterOperator =0x7;
PixNotPixSrcXorDst RasterOperator =0x9;PixPaint =PixSrcOrDst ;PixSubtract =PixNotSrcAndDst ;PixMask =PixSrcAndDst ;);func (_gadg *Monochrome )copy ()*Monochrome {_gbad :=_cegb (_gadg .Width ,_gadg .Height );_gbad .ModelThreshold =_gadg .ModelThreshold ;
_gbad .Data =make ([]byte ,len (_gadg .Data ));copy (_gbad .Data ,_gadg .Data );if len (_gadg .Decode )!=0{_gbad .Decode =make ([]float64 ,len (_gadg .Decode ));copy (_gbad .Decode ,_gadg .Decode );};if len (_gadg .Alpha )!=0{_gbad .Alpha =make ([]byte ,len (_gadg .Alpha ));
copy (_gbad .Alpha ,_gadg .Alpha );};return _gbad ;};func (_cffbg *NRGBA64 )Base ()*ImageBase {return &_cffbg .ImageBase };func ColorAt (x ,y ,width ,bitsPerColor ,colorComponents ,bytesPerLine int ,data ,alpha []byte ,decode []float64 )(_f .Color ,error ){switch colorComponents {case 1:return ColorAtGrayscale (x ,y ,bitsPerColor ,bytesPerLine ,data ,decode );
case 3:return ColorAtNRGBA (x ,y ,width ,bytesPerLine ,bitsPerColor ,data ,alpha ,decode );case 4:return ColorAtCMYK (x ,y ,width ,data ,decode );default:return nil ,_ff .Errorf ("\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0063o\u006c\u006f\u0072\u0020\u0063\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0020\u0066\u006f\u0072\u0020\u0074h\u0065\u0020\u0069\u006d\u0061\u0067\u0065\u003a\u0020\u0025\u0064",colorComponents );
};};var _ Image =&CMYK32 {};func (_bdde *RGBA32 )Set (x ,y int ,c _f .Color ){_badcd :=y *_bdde .Width +x ;_ggba :=3*_badcd ;if _ggba +2>=len (_bdde .Data ){return ;};_eeded :=_f .RGBAModel .Convert (c ).(_f .RGBA );_bdde .setRGBA (_badcd ,_eeded );};func RasterOperation (dest *Monochrome ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Monochrome ,sx ,sy int )error {return _abef (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func _gff ()(_edf [256]uint64 ){for _edfd :=0;_edfd < 256;_edfd ++{if _edfd &0x01!=0{_edf [_edfd ]|=0xff;};if _edfd &0x02!=0{_edf [_edfd ]|=0xff00;};if _edfd &0x04!=0{_edf [_edfd ]|=0xff0000;};if _edfd &0x08!=0{_edf [_edfd ]|=0xff000000;};if _edfd &0x10!=0{_edf [_edfd ]|=0xff00000000;
};if _edfd &0x20!=0{_edf [_edfd ]|=0xff0000000000;};if _edfd &0x40!=0{_edf [_edfd ]|=0xff000000000000;};if _edfd &0x80!=0{_edf [_edfd ]|=0xff00000000000000;};};return _edf ;};type NRGBA64 struct{ImageBase };type NRGBA interface{NRGBAAt (_cgga ,_gbbb int )_f .NRGBA ;
SetNRGBA (_ccag ,_acdg int ,_edef _f .NRGBA );};func (_bbbc *RGBA32 )At (x ,y int )_f .Color {_affb ,_ :=_bbbc .ColorAt (x ,y );return _affb };var _ Gray =&Gray8 {};func _cea (_fdg _f .NRGBA )_f .Gray {_ebcf ,_cgd ,_fadb ,_ :=_fdg .RGBA ();_aggb :=(19595*_ebcf +38470*_cgd +7471*_fadb +1<<15)>>24;
return _f .Gray {Y :uint8 (_aggb )};};func _efab (_cbd _e .Image )(Image ,error ){if _cbbb ,_fcgg :=_cbd .(*Gray2 );_fcgg {return _cbbb .Copy (),nil ;};_aegc :=_cbd .Bounds ();_ffce ,_bdf :=NewImage (_aegc .Max .X ,_aegc .Max .Y ,2,1,nil ,nil ,nil );if _bdf !=nil {return nil ,_bdf ;
};_cfeda (_cbd ,_ffce ,_aegc );return _ffce ,nil ;};var (_eb =_aff ();_gcf =_cda ();_eagb =_gff (););var _bdfe [256]uint8 ;func ColorAtNRGBA16 (x ,y ,width ,bytesPerLine int ,data ,alpha []byte ,decode []float64 )(_f .NRGBA ,error ){_efcc :=y *bytesPerLine +x *3/2;
if _efcc +1>=len (data ){return _f .NRGBA {},_eaee (x ,y );};const (_aagf =0xf;_egef =uint8 (0xff););_bdgb :=_egef ;if alpha !=nil {_eedd :=y *BytesPerLine (width ,4,1);if _eedd < len (alpha ){if x %2==0{_bdgb =(alpha [_eedd ]>>uint (4))&_aagf ;}else {_bdgb =alpha [_eedd ]&_aagf ;
};_bdgb |=_bdgb <<4;};};var _bafc ,_dddcd ,_ebcb uint8 ;if x *3%2==0{_bafc =(data [_efcc ]>>uint (4))&_aagf ;_dddcd =data [_efcc ]&_aagf ;_ebcb =(data [_efcc +1]>>uint (4))&_aagf ;}else {_bafc =data [_efcc ]&_aagf ;_dddcd =(data [_efcc +1]>>uint (4))&_aagf ;
_ebcb =data [_efcc +1]&_aagf ;};if len (decode )==6{_bafc =uint8 (uint32 (LinearInterpolate (float64 (_bafc ),0,15,decode [0],decode [1]))&0xf);_dddcd =uint8 (uint32 (LinearInterpolate (float64 (_dddcd ),0,15,decode [2],decode [3]))&0xf);_ebcb =uint8 (uint32 (LinearInterpolate (float64 (_ebcb ),0,15,decode [4],decode [5]))&0xf);
};return _f .NRGBA {R :(_bafc <<4)|(_bafc &0xf),G :(_dddcd <<4)|(_dddcd &0xf),B :(_ebcb <<4)|(_ebcb &0xf),A :_bdgb },nil ;};func _eagbb (_cdbe *Monochrome ,_gfd int ,_ced []byte )(_bcbd *Monochrome ,_aebb error ){const _abfg ="\u0072\u0065d\u0075\u0063\u0065R\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079";
if _cdbe ==nil {return nil ,_d .New ("\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _gfd < 1||_gfd > 4{return nil ,_d .New ("\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 _cdbe .Height <=1{return nil ,_d .New ("\u0073\u006f\u0075rc\u0065\u0020\u0068\u0065\u0069\u0067\u0068\u0074\u0020m\u0075s\u0074 \u0062e\u0020\u0061\u0074\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0027\u0032\u0027");};_bcbd =_cegb (_cdbe .Width /2,_cdbe .Height /2);
if _ced ==nil {_ced =_fde ();};_cef :=_edcd (_cdbe .BytesPerLine ,2*_bcbd .BytesPerLine );switch _gfd {case 1:_aebb =_ffc (_cdbe ,_bcbd ,_ced ,_cef );case 2:_aebb =_bcbc (_cdbe ,_bcbd ,_ced ,_cef );case 3:_aebb =_cfe (_cdbe ,_bcbd ,_ced ,_cef );case 4:_aebb =_debf (_cdbe ,_bcbd ,_ced ,_cef );
};if _aebb !=nil {return nil ,_aebb ;};return _bcbd ,nil ;};func IsGrayImgBlackAndWhite (i *_e .Gray )bool {return _gddbe (i )};func (_gbdg *Gray8 )SetGray (x ,y int ,g _f .Gray ){_ddaa :=y *_gbdg .BytesPerLine +x ;if _ddaa > len (_gbdg .Data )-1{return ;
};_gbdg .Data [_ddaa ]=g .Y ;};func (_bcebf *Monochrome )ScaleLow (width ,height int )(*Monochrome ,error ){if width < 0||height < 0{return nil ,_d .New ("\u0070\u0072\u006f\u0076\u0069\u0064e\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0077\u0069\u0064t\u0068\u0020\u0061\u006e\u0064\u0020\u0068e\u0069\u0067\u0068\u0074");
};_bgb :=_cegb (width ,height );_aadf :=make ([]int ,height );_bfe :=make ([]int ,width );_fagc :=float64 (_bcebf .Width )/float64 (width );_fge :=float64 (_bcebf .Height )/float64 (height );for _beeb :=0;_beeb < height ;_beeb ++{_aadf [_beeb ]=int (_a .Min (_fge *float64 (_beeb )+0.5,float64 (_bcebf .Height -1)));
};for _dbb :=0;_dbb < width ;_dbb ++{_bfe [_dbb ]=int (_a .Min (_fagc *float64 (_dbb )+0.5,float64 (_bcebf .Width -1)));};_bdd :=-1;_cfed :=byte (0);for _agfc :=0;_agfc < height ;_agfc ++{_bddb :=_aadf [_agfc ]*_bcebf .BytesPerLine ;_dda :=_agfc *_bgb .BytesPerLine ;
for _bfbg :=0;_bfbg < width ;_bfbg ++{_edfae :=_bfe [_bfbg ];if _edfae !=_bdd {_cfed =_bcebf .getBit (_bddb ,_edfae );if _cfed !=0{_bgb .setBit (_dda ,_bfbg );};_bdd =_edfae ;}else {if _cfed !=0{_bgb .setBit (_dda ,_bfbg );};};};};return _bgb ,nil ;};func _bba (_fgad _f .Gray )_f .CMYK {return _f .CMYK {K :0xff-_fgad .Y }};
func (_ggeg *NRGBA32 )Copy ()Image {return &NRGBA32 {ImageBase :_ggeg .copy ()}};func _geb (_aee _f .CMYK )_f .Gray {_ccgc ,_gge ,_gce :=_f .CMYKToRGB (_aee .C ,_aee .M ,_aee .Y ,_aee .K );_gdd :=(19595*uint32 (_ccgc )+38470*uint32 (_gge )+7471*uint32 (_gce )+1<<7)>>16;
return _f .Gray {Y :uint8 (_gdd )};};type Histogramer interface{Histogram ()[256]int ;};func (_gcggd *Gray2 )Copy ()Image {return &Gray2 {ImageBase :_gcggd .copy ()}};func _bbd (_afdc _e .Image )(Image ,error ){if _fda ,_dge :=_afdc .(*Gray4 );_dge {return _fda .Copy (),nil ;
};_bgd :=_afdc .Bounds ();_bega ,_bae :=NewImage (_bgd .Max .X ,_bgd .Max .Y ,4,1,nil ,nil ,nil );if _bae !=nil {return nil ,_bae ;};_cfeda (_afdc ,_bega ,_bgd );return _bega ,nil ;};func (_gfff *NRGBA32 )SetNRGBA (x ,y int ,c _f .NRGBA ){_ddea :=y *_gfff .Width +x ;
_gfdf :=3*_ddea ;if _gfdf +2>=len (_gfff .Data ){return ;};_gfff .setRGBA (_ddea ,c );};var _ Image =&RGBA32 {};func (_ffcdg *Monochrome )Validate ()error {if len (_ffcdg .Data )!=_ffcdg .Height *_ffcdg .BytesPerLine {return ErrInvalidImage ;};return nil ;
};func _cgac (_gfgb _f .Gray )_f .Gray {_affa :=_gfgb .Y >>6;_affa |=_affa <<2;_gfgb .Y =_affa |_affa <<4;return _gfgb ;};func (_edd *Gray8 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_edd .Width ,Y :_edd .Height }};};func (_ecc *Gray4 )Histogram ()(_cege [256]int ){for _gacc :=0;
_gacc < _ecc .Width ;_gacc ++{for _deca :=0;_deca < _ecc .Height ;_deca ++{_cege [_ecc .GrayAt (_gacc ,_deca ).Y ]++;};};return _cege ;};func (_dfd *ImageBase )MakeAlpha (){_dfd .newAlpha ()};func _adac (_bcfg _e .Image )(Image ,error ){if _gcab ,_gffec :=_bcfg .(*NRGBA32 );
_gffec {return _gcab .Copy (),nil ;};_dfab ,_gbab ,_fegb :=_ffbg (_bcfg ,1);_gfbag ,_agbg :=NewImage (_dfab .Max .X ,_dfab .Max .Y ,8,3,nil ,_fegb ,nil );if _agbg !=nil {return nil ,_agbg ;};_adff (_bcfg ,_gfbag ,_dfab );if len (_fegb )!=0&&!_gbab {if _ccga :=_acb (_fegb ,_gfbag );
_ccga !=nil {return nil ,_ccga ;};};return _gfbag ,nil ;};type RasterOperator int ;func (_bab *Monochrome )Copy ()Image {return &Monochrome {ImageBase :_bab .ImageBase .copy (),ModelThreshold :_bab .ModelThreshold };};func (_gbcfg *Gray4 )setGray (_cdgf int ,_fbdd int ,_aagaa _f .Gray ){_cdfe :=_fbdd *_gbcfg .BytesPerLine ;
_bcg :=_cdfe +(_cdgf >>1);if _bcg >=len (_gbcfg .Data ){return ;};_aeac :=_aagaa .Y >>4;_gbcfg .Data [_bcg ]=(_gbcfg .Data [_bcg ]&(^(0xf0>>uint (4*(_cdgf &1)))))|(_aeac <<uint (4-4*(_cdgf &1)));};type monochromeThresholdConverter struct{Threshold uint8 ;
};var _ RGBA =&RGBA32 {};func (_edfb *NRGBA32 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_edfb .Width ,Y :_edfb .Height }};};func (_dgcc *NRGBA16 )Base ()*ImageBase {return &_dgcc .ImageBase };func _affff (_caca _e .Image )(Image ,error ){if _gfag ,_ffdb :=_caca .(*Gray16 );
_ffdb {return _gfag .Copy (),nil ;};_defae :=_caca .Bounds ();_fdba ,_gdaad :=NewImage (_defae .Max .X ,_defae .Max .Y ,16,1,nil ,nil ,nil );if _gdaad !=nil {return nil ,_gdaad ;};_cfeda (_caca ,_fdba ,_defae );return _fdba ,nil ;};func _bcbc (_fbc ,_abdc *Monochrome ,_dce []byte ,_fab int )(_fdb error ){var (_cbca ,_cfb ,_ffb ,_aaf ,_bfg ,_fbg ,_efg ,_ddb int ;
_cgg ,_cff ,_acfd ,_ffcd uint32 ;_efbc ,_bcc byte ;_egf uint16 ;);_fgf :=make ([]byte ,4);_ebg :=make ([]byte ,4);for _ffb =0;_ffb < _fbc .Height -1;_ffb ,_aaf =_ffb +2,_aaf +1{_cbca =_ffb *_fbc .BytesPerLine ;_cfb =_aaf *_abdc .BytesPerLine ;for _bfg ,_fbg =0,0;
_bfg < _fab ;_bfg ,_fbg =_bfg +4,_fbg +1{for _efg =0;_efg < 4;_efg ++{_ddb =_cbca +_bfg +_efg ;if _ddb <=len (_fbc .Data )-1&&_ddb < _cbca +_fbc .BytesPerLine {_fgf [_efg ]=_fbc .Data [_ddb ];}else {_fgf [_efg ]=0x00;};_ddb =_cbca +_fbc .BytesPerLine +_bfg +_efg ;
if _ddb <=len (_fbc .Data )-1&&_ddb < _cbca +(2*_fbc .BytesPerLine ){_ebg [_efg ]=_fbc .Data [_ddb ];}else {_ebg [_efg ]=0x00;};};_cgg =_ca .BigEndian .Uint32 (_fgf );_cff =_ca .BigEndian .Uint32 (_ebg );_acfd =_cgg &_cff ;_acfd |=_acfd <<1;_ffcd =_cgg |_cff ;
_ffcd &=_ffcd <<1;_cff =_acfd |_ffcd ;_cff &=0xaaaaaaaa;_cgg =_cff |(_cff <<7);_efbc =byte (_cgg >>24);_bcc =byte ((_cgg >>8)&0xff);_ddb =_cfb +_fbg ;if _ddb +1==len (_abdc .Data )-1||_ddb +1>=_cfb +_abdc .BytesPerLine {if _fdb =_abdc .setByte (_ddb ,_dce [_efbc ]);
_fdb !=nil {return _ff .Errorf ("\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_ddb );};}else {_egf =(uint16 (_dce [_efbc ])<<8)|uint16 (_dce [_bcc ]);if _fdb =_abdc .setTwoBytes (_ddb ,_egf );_fdb !=nil {return _ff .Errorf ("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",_ddb );
};_fbg ++;};};};return nil ;};var _ _e .Image =&Gray2 {};func (_cdga *Monochrome )ColorModel ()_f .Model {return MonochromeModel (_cdga .ModelThreshold )};func (_faddg *RGBA32 )Base ()*ImageBase {return &_faddg .ImageBase };func _feead (_deea *Monochrome ,_acad ,_ddag int ,_acce ,_efbcb int ,_faaaf RasterOperator ){var (_cged bool ;
_eefgd bool ;_edea int ;_efcf int ;_eebb int ;_fgfa int ;_daff bool ;_ada byte ;);_aeca :=8-(_acad &7);_gedf :=_eaeb [_aeca ];_defb :=_deea .BytesPerLine *_ddag +(_acad >>3);if _acce < _aeca {_cged =true ;_gedf &=_dege [8-_aeca +_acce ];};if !_cged {_edea =(_acce -_aeca )>>3;
if _edea !=0{_eefgd =true ;_efcf =_defb +1;};};_eebb =(_acad +_acce )&7;if !(_cged ||_eebb ==0){_daff =true ;_ada =_dege [_eebb ];_fgfa =_defb +1+_edea ;};var _fbde ,_cbgcd int ;switch _faaaf {case PixClr :for _fbde =0;_fbde < _efbcb ;_fbde ++{_deea .Data [_defb ]=_cceac (_deea .Data [_defb ],0x0,_gedf );
_defb +=_deea .BytesPerLine ;};if _eefgd {for _fbde =0;_fbde < _efbcb ;_fbde ++{for _cbgcd =0;_cbgcd < _edea ;_cbgcd ++{_deea .Data [_efcf +_cbgcd ]=0x0;};_efcf +=_deea .BytesPerLine ;};};if _daff {for _fbde =0;_fbde < _efbcb ;_fbde ++{_deea .Data [_fgfa ]=_cceac (_deea .Data [_fgfa ],0x0,_ada );
_fgfa +=_deea .BytesPerLine ;};};case PixSet :for _fbde =0;_fbde < _efbcb ;_fbde ++{_deea .Data [_defb ]=_cceac (_deea .Data [_defb ],0xff,_gedf );_defb +=_deea .BytesPerLine ;};if _eefgd {for _fbde =0;_fbde < _efbcb ;_fbde ++{for _cbgcd =0;_cbgcd < _edea ;
_cbgcd ++{_deea .Data [_efcf +_cbgcd ]=0xff;};_efcf +=_deea .BytesPerLine ;};};if _daff {for _fbde =0;_fbde < _efbcb ;_fbde ++{_deea .Data [_fgfa ]=_cceac (_deea .Data [_fgfa ],0xff,_ada );_fgfa +=_deea .BytesPerLine ;};};case PixNotDst :for _fbde =0;_fbde < _efbcb ;
_fbde ++{_deea .Data [_defb ]=_cceac (_deea .Data [_defb ],^_deea .Data [_defb ],_gedf );_defb +=_deea .BytesPerLine ;};if _eefgd {for _fbde =0;_fbde < _efbcb ;_fbde ++{for _cbgcd =0;_cbgcd < _edea ;_cbgcd ++{_deea .Data [_efcf +_cbgcd ]=^(_deea .Data [_efcf +_cbgcd ]);
};_efcf +=_deea .BytesPerLine ;};};if _daff {for _fbde =0;_fbde < _efbcb ;_fbde ++{_deea .Data [_fgfa ]=_cceac (_deea .Data [_fgfa ],^_deea .Data [_fgfa ],_ada );_fgfa +=_deea .BytesPerLine ;};};};};func (_eefg *Gray4 )Copy ()Image {return &Gray4 {ImageBase :_eefg .copy ()}};
func (_aeae *Monochrome )ResolveDecode ()error {if len (_aeae .Decode )!=2{return nil ;};if _aeae .Decode [0]==1&&_aeae .Decode [1]==0{if _egce :=_aeae .InverseData ();_egce !=nil {return _egce ;};_aeae .Decode =nil ;};return nil ;};func (_fgec *Gray16 )GrayAt (x ,y int )_f .Gray {_fcbc ,_ :=_fgec .ColorAt (x ,y );
return _f .Gray {Y :uint8 (_fcbc .(_f .Gray16 ).Y >>8)};};type monochromeModel uint8 ;func init (){_aecd ()};func (_cfbc *Gray4 )SetGray (x ,y int ,g _f .Gray ){if x >=_cfbc .Width ||y >=_cfbc .Height {return ;};g =_cffe (g );_cfbc .setGray (x ,y ,g );
};var _ Gray =&Gray4 {};func (_adf *Gray2 )Set (x ,y int ,c _f .Color ){if x >=_adf .Width ||y >=_adf .Height {return ;};_eca :=Gray2Model .Convert (c ).(_f .Gray );_aead :=y *_adf .BytesPerLine ;_fabc :=_aead +(x >>2);_fagb :=_eca .Y >>6;_adf .Data [_fabc ]=(_adf .Data [_fabc ]&(^(0xc0>>uint (2*((x )&3)))))|(_fagb <<uint (6-2*(x &3)));
};func (_ddf *Gray2 )At (x ,y int )_f .Color {_defa ,_ :=_ddf .ColorAt (x ,y );return _defa };func (_ege *Gray8 )GrayAt (x ,y int )_f .Gray {_bacf ,_ :=ColorAtGray8BPC (x ,y ,_ege .BytesPerLine ,_ege .Data ,_ege .Decode );return _bacf ;};func _baceg (_efae *_e .Gray ,_fecde uint8 )*_e .Gray {_gbdbf :=_efae .Bounds ();
_dgfa :=_e .NewGray (_gbdbf );for _gbbg :=0;_gbbg < _gbdbf .Dx ();_gbbg ++{for _eadf :=0;_eadf < _gbdbf .Dy ();_eadf ++{_cgedf :=_efae .GrayAt (_gbbg ,_eadf );_dgfa .SetGray (_gbbg ,_eadf ,_f .Gray {Y :_cbdc (_cgedf .Y ,_fecde )});};};return _dgfa ;};func (_cec *NRGBA64 )SetNRGBA64 (x ,y int ,c _f .NRGBA64 ){_dcfe :=(y *_cec .Width +x )*2;
_ebbec :=_dcfe *3;if _ebbec +5>=len (_cec .Data ){return ;};_cec .setNRGBA64 (_ebbec ,c ,_dcfe );};func (_ccff *RGBA32 )Copy ()Image {return &RGBA32 {ImageBase :_ccff .copy ()}};func (_cac *CMYK32 )Copy ()Image {return &CMYK32 {ImageBase :_cac .copy ()}};
func _gdea (_gabg CMYK ,_fgea Gray ,_eegg _e .Rectangle ){for _adbca :=0;_adbca < _eegg .Max .X ;_adbca ++{for _dacb :=0;_dacb < _eegg .Max .Y ;_dacb ++{_gagab :=_geb (_gabg .CMYKAt (_adbca ,_dacb ));_fgea .SetGray (_adbca ,_dacb ,_gagab );};};};type Gray16 struct{ImageBase };
func (_ddcc *Gray8 )At (x ,y int )_f .Color {_ebcc ,_ :=_ddcc .ColorAt (x ,y );return _ebcc };func (_fgfd *Gray4 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_fgfd .Width ,Y :_fgfd .Height }};};func _eafd (_ccdb *Monochrome ,_dcggb ,_facg ,_ggaa ,_gcdee int ,_ecacd RasterOperator ,_agea *Monochrome ,_aae ,_fae int )error {var (_cdgc bool ;
_dgbbb bool ;_dcga byte ;_acfe int ;_aegg int ;_faaa int ;_eage int ;_eceb bool ;_debc int ;_daaa int ;_baa int ;_gbe bool ;_gedb byte ;_ggcf int ;_deac int ;_cfgf int ;_ecegf byte ;_efdb int ;_aedc int ;_afgfa uint ;_cedd uint ;_eefc byte ;_aaaf shift ;
_acfg bool ;_gdeag bool ;_gfga ,_ebdd int ;);if _aae &7!=0{_aedc =8-(_aae &7);};if _dcggb &7!=0{_aegg =8-(_dcggb &7);};if _aedc ==0&&_aegg ==0{_eefc =_eaeb [0];}else {if _aegg > _aedc {_afgfa =uint (_aegg -_aedc );}else {_afgfa =uint (8-(_aedc -_aegg ));
};_cedd =8-_afgfa ;_eefc =_eaeb [_afgfa ];};if (_dcggb &7)!=0{_cdgc =true ;_acfe =8-(_dcggb &7);_dcga =_eaeb [_acfe ];_faaa =_ccdb .BytesPerLine *_facg +(_dcggb >>3);_eage =_agea .BytesPerLine *_fae +(_aae >>3);_efdb =8-(_aae &7);if _acfe > _efdb {_aaaf =_aced ;
if _ggaa >=_aedc {_acfg =true ;};}else {_aaaf =_eea ;};};if _ggaa < _acfe {_dgbbb =true ;_dcga &=_dege [8-_acfe +_ggaa ];};if !_dgbbb {_debc =(_ggaa -_acfe )>>3;if _debc !=0{_eceb =true ;_daaa =_ccdb .BytesPerLine *_facg +((_dcggb +_aegg )>>3);_baa =_agea .BytesPerLine *_fae +((_aae +_aegg )>>3);
};};_ggcf =(_dcggb +_ggaa )&7;if !(_dgbbb ||_ggcf ==0){_gbe =true ;_gedb =_dege [_ggcf ];_deac =_ccdb .BytesPerLine *_facg +((_dcggb +_aegg )>>3)+_debc ;_cfgf =_agea .BytesPerLine *_fae +((_aae +_aegg )>>3)+_debc ;if _ggcf > int (_cedd ){_gdeag =true ;
};};switch _ecacd {case PixSrc :if _cdgc {for _gfga =0;_gfga < _gcdee ;_gfga ++{if _aaaf ==_aced {_ecegf =_agea .Data [_eage ]<<_afgfa ;if _acfg {_ecegf =_cceac (_ecegf ,_agea .Data [_eage +1]>>_cedd ,_eefc );};}else {_ecegf =_agea .Data [_eage ]>>_cedd ;
};_ccdb .Data [_faaa ]=_cceac (_ccdb .Data [_faaa ],_ecegf ,_dcga );_faaa +=_ccdb .BytesPerLine ;_eage +=_agea .BytesPerLine ;};};if _eceb {for _gfga =0;_gfga < _gcdee ;_gfga ++{for _ebdd =0;_ebdd < _debc ;_ebdd ++{_ecegf =_cceac (_agea .Data [_baa +_ebdd ]<<_afgfa ,_agea .Data [_baa +_ebdd +1]>>_cedd ,_eefc );
_ccdb .Data [_daaa +_ebdd ]=_ecegf ;};_daaa +=_ccdb .BytesPerLine ;_baa +=_agea .BytesPerLine ;};};if _gbe {for _gfga =0;_gfga < _gcdee ;_gfga ++{_ecegf =_agea .Data [_cfgf ]<<_afgfa ;if _gdeag {_ecegf =_cceac (_ecegf ,_agea .Data [_cfgf +1]>>_cedd ,_eefc );
};_ccdb .Data [_deac ]=_cceac (_ccdb .Data [_deac ],_ecegf ,_gedb );_deac +=_ccdb .BytesPerLine ;_cfgf +=_agea .BytesPerLine ;};};case PixNotSrc :if _cdgc {for _gfga =0;_gfga < _gcdee ;_gfga ++{if _aaaf ==_aced {_ecegf =_agea .Data [_eage ]<<_afgfa ;if _acfg {_ecegf =_cceac (_ecegf ,_agea .Data [_eage +1]>>_cedd ,_eefc );
};}else {_ecegf =_agea .Data [_eage ]>>_cedd ;};_ccdb .Data [_faaa ]=_cceac (_ccdb .Data [_faaa ],^_ecegf ,_dcga );_faaa +=_ccdb .BytesPerLine ;_eage +=_agea .BytesPerLine ;};};if _eceb {for _gfga =0;_gfga < _gcdee ;_gfga ++{for _ebdd =0;_ebdd < _debc ;
_ebdd ++{_ecegf =_cceac (_agea .Data [_baa +_ebdd ]<<_afgfa ,_agea .Data [_baa +_ebdd +1]>>_cedd ,_eefc );_ccdb .Data [_daaa +_ebdd ]=^_ecegf ;};_daaa +=_ccdb .BytesPerLine ;_baa +=_agea .BytesPerLine ;};};if _gbe {for _gfga =0;_gfga < _gcdee ;_gfga ++{_ecegf =_agea .Data [_cfgf ]<<_afgfa ;
if _gdeag {_ecegf =_cceac (_ecegf ,_agea .Data [_cfgf +1]>>_cedd ,_eefc );};_ccdb .Data [_deac ]=_cceac (_ccdb .Data [_deac ],^_ecegf ,_gedb );_deac +=_ccdb .BytesPerLine ;_cfgf +=_agea .BytesPerLine ;};};case PixSrcOrDst :if _cdgc {for _gfga =0;_gfga < _gcdee ;
_gfga ++{if _aaaf ==_aced {_ecegf =_agea .Data [_eage ]<<_afgfa ;if _acfg {_ecegf =_cceac (_ecegf ,_agea .Data [_eage +1]>>_cedd ,_eefc );};}else {_ecegf =_agea .Data [_eage ]>>_cedd ;};_ccdb .Data [_faaa ]=_cceac (_ccdb .Data [_faaa ],_ecegf |_ccdb .Data [_faaa ],_dcga );
_faaa +=_ccdb .BytesPerLine ;_eage +=_agea .BytesPerLine ;};};if _eceb {for _gfga =0;_gfga < _gcdee ;_gfga ++{for _ebdd =0;_ebdd < _debc ;_ebdd ++{_ecegf =_cceac (_agea .Data [_baa +_ebdd ]<<_afgfa ,_agea .Data [_baa +_ebdd +1]>>_cedd ,_eefc );_ccdb .Data [_daaa +_ebdd ]|=_ecegf ;
};_daaa +=_ccdb .BytesPerLine ;_baa +=_agea .BytesPerLine ;};};if _gbe {for _gfga =0;_gfga < _gcdee ;_gfga ++{_ecegf =_agea .Data [_cfgf ]<<_afgfa ;if _gdeag {_ecegf =_cceac (_ecegf ,_agea .Data [_cfgf +1]>>_cedd ,_eefc );};_ccdb .Data [_deac ]=_cceac (_ccdb .Data [_deac ],_ecegf |_ccdb .Data [_deac ],_gedb );
_deac +=_ccdb .BytesPerLine ;_cfgf +=_agea .BytesPerLine ;};};case PixSrcAndDst :if _cdgc {for _gfga =0;_gfga < _gcdee ;_gfga ++{if _aaaf ==_aced {_ecegf =_agea .Data [_eage ]<<_afgfa ;if _acfg {_ecegf =_cceac (_ecegf ,_agea .Data [_eage +1]>>_cedd ,_eefc );
};}else {_ecegf =_agea .Data [_eage ]>>_cedd ;};_ccdb .Data [_faaa ]=_cceac (_ccdb .Data [_faaa ],_ecegf &_ccdb .Data [_faaa ],_dcga );_faaa +=_ccdb .BytesPerLine ;_eage +=_agea .BytesPerLine ;};};if _eceb {for _gfga =0;_gfga < _gcdee ;_gfga ++{for _ebdd =0;
_ebdd < _debc ;_ebdd ++{_ecegf =_cceac (_agea .Data [_baa +_ebdd ]<<_afgfa ,_agea .Data [_baa +_ebdd +1]>>_cedd ,_eefc );_ccdb .Data [_daaa +_ebdd ]&=_ecegf ;};_daaa +=_ccdb .BytesPerLine ;_baa +=_agea .BytesPerLine ;};};if _gbe {for _gfga =0;_gfga < _gcdee ;
_gfga ++{_ecegf =_agea .Data [_cfgf ]<<_afgfa ;if _gdeag {_ecegf =_cceac (_ecegf ,_agea .Data [_cfgf +1]>>_cedd ,_eefc );};_ccdb .Data [_deac ]=_cceac (_ccdb .Data [_deac ],_ecegf &_ccdb .Data [_deac ],_gedb );_deac +=_ccdb .BytesPerLine ;_cfgf +=_agea .BytesPerLine ;
};};case PixSrcXorDst :if _cdgc {for _gfga =0;_gfga < _gcdee ;_gfga ++{if _aaaf ==_aced {_ecegf =_agea .Data [_eage ]<<_afgfa ;if _acfg {_ecegf =_cceac (_ecegf ,_agea .Data [_eage +1]>>_cedd ,_eefc );};}else {_ecegf =_agea .Data [_eage ]>>_cedd ;};_ccdb .Data [_faaa ]=_cceac (_ccdb .Data [_faaa ],_ecegf ^_ccdb .Data [_faaa ],_dcga );
_faaa +=_ccdb .BytesPerLine ;_eage +=_agea .BytesPerLine ;};};if _eceb {for _gfga =0;_gfga < _gcdee ;_gfga ++{for _ebdd =0;_ebdd < _debc ;_ebdd ++{_ecegf =_cceac (_agea .Data [_baa +_ebdd ]<<_afgfa ,_agea .Data [_baa +_ebdd +1]>>_cedd ,_eefc );_ccdb .Data [_daaa +_ebdd ]^=_ecegf ;
};_daaa +=_ccdb .BytesPerLine ;_baa +=_agea .BytesPerLine ;};};if _gbe {for _gfga =0;_gfga < _gcdee ;_gfga ++{_ecegf =_agea .Data [_cfgf ]<<_afgfa ;if _gdeag {_ecegf =_cceac (_ecegf ,_agea .Data [_cfgf +1]>>_cedd ,_eefc );};_ccdb .Data [_deac ]=_cceac (_ccdb .Data [_deac ],_ecegf ^_ccdb .Data [_deac ],_gedb );
_deac +=_ccdb .BytesPerLine ;_cfgf +=_agea .BytesPerLine ;};};case PixNotSrcOrDst :if _cdgc {for _gfga =0;_gfga < _gcdee ;_gfga ++{if _aaaf ==_aced {_ecegf =_agea .Data [_eage ]<<_afgfa ;if _acfg {_ecegf =_cceac (_ecegf ,_agea .Data [_eage +1]>>_cedd ,_eefc );
};}else {_ecegf =_agea .Data [_eage ]>>_cedd ;};_ccdb .Data [_faaa ]=_cceac (_ccdb .Data [_faaa ],^_ecegf |_ccdb .Data [_faaa ],_dcga );_faaa +=_ccdb .BytesPerLine ;_eage +=_agea .BytesPerLine ;};};if _eceb {for _gfga =0;_gfga < _gcdee ;_gfga ++{for _ebdd =0;
_ebdd < _debc ;_ebdd ++{_ecegf =_cceac (_agea .Data [_baa +_ebdd ]<<_afgfa ,_agea .Data [_baa +_ebdd +1]>>_cedd ,_eefc );_ccdb .Data [_daaa +_ebdd ]|=^_ecegf ;};_daaa +=_ccdb .BytesPerLine ;_baa +=_agea .BytesPerLine ;};};if _gbe {for _gfga =0;_gfga < _gcdee ;
_gfga ++{_ecegf =_agea .Data [_cfgf ]<<_afgfa ;if _gdeag {_ecegf =_cceac (_ecegf ,_agea .Data [_cfgf +1]>>_cedd ,_eefc );};_ccdb .Data [_deac ]=_cceac (_ccdb .Data [_deac ],^_ecegf |_ccdb .Data [_deac ],_gedb );_deac +=_ccdb .BytesPerLine ;_cfgf +=_agea .BytesPerLine ;
};};case PixNotSrcAndDst :if _cdgc {for _gfga =0;_gfga < _gcdee ;_gfga ++{if _aaaf ==_aced {_ecegf =_agea .Data [_eage ]<<_afgfa ;if _acfg {_ecegf =_cceac (_ecegf ,_agea .Data [_eage +1]>>_cedd ,_eefc );};}else {_ecegf =_agea .Data [_eage ]>>_cedd ;};_ccdb .Data [_faaa ]=_cceac (_ccdb .Data [_faaa ],^_ecegf &_ccdb .Data [_faaa ],_dcga );
_faaa +=_ccdb .BytesPerLine ;_eage +=_agea .BytesPerLine ;};};if _eceb {for _gfga =0;_gfga < _gcdee ;_gfga ++{for _ebdd =0;_ebdd < _debc ;_ebdd ++{_ecegf =_cceac (_agea .Data [_baa +_ebdd ]<<_afgfa ,_agea .Data [_baa +_ebdd +1]>>_cedd ,_eefc );_ccdb .Data [_daaa +_ebdd ]&=^_ecegf ;
};_daaa +=_ccdb .BytesPerLine ;_baa +=_agea .BytesPerLine ;};};if _gbe {for _gfga =0;_gfga < _gcdee ;_gfga ++{_ecegf =_agea .Data [_cfgf ]<<_afgfa ;if _gdeag {_ecegf =_cceac (_ecegf ,_agea .Data [_cfgf +1]>>_cedd ,_eefc );};_ccdb .Data [_deac ]=_cceac (_ccdb .Data [_deac ],^_ecegf &_ccdb .Data [_deac ],_gedb );
_deac +=_ccdb .BytesPerLine ;_cfgf +=_agea .BytesPerLine ;};};case PixSrcOrNotDst :if _cdgc {for _gfga =0;_gfga < _gcdee ;_gfga ++{if _aaaf ==_aced {_ecegf =_agea .Data [_eage ]<<_afgfa ;if _acfg {_ecegf =_cceac (_ecegf ,_agea .Data [_eage +1]>>_cedd ,_eefc );
};}else {_ecegf =_agea .Data [_eage ]>>_cedd ;};_ccdb .Data [_faaa ]=_cceac (_ccdb .Data [_faaa ],_ecegf |^_ccdb .Data [_faaa ],_dcga );_faaa +=_ccdb .BytesPerLine ;_eage +=_agea .BytesPerLine ;};};if _eceb {for _gfga =0;_gfga < _gcdee ;_gfga ++{for _ebdd =0;
_ebdd < _debc ;_ebdd ++{_ecegf =_cceac (_agea .Data [_baa +_ebdd ]<<_afgfa ,_agea .Data [_baa +_ebdd +1]>>_cedd ,_eefc );_ccdb .Data [_daaa +_ebdd ]=_ecegf |^_ccdb .Data [_daaa +_ebdd ];};_daaa +=_ccdb .BytesPerLine ;_baa +=_agea .BytesPerLine ;};};if _gbe {for _gfga =0;
_gfga < _gcdee ;_gfga ++{_ecegf =_agea .Data [_cfgf ]<<_afgfa ;if _gdeag {_ecegf =_cceac (_ecegf ,_agea .Data [_cfgf +1]>>_cedd ,_eefc );};_ccdb .Data [_deac ]=_cceac (_ccdb .Data [_deac ],_ecegf |^_ccdb .Data [_deac ],_gedb );_deac +=_ccdb .BytesPerLine ;
_cfgf +=_agea .BytesPerLine ;};};case PixSrcAndNotDst :if _cdgc {for _gfga =0;_gfga < _gcdee ;_gfga ++{if _aaaf ==_aced {_ecegf =_agea .Data [_eage ]<<_afgfa ;if _acfg {_ecegf =_cceac (_ecegf ,_agea .Data [_eage +1]>>_cedd ,_eefc );};}else {_ecegf =_agea .Data [_eage ]>>_cedd ;
};_ccdb .Data [_faaa ]=_cceac (_ccdb .Data [_faaa ],_ecegf &^_ccdb .Data [_faaa ],_dcga );_faaa +=_ccdb .BytesPerLine ;_eage +=_agea .BytesPerLine ;};};if _eceb {for _gfga =0;_gfga < _gcdee ;_gfga ++{for _ebdd =0;_ebdd < _debc ;_ebdd ++{_ecegf =_cceac (_agea .Data [_baa +_ebdd ]<<_afgfa ,_agea .Data [_baa +_ebdd +1]>>_cedd ,_eefc );
_ccdb .Data [_daaa +_ebdd ]=_ecegf &^_ccdb .Data [_daaa +_ebdd ];};_daaa +=_ccdb .BytesPerLine ;_baa +=_agea .BytesPerLine ;};};if _gbe {for _gfga =0;_gfga < _gcdee ;_gfga ++{_ecegf =_agea .Data [_cfgf ]<<_afgfa ;if _gdeag {_ecegf =_cceac (_ecegf ,_agea .Data [_cfgf +1]>>_cedd ,_eefc );
};_ccdb .Data [_deac ]=_cceac (_ccdb .Data [_deac ],_ecegf &^_ccdb .Data [_deac ],_gedb );_deac +=_ccdb .BytesPerLine ;_cfgf +=_agea .BytesPerLine ;};};case PixNotPixSrcOrDst :if _cdgc {for _gfga =0;_gfga < _gcdee ;_gfga ++{if _aaaf ==_aced {_ecegf =_agea .Data [_eage ]<<_afgfa ;
if _acfg {_ecegf =_cceac (_ecegf ,_agea .Data [_eage +1]>>_cedd ,_eefc );};}else {_ecegf =_agea .Data [_eage ]>>_cedd ;};_ccdb .Data [_faaa ]=_cceac (_ccdb .Data [_faaa ],^(_ecegf |_ccdb .Data [_faaa ]),_dcga );_faaa +=_ccdb .BytesPerLine ;_eage +=_agea .BytesPerLine ;
};};if _eceb {for _gfga =0;_gfga < _gcdee ;_gfga ++{for _ebdd =0;_ebdd < _debc ;_ebdd ++{_ecegf =_cceac (_agea .Data [_baa +_ebdd ]<<_afgfa ,_agea .Data [_baa +_ebdd +1]>>_cedd ,_eefc );_ccdb .Data [_daaa +_ebdd ]=^(_ecegf |_ccdb .Data [_daaa +_ebdd ]);
};_daaa +=_ccdb .BytesPerLine ;_baa +=_agea .BytesPerLine ;};};if _gbe {for _gfga =0;_gfga < _gcdee ;_gfga ++{_ecegf =_agea .Data [_cfgf ]<<_afgfa ;if _gdeag {_ecegf =_cceac (_ecegf ,_agea .Data [_cfgf +1]>>_cedd ,_eefc );};_ccdb .Data [_deac ]=_cceac (_ccdb .Data [_deac ],^(_ecegf |_ccdb .Data [_deac ]),_gedb );
_deac +=_ccdb .BytesPerLine ;_cfgf +=_agea .BytesPerLine ;};};case PixNotPixSrcAndDst :if _cdgc {for _gfga =0;_gfga < _gcdee ;_gfga ++{if _aaaf ==_aced {_ecegf =_agea .Data [_eage ]<<_afgfa ;if _acfg {_ecegf =_cceac (_ecegf ,_agea .Data [_eage +1]>>_cedd ,_eefc );
};}else {_ecegf =_agea .Data [_eage ]>>_cedd ;};_ccdb .Data [_faaa ]=_cceac (_ccdb .Data [_faaa ],^(_ecegf &_ccdb .Data [_faaa ]),_dcga );_faaa +=_ccdb .BytesPerLine ;_eage +=_agea .BytesPerLine ;};};if _eceb {for _gfga =0;_gfga < _gcdee ;_gfga ++{for _ebdd =0;
_ebdd < _debc ;_ebdd ++{_ecegf =_cceac (_agea .Data [_baa +_ebdd ]<<_afgfa ,_agea .Data [_baa +_ebdd +1]>>_cedd ,_eefc );_ccdb .Data [_daaa +_ebdd ]=^(_ecegf &_ccdb .Data [_daaa +_ebdd ]);};_daaa +=_ccdb .BytesPerLine ;_baa +=_agea .BytesPerLine ;};};if _gbe {for _gfga =0;
_gfga < _gcdee ;_gfga ++{_ecegf =_agea .Data [_cfgf ]<<_afgfa ;if _gdeag {_ecegf =_cceac (_ecegf ,_agea .Data [_cfgf +1]>>_cedd ,_eefc );};_ccdb .Data [_deac ]=_cceac (_ccdb .Data [_deac ],^(_ecegf &_ccdb .Data [_deac ]),_gedb );_deac +=_ccdb .BytesPerLine ;
_cfgf +=_agea .BytesPerLine ;};};case PixNotPixSrcXorDst :if _cdgc {for _gfga =0;_gfga < _gcdee ;_gfga ++{if _aaaf ==_aced {_ecegf =_agea .Data [_eage ]<<_afgfa ;if _acfg {_ecegf =_cceac (_ecegf ,_agea .Data [_eage +1]>>_cedd ,_eefc );};}else {_ecegf =_agea .Data [_eage ]>>_cedd ;
};_ccdb .Data [_faaa ]=_cceac (_ccdb .Data [_faaa ],^(_ecegf ^_ccdb .Data [_faaa ]),_dcga );_faaa +=_ccdb .BytesPerLine ;_eage +=_agea .BytesPerLine ;};};if _eceb {for _gfga =0;_gfga < _gcdee ;_gfga ++{for _ebdd =0;_ebdd < _debc ;_ebdd ++{_ecegf =_cceac (_agea .Data [_baa +_ebdd ]<<_afgfa ,_agea .Data [_baa +_ebdd +1]>>_cedd ,_eefc );
_ccdb .Data [_daaa +_ebdd ]=^(_ecegf ^_ccdb .Data [_daaa +_ebdd ]);};_daaa +=_ccdb .BytesPerLine ;_baa +=_agea .BytesPerLine ;};};if _gbe {for _gfga =0;_gfga < _gcdee ;_gfga ++{_ecegf =_agea .Data [_cfgf ]<<_afgfa ;if _gdeag {_ecegf =_cceac (_ecegf ,_agea .Data [_cfgf +1]>>_cedd ,_eefc );
};_ccdb .Data [_deac ]=_cceac (_ccdb .Data [_deac ],^(_ecegf ^_ccdb .Data [_deac ]),_gedb );_deac +=_ccdb .BytesPerLine ;_cfgf +=_agea .BytesPerLine ;};};default:_cb .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",_ecacd );
return _d .New ("\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 (_ecac *Gray4 )Set (x ,y int ,c _f .Color ){if x >=_ecac .Width ||y >=_ecac .Height {return ;
};_bac :=Gray4Model .Convert (c ).(_f .Gray );_ecac .setGray (x ,y ,_bac );};func _eegba (_gbdf Gray ,_faec RGBA ,_dgfc _e .Rectangle ){for _bdeb :=0;_bdeb < _dgfc .Max .X ;_bdeb ++{for _egbb :=0;_egbb < _dgfc .Max .Y ;_egbb ++{_cgcd :=_gbdf .GrayAt (_bdeb ,_egbb );
_faec .SetRGBA (_bdeb ,_egbb ,_bded (_cgcd ));};};};var _ Image =&Monochrome {};func (_acfa *Gray2 )Validate ()error {if len (_acfa .Data )!=_acfa .Height *_acfa .BytesPerLine {return ErrInvalidImage ;};return nil ;};func (_gfaae *NRGBA32 )NRGBAAt (x ,y int )_f .NRGBA {_gae ,_ :=ColorAtNRGBA32 (x ,y ,_gfaae .Width ,_gfaae .Data ,_gfaae .Alpha ,_gfaae .Decode );
return _gae ;};var _ _e .Image =&Gray16 {};func _caag (_gcec NRGBA ,_fbga RGBA ,_bdag _e .Rectangle ){for _gafb :=0;_gafb < _bdag .Max .X ;_gafb ++{for _fbad :=0;_fbad < _bdag .Max .Y ;_fbad ++{_caaa :=_gcec .NRGBAAt (_gafb ,_fbad );_fbga .SetRGBA (_gafb ,_fbad ,_dfcc (_caaa ));
};};};var _ Gray =&Monochrome {};type NRGBA32 struct{ImageBase };func (_aebd *CMYK32 )Set (x ,y int ,c _f .Color ){_abbe :=4*(y *_aebd .Width +x );if _abbe +3>=len (_aebd .Data ){return ;};_ddba :=_f .CMYKModel .Convert (c ).(_f .CMYK );_aebd .Data [_abbe ]=_ddba .C ;
_aebd .Data [_abbe +1]=_ddba .M ;_aebd .Data [_abbe +2]=_ddba .Y ;_aebd .Data [_abbe +3]=_ddba .K ;};func (_abdbc *Gray16 )Set (x ,y int ,c _f .Color ){_abg :=(y *_abdbc .BytesPerLine /2+x )*2;if _abg +1>=len (_abdbc .Data ){return ;};_dacd :=_f .Gray16Model .Convert (c ).(_f .Gray16 );
_abdbc .Data [_abg ],_abdbc .Data [_abg +1]=uint8 (_dacd .Y >>8),uint8 (_dacd .Y &0xff);};func _eega (_fedf _f .NRGBA )_f .NRGBA {_fedf .R =_fedf .R >>4|(_fedf .R >>4)<<4;_fedf .G =_fedf .G >>4|(_fedf .G >>4)<<4;_fedf .B =_fedf .B >>4|(_fedf .B >>4)<<4;
return _fedf ;};func (_acc *Monochrome )setIndexedBit (_bagb int ){_acc .Data [(_bagb >>3)]|=0x80>>uint (_bagb &7)};func (_defaa *NRGBA16 )Copy ()Image {return &NRGBA16 {ImageBase :_defaa .copy ()}};type CMYK32 struct{ImageBase };func (_edc *Gray16 )Copy ()Image {return &Gray16 {ImageBase :_edc .copy ()}};
func ColorAtGray4BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_f .Gray ,error ){_cedg :=y *bytesPerLine +x >>1;if _cedg >=len (data ){return _f .Gray {},_ff .Errorf ("\u0069\u006d\u0061\u0067\u0065\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006ea\u0074\u0065\u0073\u0020\u006f\u0075t\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u0028\u0025\u0064,\u0020\u0025\u0064\u0029",x ,y );
};_ecfc :=data [_cedg ]>>uint (4-(x &1)*4)&0xf;if len (decode )==2{_ecfc =uint8 (uint32 (LinearInterpolate (float64 (_ecfc ),0,15,decode [0],decode [1]))&0xf);};return _f .Gray {Y :_ecfc *17&0xff},nil ;};func _adg (_fcg _f .RGBA )_f .NRGBA {switch _fcg .A {case 0xff:return _f .NRGBA {R :_fcg .R ,G :_fcg .G ,B :_fcg .B ,A :0xff};
case 0x00:return _f .NRGBA {};default:_cbb ,_fadg ,_aef ,_cdcd :=_fcg .RGBA ();_cbb =(_cbb *0xffff)/_cdcd ;_fadg =(_fadg *0xffff)/_cdcd ;_aef =(_aef *0xffff)/_cdcd ;return _f .NRGBA {R :uint8 (_cbb >>8),G :uint8 (_fadg >>8),B :uint8 (_aef >>8),A :uint8 (_cdcd >>8)};
};};func _aaab (_gaf _f .CMYK )_f .RGBA {_ebb ,_aebbe ,_eed :=_f .CMYKToRGB (_gaf .C ,_gaf .M ,_gaf .Y ,_gaf .K );return _f .RGBA {R :_ebb ,G :_aebbe ,B :_eed ,A :0xff};};func (_cafa *Gray8 )Set (x ,y int ,c _f .Color ){_fadd :=y *_cafa .BytesPerLine +x ;
if _fadd > len (_cafa .Data )-1{return ;};_cbgd :=_f .GrayModel .Convert (c );_cafa .Data [_fadd ]=_cbgd .(_f .Gray ).Y ;};func (_abccd *NRGBA64 )Validate ()error {if len (_abccd .Data )!=3*2*_abccd .Width *_abccd .Height {return _d .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006da\u0067\u0065\u0020\u0064\u0061\u0074\u0061 s\u0069\u007a\u0065\u0020f\u006f\u0072\u0020\u0070\u0072\u006f\u0076\u0069\u0064ed\u0020\u0064i\u006d\u0065\u006e\u0073\u0069\u006f\u006e\u0073");
};return nil ;};func (_cce *Monochrome )setGrayBit (_aaff ,_gacd int ){_cce .Data [_aaff ]|=0x80>>uint (_gacd &7)};func _fdca (_abfc _f .NRGBA )_f .CMYK {_bad ,_efff ,_edaa ,_ :=_abfc .RGBA ();_abe ,_cgde ,_daag ,_fadbc :=_f .RGBToCMYK (uint8 (_bad >>8),uint8 (_efff >>8),uint8 (_edaa >>8));
return _f .CMYK {C :_abe ,M :_cgde ,Y :_daag ,K :_fadbc };};func (_daad *NRGBA32 )Validate ()error {if len (_daad .Data )!=3*_daad .Width *_daad .Height {return _d .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006da\u0067\u0065\u0020\u0064\u0061\u0074\u0061 s\u0069\u007a\u0065\u0020f\u006f\u0072\u0020\u0070\u0072\u006f\u0076\u0069\u0064ed\u0020\u0064i\u006d\u0065\u006e\u0073\u0069\u006f\u006e\u0073");
};return nil ;};func ColorAtNRGBA64 (x ,y ,width int ,data ,alpha []byte ,decode []float64 )(_f .NRGBA64 ,error ){_faf :=(y *width +x )*2;_eabad :=_faf *3;if _eabad +5>=len (data ){return _f .NRGBA64 {},_ff .Errorf ("\u0069\u006d\u0061\u0067\u0065\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006ea\u0074\u0065\u0073\u0020\u006f\u0075t\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u0028\u0025\u0064,\u0020\u0025\u0064\u0029",x ,y );
};const _eacc =0xffff;_cebg :=uint16 (_eacc );if alpha !=nil &&len (alpha )> _faf +1{_cebg =uint16 (alpha [_faf ])<<8|uint16 (alpha [_faf +1]);};_ebcfd :=uint16 (data [_eabad ])<<8|uint16 (data [_eabad +1]);_adgc :=uint16 (data [_eabad +2])<<8|uint16 (data [_eabad +3]);
_ecbfe :=uint16 (data [_eabad +4])<<8|uint16 (data [_eabad +5]);if len (decode )==6{_ebcfd =uint16 (uint64 (LinearInterpolate (float64 (_ebcfd ),0,65535,decode [0],decode [1]))&_eacc );_adgc =uint16 (uint64 (LinearInterpolate (float64 (_adgc ),0,65535,decode [2],decode [3]))&_eacc );
_ecbfe =uint16 (uint64 (LinearInterpolate (float64 (_ecbfe ),0,65535,decode [4],decode [5]))&_eacc );};return _f .NRGBA64 {R :_ebcfd ,G :_adgc ,B :_ecbfe ,A :_cebg },nil ;};type NRGBA16 struct{ImageBase };func _gggc (_ggaf *Monochrome ,_dcgc ,_cgdf ,_gffe ,_ccfd int ,_dcff RasterOperator ){if _dcgc < 0{_gffe +=_dcgc ;
_dcgc =0;};_deda :=_dcgc +_gffe -_ggaf .Width ;if _deda > 0{_gffe -=_deda ;};if _cgdf < 0{_ccfd +=_cgdf ;_cgdf =0;};_agb :=_cgdf +_ccfd -_ggaf .Height ;if _agb > 0{_ccfd -=_agb ;};if _gffe <=0||_ccfd <=0{return ;};if (_dcgc &7)==0{_faag (_ggaf ,_dcgc ,_cgdf ,_gffe ,_ccfd ,_dcff );
}else {_feead (_ggaf ,_dcgc ,_cgdf ,_gffe ,_ccfd ,_dcff );};};func _fb (_de *Monochrome ,_b int ,_ee []uint )(*Monochrome ,error ){_ceb :=_b *_de .Width ;_ac :=_b *_de .Height ;_ea :=_cegb (_ceb ,_ac );for _bf ,_db :=range _ee {var _da error ;switch _db {case 2:_da =_bb (_ea ,_de );
case 4:_da =_dcb (_ea ,_de );case 8:_da =_fec (_ea ,_de );};if _da !=nil {return nil ,_da ;};if _bf !=len (_ee )-1{_de =_ea .copy ();};};return _ea ,nil ;};var _ Image =&Gray16 {};func _eagd (_gege ,_eeff RGBA ,_effg _e .Rectangle ){for _gdgg :=0;_gdgg < _effg .Max .X ;
_gdgg ++{for _dbge :=0;_dbge < _effg .Max .Y ;_dbge ++{_eeff .SetRGBA (_gdgg ,_dbge ,_gege .RGBAAt (_gdgg ,_dbge ));};};};func _aecd (){for _cgeb :=0;_cgeb < 256;_cgeb ++{_bdfe [_cgeb ]=uint8 (_cgeb &0x1)+(uint8 (_cgeb >>1)&0x1)+(uint8 (_cgeb >>2)&0x1)+(uint8 (_cgeb >>3)&0x1)+(uint8 (_cgeb >>4)&0x1)+(uint8 (_cgeb >>5)&0x1)+(uint8 (_cgeb >>6)&0x1)+(uint8 (_cgeb >>7)&0x1);
};};func _eab (_ace Gray ,_dbf CMYK ,_bda _e .Rectangle ){for _cba :=0;_cba < _bda .Max .X ;_cba ++{for _cga :=0;_cga < _bda .Max .Y ;_cga ++{_eadg :=_ace .GrayAt (_cba ,_cga );_dbf .SetCMYK (_cba ,_cga ,_bba (_eadg ));};};};func (_gbd *Monochrome )setBit (_eadb ,_bag int ){_gbd .Data [_eadb +(_bag >>3)]|=0x80>>uint (_bag &7)};
func (_cbce *Monochrome )Scale (scale float64 )(*Monochrome ,error ){var _cdca bool ;_bbg :=scale ;if scale < 1{_bbg =1/scale ;_cdca =true ;};_gcc :=NextPowerOf2 (uint (_bbg ));if InDelta (float64 (_gcc ),_bbg ,0.001){if _cdca {return _cbce .ReduceBinary (_bbg );
};return _cbce .ExpandBinary (int (_gcc ));};_caff :=int (_a .RoundToEven (float64 (_cbce .Width )*scale ));_afag :=int (_a .RoundToEven (float64 (_cbce .Height )*scale ));return _cbce .ScaleLow (_caff ,_afag );};func (_fffg *Monochrome )InverseData ()error {return _fffg .RasterOperation (0,0,_fffg .Width ,_fffg .Height ,PixNotDst ,nil ,0,0);
};func (_fdgb *Gray2 )SetGray (x ,y int ,gray _f .Gray ){_acfdb :=_cgac (gray );_eadc :=y *_fdgb .BytesPerLine ;_bfce :=_eadc +(x >>2);if _bfce >=len (_fdgb .Data ){return ;};_cdde :=_acfdb .Y >>6;_fdgb .Data [_bfce ]=(_fdgb .Data [_bfce ]&(^(0xc0>>uint (2*((x )&3)))))|(_cdde <<uint (6-2*(x &3)));
};func (_gbg *Monochrome )IsUnpadded ()bool {return (_gbg .Width *_gbg .Height )==len (_gbg .Data )};func (_gbdb *ImageBase )newAlpha (){_dega :=BytesPerLine (_gbdb .Width ,_gbdb .BitsPerComponent ,1);_gbdb .Alpha =make ([]byte ,_gbdb .Height *_dega );
};func _fcab (_fcff CMYK ,_fdebg NRGBA ,_aeccdc _e .Rectangle ){for _cgcg :=0;_cgcg < _aeccdc .Max .X ;_cgcg ++{for _fbfg :=0;_fbfg < _aeccdc .Max .Y ;_fbfg ++{_cdbba :=_fcff .CMYKAt (_cgcg ,_fbfg );_fdebg .SetNRGBA (_cgcg ,_fbfg ,_aeaa (_cdbba ));};};
};var _ _e .Image =&Gray4 {};type Gray2 struct{ImageBase };func (_abgb *ImageBase )GetAlpha ()[]byte {return _abgb .Alpha };func (_dcd *ImageBase )copy ()ImageBase {_ddbb :=*_dcd ;_ddbb .Data =make ([]byte ,len (_dcd .Data ));copy (_ddbb .Data ,_dcd .Data );
return _ddbb ;};var _ _e .Image =&NRGBA16 {};func AutoThresholdTriangle (histogram [256]int )uint8 {var _gbbf ,_gaca ,_aadc ,_acdbc int ;for _cgaca :=0;_cgaca < len (histogram );_cgaca ++{if histogram [_cgaca ]> 0{_gbbf =_cgaca ;break ;};};if _gbbf > 0{_gbbf --;
};for _cgcb :=255;_cgcb > 0;_cgcb --{if histogram [_cgcb ]> 0{_acdbc =_cgcb ;break ;};};if _acdbc < 255{_acdbc ++;};for _fdcd :=0;_fdcd < 256;_fdcd ++{if histogram [_fdcd ]> _gaca {_aadc =_fdcd ;_gaca =histogram [_fdcd ];};};var _fgbba bool ;if (_aadc -_gbbf )< (_acdbc -_aadc ){_fgbba =true ;
var _ceaa int ;_bafd :=255;for _ceaa < _bafd {_affdf :=histogram [_ceaa ];histogram [_ceaa ]=histogram [_bafd ];histogram [_bafd ]=_affdf ;_ceaa ++;_bafd --;};_gbbf =255-_acdbc ;_aadc =255-_aadc ;};if _gbbf ==_aadc {return uint8 (_gbbf );};_fefg :=float64 (histogram [_aadc ]);
_cgbf :=float64 (_gbbf -_aadc );_efabf :=_a .Sqrt (_fefg *_fefg +_cgbf *_cgbf );_fefg /=_efabf ;_cgbf /=_efabf ;_efabf =_fefg *float64 (_gbbf )+_cgbf *float64 (histogram [_gbbf ]);_gbca :=_gbbf ;var _edae float64 ;for _acaf :=_gbbf +1;_acaf <=_aadc ;_acaf ++{_cegce :=_fefg *float64 (_acaf )+_cgbf *float64 (histogram [_acaf ])-_efabf ;
if _cegce > _edae {_gbca =_acaf ;_edae =_cegce ;};};_gbca --;if _fgbba {var _bffa int ;_afca :=255;for _bffa < _afca {_bebef :=histogram [_bffa ];histogram [_bffa ]=histogram [_afca ];histogram [_afca ]=_bebef ;_bffa ++;_afca --;};return uint8 (255-_gbca );
};return uint8 (_gbca );};func (_cgfd *Monochrome )getBitAt (_adda ,_cdd int )bool {_cbee :=_cdd *_cgfd .BytesPerLine +(_adda >>3);_gfdd :=_adda &0x07;_acab :=uint (7-_gfdd );if _cbee > len (_cgfd .Data )-1{return false ;};if (_cgfd .Data [_cbee ]>>_acab )&0x01>=1{return true ;
};return false ;};func _bded (_dga _f .Gray )_f .RGBA {return _f .RGBA {R :_dga .Y ,G :_dga .Y ,B :_dga .Y ,A :0xff}};func (_geee *Gray8 )ColorModel ()_f .Model {return _f .GrayModel };type RGBA interface{RGBAAt (_agdca ,_badf int )_f .RGBA ;SetRGBA (_dgedb ,_agdf int ,_fdad _f .RGBA );
};func (_edgf *Monochrome )ExpandBinary (factor int )(*Monochrome ,error ){if !IsPowerOf2 (uint (factor )){return nil ,_ff .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0065\u0078\u0070\u0061\u006e\u0064\u0020b\u0069n\u0061\u0072\u0079\u0020\u0066\u0061\u0063\u0074\u006f\u0072\u003a\u0020\u0025\u0064",factor );
};return _fg (_edgf ,factor );};func (_agdc *ImageBase )setEightFullBytes (_cbgc int ,_deef uint64 )error {if _cbgc +7> len (_agdc .Data )-1{return _d .New ("\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};_agdc .Data [_cbgc ]=byte ((_deef &0xff00000000000000)>>56);
_agdc .Data [_cbgc +1]=byte ((_deef &0xff000000000000)>>48);_agdc .Data [_cbgc +2]=byte ((_deef &0xff0000000000)>>40);_agdc .Data [_cbgc +3]=byte ((_deef &0xff00000000)>>32);_agdc .Data [_cbgc +4]=byte ((_deef &0xff000000)>>24);_agdc .Data [_cbgc +5]=byte ((_deef &0xff0000)>>16);
_agdc .Data [_cbgc +6]=byte ((_deef &0xff00)>>8);_agdc .Data [_cbgc +7]=byte (_deef &0xff);return nil ;};var _ Gray =&Gray16 {};func _adff (_cacgf _e .Image ,_fgbc Image ,_dada _e .Rectangle ){if _dfdc ,_egdd :=_cacgf .(SMasker );_egdd &&_dfdc .HasAlpha (){_fgbc .(SMasker ).MakeAlpha ();
};switch _dcgab :=_cacgf .(type ){case Gray :_edcf (_dcgab ,_fgbc .(NRGBA ),_dada );case NRGBA :_bafce (_dcgab ,_fgbc .(NRGBA ),_dada );case *_e .NYCbCrA :_eabg (_dcgab ,_fgbc .(NRGBA ),_dada );case CMYK :_fcab (_dcgab ,_fgbc .(NRGBA ),_dada );case RGBA :_adde (_dcgab ,_fgbc .(NRGBA ),_dada );
case nrgba64 :_bed (_dcgab ,_fgbc .(NRGBA ),_dada );default:_dfb (_cacgf ,_fgbc ,_dada );};};func _fcgc (_dabf _e .Image ,_facd Image ,_bfba _e .Rectangle ){if _gfcef ,_cae :=_dabf .(SMasker );_cae &&_gfcef .HasAlpha (){_facd .(SMasker ).MakeAlpha ();};
switch _cbgcb :=_dabf .(type ){case Gray :_eegba (_cbgcb ,_facd .(RGBA ),_bfba );case NRGBA :_caag (_cbgcb ,_facd .(RGBA ),_bfba );case *_e .NYCbCrA :_abab (_cbgcb ,_facd .(RGBA ),_bfba );case CMYK :_ddde (_cbgcb ,_facd .(RGBA ),_bfba );case RGBA :_eagd (_cbgcb ,_facd .(RGBA ),_bfba );
case nrgba64 :_edeac (_cbgcb ,_facd .(RGBA ),_bfba );default:_dfb (_dabf ,_facd ,_bfba );};};func _gcg (_ebc int )[]uint {var _dac []uint ;_cbgf :=_ebc ;_bcb :=_cbgf /8;if _bcb !=0{for _aaa :=0;_aaa < _bcb ;_aaa ++{_dac =append (_dac ,8);};_beg :=_cbgf %8;
_cbgf =0;if _beg !=0{_cbgf =_beg ;};};_fdd :=_cbgf /4;if _fdd !=0{for _ffd :=0;_ffd < _fdd ;_ffd ++{_dac =append (_dac ,4);};_acf :=_cbgf %4;_cbgf =0;if _acf !=0{_cbgf =_acf ;};};_cg :=_cbgf /2;if _cg !=0{for _ece :=0;_ece < _cg ;_ece ++{_dac =append (_dac ,2);
};};return _dac ;};func ColorAtNRGBA32 (x ,y ,width int ,data ,alpha []byte ,decode []float64 )(_f .NRGBA ,error ){_ggff :=y *width +x ;_cfdb :=3*_ggff ;if _cfdb +2>=len (data ){return _f .NRGBA {},_ff .Errorf ("\u0069\u006d\u0061\u0067\u0065\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006ea\u0074\u0065\u0073\u0020\u006f\u0075t\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u0028\u0025\u0064,\u0020\u0025\u0064\u0029",x ,y );
};_dabc :=uint8 (0xff);if alpha !=nil &&len (alpha )> _ggff {_dabc =alpha [_ggff ];};_dedda ,_fdgf ,_cdfdg :=data [_cfdb ],data [_cfdb +1],data [_cfdb +2];if len (decode )==6{_dedda =uint8 (uint32 (LinearInterpolate (float64 (_dedda ),0,255,decode [0],decode [1]))&0xff);
_fdgf =uint8 (uint32 (LinearInterpolate (float64 (_fdgf ),0,255,decode [2],decode [3]))&0xff);_cdfdg =uint8 (uint32 (LinearInterpolate (float64 (_cdfdg ),0,255,decode [4],decode [5]))&0xff);};return _f .NRGBA {R :_dedda ,G :_fdgf ,B :_cdfdg ,A :_dabc },nil ;
};func _cegb (_eaa ,_fee int )*Monochrome {return &Monochrome {ImageBase :NewImageBase (_eaa ,_fee ,1,1,nil ,nil ,nil ),ModelThreshold :0x0f};};func (_efee *Gray2 )ColorModel ()_f .Model {return Gray2Model };func (_gbfd *Monochrome )GrayAt (x ,y int )_f .Gray {_eae ,_ :=ColorAtGray1BPC (x ,y ,_gbfd .BytesPerLine ,_gbfd .Data ,_gbfd .Decode );
return _eae ;};func _dcb (_acd ,_cc *Monochrome )(_ge error ){_eff :=_cc .BytesPerLine ;_ed :=_acd .BytesPerLine ;_efb :=_cc .BytesPerLine *4-_acd .BytesPerLine ;var (_ga ,_fbe byte ;_be uint32 ;_dbe ,_cd ,_dea ,_ae ,_af ,_eag ,_fc int ;);for _dea =0;_dea < _cc .Height ;
_dea ++{_dbe =_dea *_eff ;_cd =4*_dea *_ed ;for _ae =0;_ae < _eff ;_ae ++{_ga =_cc .Data [_dbe +_ae ];_be =_gcf [_ga ];_eag =_cd +_ae *4;if _efb !=0&&(_ae +1)*4> _acd .BytesPerLine {for _af =_efb ;_af > 0;_af --{_fbe =byte ((_be >>uint (_af *8))&0xff);
_fc =_eag +(_efb -_af );if _ge =_acd .setByte (_fc ,_fbe );_ge !=nil {return _ge ;};};}else if _ge =_acd .setFourBytes (_eag ,_be );_ge !=nil {return _ge ;};if _ge =_acd .setFourBytes (_cd +_ae *4,_gcf [_cc .Data [_dbe +_ae ]]);_ge !=nil {return _ge ;};
};for _af =1;_af < 4;_af ++{for _ae =0;_ae < _ed ;_ae ++{if _ge =_acd .setByte (_cd +_af *_ed +_ae ,_acd .Data [_cd +_ae ]);_ge !=nil {return _ge ;};};};};return nil ;};const (_aced shift =iota ;_eea ;);func _faag (_cade *Monochrome ,_cbfg ,_fgdd int ,_baeg ,_fcgb int ,_dfga RasterOperator ){var (_bbbf int ;
_fdee byte ;_cfbg ,_eddeb int ;_dffa int ;);_fagg :=_baeg >>3;_edgbf :=_baeg &7;if _edgbf > 0{_fdee =_dege [_edgbf ];};_bbbf =_cade .BytesPerLine *_fgdd +(_cbfg >>3);switch _dfga {case PixClr :for _cfbg =0;_cfbg < _fcgb ;_cfbg ++{_dffa =_bbbf +_cfbg *_cade .BytesPerLine ;
for _eddeb =0;_eddeb < _fagg ;_eddeb ++{_cade .Data [_dffa ]=0x0;_dffa ++;};if _edgbf > 0{_cade .Data [_dffa ]=_cceac (_cade .Data [_dffa ],0x0,_fdee );};};case PixSet :for _cfbg =0;_cfbg < _fcgb ;_cfbg ++{_dffa =_bbbf +_cfbg *_cade .BytesPerLine ;for _eddeb =0;
_eddeb < _fagg ;_eddeb ++{_cade .Data [_dffa ]=0xff;_dffa ++;};if _edgbf > 0{_cade .Data [_dffa ]=_cceac (_cade .Data [_dffa ],0xff,_fdee );};};case PixNotDst :for _cfbg =0;_cfbg < _fcgb ;_cfbg ++{_dffa =_bbbf +_cfbg *_cade .BytesPerLine ;for _eddeb =0;
_eddeb < _fagg ;_eddeb ++{_cade .Data [_dffa ]=^_cade .Data [_dffa ];_dffa ++;};if _edgbf > 0{_cade .Data [_dffa ]=_cceac (_cade .Data [_dffa ],^_cade .Data [_dffa ],_fdee );};};};};func _debg (_gbbc _e .Image )(Image ,error ){if _ggbb ,_bgcec :=_gbbc .(*RGBA32 );
_bgcec {return _ggbb .Copy (),nil ;};_ggbg ,_efdbb ,_abaf :=_ffbg (_gbbc ,1);_fefd :=&RGBA32 {ImageBase :NewImageBase (_ggbg .Max .X ,_ggbg .Max .Y ,8,3,nil ,_abaf ,nil )};_fcgc (_gbbc ,_fefd ,_ggbg );if len (_abaf )!=0&&!_efdbb {if _aecbe :=_acb (_abaf ,_fefd );
_aecbe !=nil {return nil ,_aecbe ;};};return _fefd ,nil ;};func (_faaf *ImageBase )HasAlpha ()bool {if _faaf .Alpha ==nil {return false ;};for _gfba :=range _faaf .Alpha {if _faaf .Alpha [_gfba ]!=0xff{return true ;};};return false ;};func (_ebgb *NRGBA64 )At (x ,y int )_f .Color {_befg ,_ :=_ebgb .ColorAt (x ,y );
return _befg };func _aff ()(_dbg [256]uint16 ){for _dad :=0;_dad < 256;_dad ++{if _dad &0x01!=0{_dbg [_dad ]|=0x3;};if _dad &0x02!=0{_dbg [_dad ]|=0xc;};if _dad &0x04!=0{_dbg [_dad ]|=0x30;};if _dad &0x08!=0{_dbg [_dad ]|=0xc0;};if _dad &0x10!=0{_dbg [_dad ]|=0x300;
};if _dad &0x20!=0{_dbg [_dad ]|=0xc00;};if _dad &0x40!=0{_dbg [_dad ]|=0x3000;};if _dad &0x80!=0{_dbg [_dad ]|=0xc000;};};return _dbg ;};func _aeaa (_cfcc _f .CMYK )_f .NRGBA {_dcg ,_aaga ,_fdcgb :=_f .CMYKToRGB (_cfcc .C ,_cfcc .M ,_cfcc .Y ,_cfcc .K );
return _f .NRGBA {R :_dcg ,G :_aaga ,B :_fdcgb ,A :0xff};};func _bed (_bcfbd nrgba64 ,_bgag NRGBA ,_becb _e .Rectangle ){for _gedfe :=0;_gedfe < _becb .Max .X ;_gedfe ++{for _edca :=0;_edca < _becb .Max .Y ;_edca ++{_ddee :=_bcfbd .NRGBA64At (_gedfe ,_edca );
_bgag .SetNRGBA (_gedfe ,_edca ,_fddf (_ddee ));};};};func _bgg (_gdf _f .Color )_f .Color {_bdfef :=_f .NRGBAModel .Convert (_gdf ).(_f .NRGBA );return _eega (_bdfef );};func _eaee (_gbadd int ,_eced int )error {return _ff .Errorf ("\u0069\u006d\u0061\u0067\u0065\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006ea\u0074\u0065\u0073\u0020\u006f\u0075t\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u0028\u0025\u0064,\u0020\u0025\u0064\u0029",_gbadd ,_eced );
};func ColorAtGray16BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_f .Gray16 ,error ){_eccc :=(y *bytesPerLine /2+x )*2;if _eccc +1>=len (data ){return _f .Gray16 {},_ff .Errorf ("\u0069\u006d\u0061\u0067\u0065\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006ea\u0074\u0065\u0073\u0020\u006f\u0075t\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u0028\u0025\u0064,\u0020\u0025\u0064\u0029",x ,y );
};_edce :=uint16 (data [_eccc ])<<8|uint16 (data [_eccc +1]);if len (decode )==2{_edce =uint16 (uint64 (LinearInterpolate (float64 (_edce ),0,65535,decode [0],decode [1])));};return _f .Gray16 {Y :_edce },nil ;};func (_cbeb *Monochrome )clearBit (_eaf ,_bcfb int ){_cbeb .Data [_eaf ]&=^(0x80>>uint (_bcfb &7))};
func (_ebgfe *RGBA32 )Validate ()error {if len (_ebgfe .Data )!=3*_ebgfe .Width *_ebgfe .Height {return _d .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006da\u0067\u0065\u0020\u0064\u0061\u0074\u0061 s\u0069\u007a\u0065\u0020f\u006f\u0072\u0020\u0070\u0072\u006f\u0076\u0069\u0064ed\u0020\u0064i\u006d\u0065\u006e\u0073\u0069\u006f\u006e\u0073");
};return nil ;};func (_ggfa *NRGBA16 )ColorAt (x ,y int )(_f .Color ,error ){return ColorAtNRGBA16 (x ,y ,_ggfa .Width ,_ggfa .BytesPerLine ,_ggfa .Data ,_ggfa .Alpha ,_ggfa .Decode );};func _bdgg (_febc ,_abad Gray ,_gbac _e .Rectangle ){for _faga :=0;
_faga < _gbac .Max .X ;_faga ++{for _ecg :=0;_ecg < _gbac .Max .Y ;_ecg ++{_abad .SetGray (_faga ,_ecg ,_febc .GrayAt (_faga ,_ecg ));};};};func _ggc (_bdaa *Monochrome ,_cdggf ,_dgcg int ,_bebg ,_bfad int ,_afeb RasterOperator ,_efdf *Monochrome ,_bgcd ,_geddf int )error {var _defd ,_gffa ,_bcbg ,_bace int ;
if _cdggf < 0{_bgcd -=_cdggf ;_bebg +=_cdggf ;_cdggf =0;};if _bgcd < 0{_cdggf -=_bgcd ;_bebg +=_bgcd ;_bgcd =0;};_defd =_cdggf +_bebg -_bdaa .Width ;if _defd > 0{_bebg -=_defd ;};_gffa =_bgcd +_bebg -_efdf .Width ;if _gffa > 0{_bebg -=_gffa ;};if _dgcg < 0{_geddf -=_dgcg ;
_bfad +=_dgcg ;_dgcg =0;};if _geddf < 0{_dgcg -=_geddf ;_bfad +=_geddf ;_geddf =0;};_bcbg =_dgcg +_bfad -_bdaa .Height ;if _bcbg > 0{_bfad -=_bcbg ;};_bace =_geddf +_bfad -_efdf .Height ;if _bace > 0{_bfad -=_bace ;};if _bebg <=0||_bfad <=0{return nil ;
};var _abec error ;switch {case _cdggf &7==0&&_bgcd &7==0:_abec =_bcdd (_bdaa ,_cdggf ,_dgcg ,_bebg ,_bfad ,_afeb ,_efdf ,_bgcd ,_geddf );case _cdggf &7==_bgcd &7:_abec =_ceba (_bdaa ,_cdggf ,_dgcg ,_bebg ,_bfad ,_afeb ,_efdf ,_bgcd ,_geddf );default:_abec =_eafd (_bdaa ,_cdggf ,_dgcg ,_bebg ,_bfad ,_afeb ,_efdf ,_bgcd ,_geddf );
};if _abec !=nil {return _abec ;};return nil ;};func (_daca *ImageBase )setEightBytes (_fbeca int ,_fcdb uint64 )error {_gfce :=_daca .BytesPerLine -(_fbeca %_daca .BytesPerLine );if _daca .BytesPerLine !=_daca .Width >>3{_gfce --;};if _gfce >=8{return _daca .setEightFullBytes (_fbeca ,_fcdb );
};return _daca .setEightPartlyBytes (_fbeca ,_gfce ,_fcdb );};func (_bcee *NRGBA64 )NRGBA64At (x ,y int )_f .NRGBA64 {_cgce ,_ :=ColorAtNRGBA64 (x ,y ,_bcee .Width ,_bcee .Data ,_bcee .Alpha ,_bcee .Decode );return _cgce ;};func _bgc (_efc NRGBA ,_cbf CMYK ,_ead _e .Rectangle ){for _ceec :=0;
_ceec < _ead .Max .X ;_ceec ++{for _eceg :=0;_eceg < _ead .Max .Y ;_eceg ++{_ded :=_efc .NRGBAAt (_ceec ,_eceg );_cbf .SetCMYK (_ceec ,_eceg ,_fdca (_ded ));};};};type ColorConverter interface{Convert (_cacd _e .Image )(Image ,error );};func (_aebdd *Gray8 )Base ()*ImageBase {return &_aebdd .ImageBase };
func (_abba *ImageBase )Pix ()[]byte {return _abba .Data };func (_gade *Gray4 )Base ()*ImageBase {return &_gade .ImageBase };var _ Image =&Gray8 {};func (_adgf *NRGBA64 )ColorModel ()_f .Model {return _f .NRGBA64Model };func (_bgceg *ImageBase )setFourBytes (_fgbd int ,_ebdg uint32 )error {if _fgbd +3> len (_bgceg .Data )-1{return _ff .Errorf ("\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_fgbd );
};_bgceg .Data [_fgbd ]=byte ((_ebdg &0xff000000)>>24);_bgceg .Data [_fgbd +1]=byte ((_ebdg &0xff0000)>>16);_bgceg .Data [_fgbd +2]=byte ((_ebdg &0xff00)>>8);_bgceg .Data [_fgbd +3]=byte (_ebdg &0xff);return nil ;};func (_ecec *Monochrome )getBit (_cfeg ,_gcbe int )uint8 {return _ecec .Data [_cfeg +(_gcbe >>3)]>>uint (7-(_gcbe &7))&1;
};func ColorAtGray1BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_f .Gray ,error ){_afgc :=y *bytesPerLine +x >>3;if _afgc >=len (data ){return _f .Gray {},_ff .Errorf ("\u0069\u006d\u0061\u0067\u0065\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006ea\u0074\u0065\u0073\u0020\u006f\u0075t\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u0028\u0025\u0064,\u0020\u0025\u0064\u0029",x ,y );
};_dgbb :=data [_afgc ]>>uint (7-(x &7))&1;if len (decode )==2{_dgbb =uint8 (LinearInterpolate (float64 (_dgbb ),0.0,1.0,decode [0],decode [1]))&1;};return _f .Gray {Y :_dgbb *255},nil ;};func _dgfe (_gea uint )uint {var _bddc uint ;for _gea !=0{_gea >>=1;
_bddc ++;};return _bddc -1;};func _cffe (_beaa _f .Gray )_f .Gray {_beaa .Y >>=4;_beaa .Y |=_beaa .Y <<4;return _beaa };func ScaleAlphaToMonochrome (data []byte ,width ,height int )([]byte ,error ){_eg :=BytesPerLine (width ,8,1);if len (data )< _eg *height {return nil ,nil ;
};_cf :=&Gray8 {NewImageBase (width ,height ,8,1,data ,nil ,nil )};_ab ,_aa :=MonochromeConverter .Convert (_cf );if _aa !=nil {return nil ,_aa ;};return _ab .Base ().Data ,nil ;};func _ggag (_ffg _e .Image ,_bdgbd Image ,_cecd _e .Rectangle ){if _degeb ,_aagc :=_ffg .(SMasker );
_aagc &&_degeb .HasAlpha (){_bdgbd .(SMasker ).MakeAlpha ();};_dfb (_ffg ,_bdgbd ,_cecd );};func (_feda *CMYK32 )SetCMYK (x ,y int ,c _f .CMYK ){_fedd :=4*(y *_feda .Width +x );if _fedd +3>=len (_feda .Data ){return ;};_feda .Data [_fedd ]=c .C ;_feda .Data [_fedd +1]=c .M ;
_feda .Data [_fedd +2]=c .Y ;_feda .Data [_fedd +3]=c .K ;};func (_bdb *Gray16 )Base ()*ImageBase {return &_bdb .ImageBase };func (_fdebb *NRGBA64 )Copy ()Image {return &NRGBA64 {ImageBase :_fdebb .copy ()}};func ConverterFunc (converterFunc func (_adb _e .Image )(Image ,error ))ColorConverter {return colorConverter {_gedd :converterFunc };
};func (_afad *Monochrome )Base ()*ImageBase {return &_afad .ImageBase };func _fgga (_dgf _f .RGBA )_f .CMYK {_gcb ,_dafe ,_eggc ,_dace :=_f .RGBToCMYK (_dgf .R ,_dgf .G ,_dgf .B );return _f .CMYK {C :_gcb ,M :_dafe ,Y :_eggc ,K :_dace };};func _cgad (_efcg _e .Image )(Image ,error ){if _egee ,_ebef :=_efcg .(*NRGBA64 );
_ebef {return _egee .Copy (),nil ;};_dagd ,_ggdb ,_dfde :=_ffbg (_efcg ,2);_adgbe ,_aece :=NewImage (_dagd .Max .X ,_dagd .Max .Y ,16,3,nil ,_dfde ,nil );if _aece !=nil {return nil ,_aece ;};_ggag (_efcg ,_adgbe ,_dagd );if len (_dfde )!=0&&!_ggdb {if _ffcc :=_acb (_dfde ,_adgbe );
_ffcc !=nil {return nil ,_ffcc ;};};return _adgbe ,nil ;};func (_efeb *Monochrome )ReduceBinary (factor float64 )(*Monochrome ,error ){_bge :=_dgfe (uint (factor ));if !IsPowerOf2 (uint (factor )){_bge ++;};_fbcd :=make ([]int ,_bge );for _agcb :=range _fbcd {_fbcd [_agcb ]=4;
};_aggfe ,_cbcb :=_efa (_efeb ,_fbcd ...);if _cbcb !=nil {return nil ,_cbcb ;};return _aggfe ,nil ;};func MonochromeThresholdConverter (threshold uint8 )ColorConverter {return &monochromeThresholdConverter {Threshold :threshold };};func _ceba (_badcb *Monochrome ,_bdec ,_ccca ,_ccea ,_fceg int ,_bafg RasterOperator ,_eeeg *Monochrome ,_feag ,_fffgb int )error {var (_dbeg bool ;
_feea bool ;_aage int ;_gede int ;_fbac int ;_abgbg bool ;_bca byte ;_ddab int ;_fdab int ;_fggg int ;_edde ,_afce int ;);_fac :=8-(_bdec &7);_edfg :=_eaeb [_fac ];_ddfb :=_badcb .BytesPerLine *_ccca +(_bdec >>3);_fbag :=_eeeg .BytesPerLine *_fffgb +(_feag >>3);
if _ccea < _fac {_dbeg =true ;_edfg &=_dege [8-_fac +_ccea ];};if !_dbeg {_aage =(_ccea -_fac )>>3;if _aage > 0{_feea =true ;_gede =_ddfb +1;_fbac =_fbag +1;};};_ddab =(_bdec +_ccea )&7;if !(_dbeg ||_ddab ==0){_abgbg =true ;_bca =_dege [_ddab ];_fdab =_ddfb +1+_aage ;
_fggg =_fbag +1+_aage ;};switch _bafg {case PixSrc :for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_ddfb ]=_cceac (_badcb .Data [_ddfb ],_eeeg .Data [_fbag ],_edfg );_ddfb +=_badcb .BytesPerLine ;_fbag +=_eeeg .BytesPerLine ;};if _feea {for _edde =0;
_edde < _fceg ;_edde ++{for _afce =0;_afce < _aage ;_afce ++{_badcb .Data [_gede +_afce ]=_eeeg .Data [_fbac +_afce ];};_gede +=_badcb .BytesPerLine ;_fbac +=_eeeg .BytesPerLine ;};};if _abgbg {for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_fdab ]=_cceac (_badcb .Data [_fdab ],_eeeg .Data [_fggg ],_bca );
_fdab +=_badcb .BytesPerLine ;_fggg +=_eeeg .BytesPerLine ;};};case PixNotSrc :for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_ddfb ]=_cceac (_badcb .Data [_ddfb ],^_eeeg .Data [_fbag ],_edfg );_ddfb +=_badcb .BytesPerLine ;_fbag +=_eeeg .BytesPerLine ;
};if _feea {for _edde =0;_edde < _fceg ;_edde ++{for _afce =0;_afce < _aage ;_afce ++{_badcb .Data [_gede +_afce ]=^_eeeg .Data [_fbac +_afce ];};_gede +=_badcb .BytesPerLine ;_fbac +=_eeeg .BytesPerLine ;};};if _abgbg {for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_fdab ]=_cceac (_badcb .Data [_fdab ],^_eeeg .Data [_fggg ],_bca );
_fdab +=_badcb .BytesPerLine ;_fggg +=_eeeg .BytesPerLine ;};};case PixSrcOrDst :for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_ddfb ]=_cceac (_badcb .Data [_ddfb ],_eeeg .Data [_fbag ]|_badcb .Data [_ddfb ],_edfg );_ddfb +=_badcb .BytesPerLine ;_fbag +=_eeeg .BytesPerLine ;
};if _feea {for _edde =0;_edde < _fceg ;_edde ++{for _afce =0;_afce < _aage ;_afce ++{_badcb .Data [_gede +_afce ]|=_eeeg .Data [_fbac +_afce ];};_gede +=_badcb .BytesPerLine ;_fbac +=_eeeg .BytesPerLine ;};};if _abgbg {for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_fdab ]=_cceac (_badcb .Data [_fdab ],_eeeg .Data [_fggg ]|_badcb .Data [_fdab ],_bca );
_fdab +=_badcb .BytesPerLine ;_fggg +=_eeeg .BytesPerLine ;};};case PixSrcAndDst :for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_ddfb ]=_cceac (_badcb .Data [_ddfb ],_eeeg .Data [_fbag ]&_badcb .Data [_ddfb ],_edfg );_ddfb +=_badcb .BytesPerLine ;
_fbag +=_eeeg .BytesPerLine ;};if _feea {for _edde =0;_edde < _fceg ;_edde ++{for _afce =0;_afce < _aage ;_afce ++{_badcb .Data [_gede +_afce ]&=_eeeg .Data [_fbac +_afce ];};_gede +=_badcb .BytesPerLine ;_fbac +=_eeeg .BytesPerLine ;};};if _abgbg {for _edde =0;
_edde < _fceg ;_edde ++{_badcb .Data [_fdab ]=_cceac (_badcb .Data [_fdab ],_eeeg .Data [_fggg ]&_badcb .Data [_fdab ],_bca );_fdab +=_badcb .BytesPerLine ;_fggg +=_eeeg .BytesPerLine ;};};case PixSrcXorDst :for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_ddfb ]=_cceac (_badcb .Data [_ddfb ],_eeeg .Data [_fbag ]^_badcb .Data [_ddfb ],_edfg );
_ddfb +=_badcb .BytesPerLine ;_fbag +=_eeeg .BytesPerLine ;};if _feea {for _edde =0;_edde < _fceg ;_edde ++{for _afce =0;_afce < _aage ;_afce ++{_badcb .Data [_gede +_afce ]^=_eeeg .Data [_fbac +_afce ];};_gede +=_badcb .BytesPerLine ;_fbac +=_eeeg .BytesPerLine ;
};};if _abgbg {for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_fdab ]=_cceac (_badcb .Data [_fdab ],_eeeg .Data [_fggg ]^_badcb .Data [_fdab ],_bca );_fdab +=_badcb .BytesPerLine ;_fggg +=_eeeg .BytesPerLine ;};};case PixNotSrcOrDst :for _edde =0;_edde < _fceg ;
_edde ++{_badcb .Data [_ddfb ]=_cceac (_badcb .Data [_ddfb ],^(_eeeg .Data [_fbag ])|_badcb .Data [_ddfb ],_edfg );_ddfb +=_badcb .BytesPerLine ;_fbag +=_eeeg .BytesPerLine ;};if _feea {for _edde =0;_edde < _fceg ;_edde ++{for _afce =0;_afce < _aage ;_afce ++{_badcb .Data [_gede +_afce ]|=^(_eeeg .Data [_fbac +_afce ]);
};_gede +=_badcb .BytesPerLine ;_fbac +=_eeeg .BytesPerLine ;};};if _abgbg {for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_fdab ]=_cceac (_badcb .Data [_fdab ],^(_eeeg .Data [_fggg ])|_badcb .Data [_fdab ],_bca );_fdab +=_badcb .BytesPerLine ;_fggg +=_eeeg .BytesPerLine ;
};};case PixNotSrcAndDst :for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_ddfb ]=_cceac (_badcb .Data [_ddfb ],^(_eeeg .Data [_fbag ])&_badcb .Data [_ddfb ],_edfg );_ddfb +=_badcb .BytesPerLine ;_fbag +=_eeeg .BytesPerLine ;};if _feea {for _edde =0;
_edde < _fceg ;_edde ++{for _afce =0;_afce < _aage ;_afce ++{_badcb .Data [_gede +_afce ]&=^_eeeg .Data [_fbac +_afce ];};_gede +=_badcb .BytesPerLine ;_fbac +=_eeeg .BytesPerLine ;};};if _abgbg {for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_fdab ]=_cceac (_badcb .Data [_fdab ],^(_eeeg .Data [_fggg ])&_badcb .Data [_fdab ],_bca );
_fdab +=_badcb .BytesPerLine ;_fggg +=_eeeg .BytesPerLine ;};};case PixSrcOrNotDst :for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_ddfb ]=_cceac (_badcb .Data [_ddfb ],_eeeg .Data [_fbag ]|^(_badcb .Data [_ddfb ]),_edfg );_ddfb +=_badcb .BytesPerLine ;
_fbag +=_eeeg .BytesPerLine ;};if _feea {for _edde =0;_edde < _fceg ;_edde ++{for _afce =0;_afce < _aage ;_afce ++{_badcb .Data [_gede +_afce ]=_eeeg .Data [_fbac +_afce ]|^(_badcb .Data [_gede +_afce ]);};_gede +=_badcb .BytesPerLine ;_fbac +=_eeeg .BytesPerLine ;
};};if _abgbg {for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_fdab ]=_cceac (_badcb .Data [_fdab ],_eeeg .Data [_fggg ]|^(_badcb .Data [_fdab ]),_bca );_fdab +=_badcb .BytesPerLine ;_fggg +=_eeeg .BytesPerLine ;};};case PixSrcAndNotDst :for _edde =0;
_edde < _fceg ;_edde ++{_badcb .Data [_ddfb ]=_cceac (_badcb .Data [_ddfb ],_eeeg .Data [_fbag ]&^(_badcb .Data [_ddfb ]),_edfg );_ddfb +=_badcb .BytesPerLine ;_fbag +=_eeeg .BytesPerLine ;};if _feea {for _edde =0;_edde < _fceg ;_edde ++{for _afce =0;_afce < _aage ;
_afce ++{_badcb .Data [_gede +_afce ]=_eeeg .Data [_fbac +_afce ]&^(_badcb .Data [_gede +_afce ]);};_gede +=_badcb .BytesPerLine ;_fbac +=_eeeg .BytesPerLine ;};};if _abgbg {for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_fdab ]=_cceac (_badcb .Data [_fdab ],_eeeg .Data [_fggg ]&^(_badcb .Data [_fdab ]),_bca );
_fdab +=_badcb .BytesPerLine ;_fggg +=_eeeg .BytesPerLine ;};};case PixNotPixSrcOrDst :for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_ddfb ]=_cceac (_badcb .Data [_ddfb ],^(_eeeg .Data [_fbag ]|_badcb .Data [_ddfb ]),_edfg );_ddfb +=_badcb .BytesPerLine ;
_fbag +=_eeeg .BytesPerLine ;};if _feea {for _edde =0;_edde < _fceg ;_edde ++{for _afce =0;_afce < _aage ;_afce ++{_badcb .Data [_gede +_afce ]=^(_eeeg .Data [_fbac +_afce ]|_badcb .Data [_gede +_afce ]);};_gede +=_badcb .BytesPerLine ;_fbac +=_eeeg .BytesPerLine ;
};};if _abgbg {for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_fdab ]=_cceac (_badcb .Data [_fdab ],^(_eeeg .Data [_fggg ]|_badcb .Data [_fdab ]),_bca );_fdab +=_badcb .BytesPerLine ;_fggg +=_eeeg .BytesPerLine ;};};case PixNotPixSrcAndDst :for _edde =0;
_edde < _fceg ;_edde ++{_badcb .Data [_ddfb ]=_cceac (_badcb .Data [_ddfb ],^(_eeeg .Data [_fbag ]&_badcb .Data [_ddfb ]),_edfg );_ddfb +=_badcb .BytesPerLine ;_fbag +=_eeeg .BytesPerLine ;};if _feea {for _edde =0;_edde < _fceg ;_edde ++{for _afce =0;_afce < _aage ;
_afce ++{_badcb .Data [_gede +_afce ]=^(_eeeg .Data [_fbac +_afce ]&_badcb .Data [_gede +_afce ]);};_gede +=_badcb .BytesPerLine ;_fbac +=_eeeg .BytesPerLine ;};};if _abgbg {for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_fdab ]=_cceac (_badcb .Data [_fdab ],^(_eeeg .Data [_fggg ]&_badcb .Data [_fdab ]),_bca );
_fdab +=_badcb .BytesPerLine ;_fggg +=_eeeg .BytesPerLine ;};};case PixNotPixSrcXorDst :for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_ddfb ]=_cceac (_badcb .Data [_ddfb ],^(_eeeg .Data [_fbag ]^_badcb .Data [_ddfb ]),_edfg );_ddfb +=_badcb .BytesPerLine ;
_fbag +=_eeeg .BytesPerLine ;};if _feea {for _edde =0;_edde < _fceg ;_edde ++{for _afce =0;_afce < _aage ;_afce ++{_badcb .Data [_gede +_afce ]=^(_eeeg .Data [_fbac +_afce ]^_badcb .Data [_gede +_afce ]);};_gede +=_badcb .BytesPerLine ;_fbac +=_eeeg .BytesPerLine ;
};};if _abgbg {for _edde =0;_edde < _fceg ;_edde ++{_badcb .Data [_fdab ]=_cceac (_badcb .Data [_fdab ],^(_eeeg .Data [_fggg ]^_badcb .Data [_fdab ]),_bca );_fdab +=_badcb .BytesPerLine ;_fggg +=_eeeg .BytesPerLine ;};};default:_cb .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",_bafg );
return _d .New ("\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");};return nil ;};func (_adae *NRGBA32 )setRGBA (_adfb int ,_cbef _f .NRGBA ){_ebfe :=3*_adfb ;_adae .Data [_ebfe ]=_cbef .R ;
_adae .Data [_ebfe +1]=_cbef .G ;_adae .Data [_ebfe +2]=_cbef .B ;if _adfb < len (_adae .Alpha ){_adae .Alpha [_adfb ]=_cbef .A ;};};func (_cbfe *Gray2 )Histogram ()(_cdgb [256]int ){for _egge :=0;_egge < _cbfe .Width ;_egge ++{for _adfd :=0;_adfd < _cbfe .Height ;
_adfd ++{_cdgb [_cbfe .GrayAt (_egge ,_adfd ).Y ]++;};};return _cdgb ;};type SMasker interface{HasAlpha ()bool ;GetAlpha ()[]byte ;MakeAlpha ();};type ImageBase struct{Width ,Height int ;BitsPerComponent ,ColorComponents int ;Data ,Alpha []byte ;Decode []float64 ;
BytesPerLine int ;};func (_debca *NRGBA16 )At (x ,y int )_f .Color {_deddg ,_ :=_debca .ColorAt (x ,y );return _deddg };func _cfe (_agf ,_cfgc *Monochrome ,_abc []byte ,_cfc int )(_edee error ){var (_aca ,_cdg ,_cfbd ,_cdbb ,_edfa ,_cdbbe ,_gcd ,_gac int ;
_efea ,_abca ,_dgb ,_fcbd uint32 ;_ega ,_feg byte ;_eda uint16 ;);_aaaa :=make ([]byte ,4);_fad :=make ([]byte ,4);for _cfbd =0;_cfbd < _agf .Height -1;_cfbd ,_cdbb =_cfbd +2,_cdbb +1{_aca =_cfbd *_agf .BytesPerLine ;_cdg =_cdbb *_cfgc .BytesPerLine ;for _edfa ,_cdbbe =0,0;
_edfa < _cfc ;_edfa ,_cdbbe =_edfa +4,_cdbbe +1{for _gcd =0;_gcd < 4;_gcd ++{_gac =_aca +_edfa +_gcd ;if _gac <=len (_agf .Data )-1&&_gac < _aca +_agf .BytesPerLine {_aaaa [_gcd ]=_agf .Data [_gac ];}else {_aaaa [_gcd ]=0x00;};_gac =_aca +_agf .BytesPerLine +_edfa +_gcd ;
if _gac <=len (_agf .Data )-1&&_gac < _aca +(2*_agf .BytesPerLine ){_fad [_gcd ]=_agf .Data [_gac ];}else {_fad [_gcd ]=0x00;};};_efea =_ca .BigEndian .Uint32 (_aaaa );_abca =_ca .BigEndian .Uint32 (_fad );_dgb =_efea &_abca ;_dgb |=_dgb <<1;_fcbd =_efea |_abca ;
_fcbd &=_fcbd <<1;_abca =_dgb &_fcbd ;_abca &=0xaaaaaaaa;_efea =_abca |(_abca <<7);_ega =byte (_efea >>24);_feg =byte ((_efea >>8)&0xff);_gac =_cdg +_cdbbe ;if _gac +1==len (_cfgc .Data )-1||_gac +1>=_cdg +_cfgc .BytesPerLine {if _edee =_cfgc .setByte (_gac ,_abc [_ega ]);
_edee !=nil {return _ff .Errorf ("\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gac );};}else {_eda =(uint16 (_abc [_ega ])<<8)|uint16 (_abc [_feg ]);if _edee =_cfgc .setTwoBytes (_gac ,_eda );_edee !=nil {return _ff .Errorf ("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",_gac );
};_cdbbe ++;};};};return nil ;};func (_dceg *ImageBase )setTwoBytes (_baee int ,_ecdd uint16 )error {if _baee +1> len (_dceg .Data )-1{return _d .New ("\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};_dceg .Data [_baee ]=byte ((_ecdd &0xff00)>>8);
_dceg .Data [_baee +1]=byte (_ecdd &0xff);return nil ;};var _ _e .Image =&Gray8 {};func BytesPerLine (width ,bitsPerComponent ,colorComponents int )int {return ((width *bitsPerComponent )*colorComponents +7)>>3;};func (_ggec *NRGBA32 )Set (x ,y int ,c _f .Color ){_aceea :=y *_ggec .Width +x ;
_bgbg :=3*_aceea ;if _bgbg +2>=len (_ggec .Data ){return ;};_adbf :=_f .NRGBAModel .Convert (c ).(_f .NRGBA );_ggec .setRGBA (_aceea ,_adbf );};func (_cgbd monochromeModel )Convert (c _f .Color )_f .Color {_fecd :=_f .GrayModel .Convert (c ).(_f .Gray );
return _dccb (_fecd ,_cgbd );};func (_dfbg *Gray8 )Validate ()error {if len (_dfbg .Data )!=_dfbg .Height *_dfbg .BytesPerLine {return ErrInvalidImage ;};return nil ;};func _efa (_gg *Monochrome ,_ggg ...int )(_cbga *Monochrome ,_beb error ){if _gg ==nil {return nil ,_d .New ("\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if len (_ggg )==0{return nil ,_d .New ("\u0074h\u0065\u0072e\u0020\u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u0061\u0074 \u006c\u0065\u0061\u0073\u0074\u0020o\u006e\u0065\u0020\u006c\u0065\u0076\u0065\u006c\u0020\u006f\u0066 \u0072\u0065\u0064\u0075\u0063\u0074\u0069\u006f\u006e");
};_deg :=_fde ();_cbga =_gg ;for _ ,_abfd :=range _ggg {if _abfd <=0{break ;};_cbga ,_beb =_eagbb (_cbga ,_abfd ,_deg );if _beb !=nil {return nil ,_beb ;};};return _cbga ,nil ;};func (_fdfd *NRGBA16 )Validate ()error {if len (_fdfd .Data )!=3*_fdfd .Width *_fdfd .Height /2{return _d .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006da\u0067\u0065\u0020\u0064\u0061\u0074\u0061 s\u0069\u007a\u0065\u0020f\u006f\u0072\u0020\u0070\u0072\u006f\u0076\u0069\u0064ed\u0020\u0064i\u006d\u0065\u006e\u0073\u0069\u006f\u006e\u0073");
};return nil ;};func (_febbe *Gray2 )Base ()*ImageBase {return &_febbe .ImageBase };func (_dfcg *Gray16 )Histogram ()(_cddc [256]int ){for _ebab :=0;_ebab < _dfcg .Width ;_ebab ++{for _aeccd :=0;_aeccd < _dfcg .Height ;_aeccd ++{_cddc [_dfcg .GrayAt (_ebab ,_aeccd ).Y ]++;
};};return _cddc ;};func (_gef *Monochrome )Set (x ,y int ,c _f .Color ){_fage :=y *_gef .BytesPerLine +x >>3;if _fage > len (_gef .Data )-1{return ;};_gga :=_gef .ColorModel ().Convert (c ).(_f .Gray );_gef .setGray (x ,_gga ,_fage );};func (_accf *NRGBA16 )SetNRGBA (x ,y int ,c _f .NRGBA ){_feeg :=y *_accf .BytesPerLine +x *3/2;
if _feeg +1>=len (_accf .Data ){return ;};c =_eega (c );_accf .setNRGBA (x ,y ,_feeg ,c );};func _cfd (_fddc ,_fce CMYK ,_cefc _e .Rectangle ){for _gbf :=0;_gbf < _cefc .Max .X ;_gbf ++{for _afdf :=0;_afdf < _cefc .Max .Y ;_afdf ++{_fce .SetCMYK (_gbf ,_afdf ,_fddc .CMYKAt (_gbf ,_afdf ));
};};};func _cgc (_edge _f .Color )_f .Color {_cace :=_f .GrayModel .Convert (_edge ).(_f .Gray );return _cgac (_cace );};func (_gfe *Monochrome )Histogram ()(_caa [256]int ){for _ ,_cbed :=range _gfe .Data {_caa [0xff]+=int (_bdfe [_gfe .Data [_cbed ]]);
};return _caa ;};var ErrInvalidImage =_d .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006da\u0067\u0065\u0020\u0064\u0061\u0074\u0061 s\u0069\u007a\u0065\u0020f\u006f\u0072\u0020\u0070\u0072\u006f\u0076\u0069\u0064ed\u0020\u0064i\u006d\u0065\u006e\u0073\u0069\u006f\u006e\u0073");
func _gddbe (_fffga *_e .Gray )bool {for _fbff :=0;_fbff < len (_fffga .Pix );_fbff ++{if !_aeaec (_fffga .Pix [_fbff ]){return false ;};};return true ;};func (_ccaa *Gray8 )Histogram ()(_bbbg [256]int ){for _fbed :=0;_fbed < len (_ccaa .Data );_fbed ++{_bbbg [_ccaa .Data [_fbed ]]++;
};return _bbbg ;};func (_baf *Gray16 )Validate ()error {if len (_baf .Data )!=_baf .Height *_baf .BytesPerLine {return ErrInvalidImage ;};return nil ;};func ColorAtNRGBA (x ,y ,width ,bytesPerLine ,bitsPerColor int ,data ,alpha []byte ,decode []float64 )(_f .Color ,error ){switch bitsPerColor {case 4:return ColorAtNRGBA16 (x ,y ,width ,bytesPerLine ,data ,alpha ,decode );
case 8:return ColorAtNRGBA32 (x ,y ,width ,data ,alpha ,decode );case 16:return ColorAtNRGBA64 (x ,y ,width ,data ,alpha ,decode );default:return nil ,_ff .Errorf ("\u0075\u006e\u0073\u0075\u0070\u0070\u006fr\u0074\u0065\u0064 \u0072\u0067\u0062\u0020b\u0069\u0074\u0073\u0020\u0070\u0065\u0072\u0020\u0063\u006f\u006c\u006f\u0072\u0020\u0061\u006d\u006f\u0075\u006e\u0074\u003a\u0020\u0027\u0025\u0064\u0027",bitsPerColor );
};};func (_gad *Monochrome )SetGray (x ,y int ,g _f .Gray ){_dfbf :=y *_gad .BytesPerLine +x >>3;if _dfbf > len (_gad .Data )-1{return ;};g =_dccb (g ,monochromeModel (_gad .ModelThreshold ));_gad .setGray (x ,g ,_dfbf );};func _fbaf (_edfad RGBA ,_eede Gray ,_ggga _e .Rectangle ){for _bbad :=0;
_bbad < _ggga .Max .X ;_bbad ++{for _cfef :=0;_cfef < _ggga .Max .Y ;_cfef ++{_fbgf :=_cfda (_edfad .RGBAAt (_bbad ,_cfef ));_eede .SetGray (_bbad ,_cfef ,_fbgf );};};};func (_eaec *Gray16 )SetGray (x ,y int ,g _f .Gray ){_cgbc :=(y *_eaec .BytesPerLine /2+x )*2;
if _cgbc +1>=len (_eaec .Data ){return ;};_eaec .Data [_cgbc ]=g .Y ;_eaec .Data [_cgbc +1]=g .Y ;};func _ecae (_afe NRGBA ,_fdde Gray ,_bcff _e .Rectangle ){for _bacg :=0;_bacg < _bcff .Max .X ;_bacg ++{for _cffa :=0;_cffa < _bcff .Max .Y ;_cffa ++{_geg :=_cea (_afe .NRGBAAt (_bacg ,_cffa ));
_fdde .SetGray (_bacg ,_cffa ,_geg );};};};func (_eggg *CMYK32 )At (x ,y int )_f .Color {_agad ,_ :=_eggg .ColorAt (x ,y );return _agad };func _afda (_ccc Gray ,_gedg nrgba64 ,_adbc _e .Rectangle ){for _abdg :=0;_abdg < _adbc .Max .X ;_abdg ++{for _fgag :=0;
_fgag < _adbc .Max .Y ;_fgag ++{_gdg :=_dae (_gedg .NRGBA64At (_abdg ,_fgag ));_ccc .SetGray (_abdg ,_fgag ,_gdg );};};};func _debf (_dca ,_gec *Monochrome ,_gcgg []byte ,_ecd int )(_dfe error ){var (_bceb ,_cedc ,_aab ,_dfc ,_aace ,_aec ,_bde ,_gb int ;
_gbc ,_gba uint32 ;_ebe ,_abb byte ;_dff uint16 ;);_eee :=make ([]byte ,4);_fbb :=make ([]byte ,4);for _aab =0;_aab < _dca .Height -1;_aab ,_dfc =_aab +2,_dfc +1{_bceb =_aab *_dca .BytesPerLine ;_cedc =_dfc *_gec .BytesPerLine ;for _aace ,_aec =0,0;_aace < _ecd ;
_aace ,_aec =_aace +4,_aec +1{for _bde =0;_bde < 4;_bde ++{_gb =_bceb +_aace +_bde ;if _gb <=len (_dca .Data )-1&&_gb < _bceb +_dca .BytesPerLine {_eee [_bde ]=_dca .Data [_gb ];}else {_eee [_bde ]=0x00;};_gb =_bceb +_dca .BytesPerLine +_aace +_bde ;if _gb <=len (_dca .Data )-1&&_gb < _bceb +(2*_dca .BytesPerLine ){_fbb [_bde ]=_dca .Data [_gb ];
}else {_fbb [_bde ]=0x00;};};_gbc =_ca .BigEndian .Uint32 (_eee );_gba =_ca .BigEndian .Uint32 (_fbb );_gba &=_gbc ;_gba &=_gba <<1;_gba &=0xaaaaaaaa;_gbc =_gba |(_gba <<7);_ebe =byte (_gbc >>24);_abb =byte ((_gbc >>8)&0xff);_gb =_cedc +_aec ;if _gb +1==len (_gec .Data )-1||_gb +1>=_cedc +_gec .BytesPerLine {_gec .Data [_gb ]=_gcgg [_ebe ];
if _dfe =_gec .setByte (_gb ,_gcgg [_ebe ]);_dfe !=nil {return _ff .Errorf ("\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gb );};}else {_dff =(uint16 (_gcgg [_ebe ])<<8)|uint16 (_gcgg [_abb ]);if _dfe =_gec .setTwoBytes (_gb ,_dff );_dfe !=nil {return _ff .Errorf ("s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_gb );
};_aec ++;};};};return nil ;};var (_dege =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_eaeb =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_deba *RGBA32 )setRGBA (_bcddc int ,_dbbg _f .RGBA ){_gcgc :=3*_bcddc ;_deba .Data [_gcgc ]=_dbbg .R ;
_deba .Data [_gcgc +1]=_dbbg .G ;_deba .Data [_gcgc +2]=_dbbg .B ;if _bcddc < len (_deba .Alpha ){_deba .Alpha [_bcddc ]=_dbbg .A ;};};var _ _e .Image =&Monochrome {};func _abef (_fgc *Monochrome ,_bdc ,_gefc ,_dadc ,_bfcec int ,_cdfd RasterOperator ,_gaded *Monochrome ,_ebeac ,_gca int )error {if _fgc ==nil {return _d .New ("\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");
};if _cdfd ==PixDst {return nil ;};switch _cdfd {case PixClr ,PixSet ,PixNotDst :_gggc (_fgc ,_bdc ,_gefc ,_dadc ,_bfcec ,_cdfd );return nil ;};if _gaded ==nil {_cb .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 _d .New ("\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _dccbd :=_ggc (_fgc ,_bdc ,_gefc ,_dadc ,_bfcec ,_cdfd ,_gaded ,_ebeac ,_gca );_dccbd !=nil {return _dccbd ;};return nil ;};type Gray interface{GrayAt (_cge ,_adba int )_f .Gray ;
SetGray (_fegd ,_cefe int ,_acge _f .Gray );};func ColorAtCMYK (x ,y ,width int ,data []byte ,decode []float64 )(_f .CMYK ,error ){_gab :=4*(y *width +x );if _gab +3>=len (data ){return _f .CMYK {},_ff .Errorf ("\u0069\u006d\u0061\u0067\u0065\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006ea\u0074\u0065\u0073\u0020\u006f\u0075t\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u0028\u0025\u0064,\u0020\u0025\u0064\u0029",x ,y );
};C :=data [_gab ]&0xff;M :=data [_gab +1]&0xff;Y :=data [_gab +2]&0xff;K :=data [_gab +3]&0xff;if len (decode )==8{C =uint8 (uint32 (LinearInterpolate (float64 (C ),0,255,decode [0],decode [1]))&0xff);M =uint8 (uint32 (LinearInterpolate (float64 (M ),0,255,decode [2],decode [3]))&0xff);
Y =uint8 (uint32 (LinearInterpolate (float64 (Y ),0,255,decode [4],decode [5]))&0xff);K =uint8 (uint32 (LinearInterpolate (float64 (K ),0,255,decode [6],decode [7]))&0xff);};return _f .CMYK {C :C ,M :M ,Y :Y ,K :K },nil ;};func (_gcbd *NRGBA64 )Set (x ,y int ,c _f .Color ){_bbda :=(y *_gcbd .Width +x )*2;
_edad :=_bbda *3;if _edad +5>=len (_gcbd .Data ){return ;};_faee :=_f .NRGBA64Model .Convert (c ).(_f .NRGBA64 );_gcbd .setNRGBA64 (_edad ,_faee ,_bbda );};var _ Image =&NRGBA16 {};func ColorAtRGBA32 (x ,y ,width int ,data ,alpha []byte ,decode []float64 )(_f .RGBA ,error ){_addae :=y *width +x ;
_bgba :=3*_addae ;if _bgba +2>=len (data ){return _f .RGBA {},_ff .Errorf ("\u0069\u006d\u0061\u0067\u0065\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006ea\u0074\u0065\u0073\u0020\u006f\u0075t\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u0028\u0025\u0064,\u0020\u0025\u0064\u0029",x ,y );
};_gbdgg :=uint8 (0xff);if alpha !=nil &&len (alpha )> _addae {_gbdgg =alpha [_addae ];};_dfef ,_ggffd ,_gabd :=data [_bgba ],data [_bgba +1],data [_bgba +2];if len (decode )==6{_dfef =uint8 (uint32 (LinearInterpolate (float64 (_dfef ),0,255,decode [0],decode [1]))&0xff);
_ggffd =uint8 (uint32 (LinearInterpolate (float64 (_ggffd ),0,255,decode [2],decode [3]))&0xff);_gabd =uint8 (uint32 (LinearInterpolate (float64 (_gabd ),0,255,decode [4],decode [5]))&0xff);};return _f .RGBA {R :_dfef ,G :_ggffd ,B :_gabd ,A :_gbdgg },nil ;
};var (Gray2Model =_f .ModelFunc (_cgc );Gray4Model =_f .ModelFunc (_ebf );NRGBA16Model =_f .ModelFunc (_bgg ););type Gray8 struct{ImageBase };func ImgToGray (i _e .Image )*_e .Gray {if _cbbd ,_cdcde :=i .(*_e .Gray );_cdcde {return _cbbd ;};_afac :=i .Bounds ();
_dbcf :=_e .NewGray (_afac );for _egbd :=0;_egbd < _afac .Max .X ;_egbd ++{for _gfcea :=0;_gfcea < _afac .Max .Y ;_gfcea ++{_agcf :=i .At (_egbd ,_gfcea );_dbcf .Set (_egbd ,_gfcea ,_agcf );};};return _dbcf ;};func _ebgfed (_efgg _e .Image ,_cbcd uint8 )*_e .Gray {_dedde :=_efgg .Bounds ();
_afdfc :=_e .NewGray (_dedde );var (_cab _f .Color ;_gcabe _f .Gray ;);for _bceea :=0;_bceea < _dedde .Max .X ;_bceea ++{for _aecg :=0;_aecg < _dedde .Max .Y ;_aecg ++{_cab =_efgg .At (_bceea ,_aecg );_afdfc .Set (_bceea ,_aecg ,_cab );_gcabe =_afdfc .GrayAt (_bceea ,_aecg );
_afdfc .SetGray (_bceea ,_aecg ,_f .Gray {Y :_cbdc (_gcabe .Y ,_cbcd )});};};return _afdfc ;};func _ebf (_bbf _f .Color )_f .Color {_fcad :=_f .GrayModel .Convert (_bbf ).(_f .Gray );return _cffe (_fcad )};func _bafce (_abed ,_afb NRGBA ,_cgfa _e .Rectangle ){for _ggad :=0;
_ggad < _cgfa .Max .X ;_ggad ++{for _cega :=0;_cega < _cgfa .Max .Y ;_cega ++{_afb .SetNRGBA (_ggad ,_cega ,_abed .NRGBAAt (_ggad ,_cega ));};};};var _ Image =&NRGBA32 {};func _dccb (_gdaa _f .Gray ,_abdb monochromeModel )_f .Gray {if _gdaa .Y > uint8 (_abdb ){return _f .Gray {Y :_a .MaxUint8 };
};return _f .Gray {};};func (_fcbae *Monochrome )ColorAt (x ,y int )(_f .Color ,error ){return ColorAtGray1BPC (x ,y ,_fcbae .BytesPerLine ,_fcbae .Data ,_fcbae .Decode );};var _ Image =&NRGBA64 {};func _aad (_ebed _f .NRGBA64 )_f .RGBA {_egb ,_fcba ,_feff ,_gaag :=_ebed .RGBA ();
return _f .RGBA {R :uint8 (_egb >>8),G :uint8 (_fcba >>8),B :uint8 (_feff >>8),A :uint8 (_gaag >>8)};};func (_bafgd *NRGBA32 )ColorAt (x ,y int )(_f .Color ,error ){return ColorAtNRGBA32 (x ,y ,_bafgd .Width ,_bafgd .Data ,_bafgd .Alpha ,_bafgd .Decode );
};func (_cede *Monochrome )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Monochrome ,sx ,sy int )error {return _abef (_cede ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_dccba *Gray4 )Validate ()error {if len (_dccba .Data )!=_dccba .Height *_dccba .BytesPerLine {return ErrInvalidImage ;
};return nil ;};func (_eac *Gray4 )GrayAt (x ,y int )_f .Gray {_cffb ,_ :=ColorAtGray4BPC (x ,y ,_eac .BytesPerLine ,_eac .Data ,_eac .Decode );return _cffb ;};func (_gcce *Gray2 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_gcce .Width ,Y :_gcce .Height }};
};func (_ebbf *NRGBA16 )NRGBAAt (x ,y int )_f .NRGBA {_acfb ,_ :=ColorAtNRGBA16 (x ,y ,_ebbf .Width ,_ebbf .BytesPerLine ,_ebbf .Data ,_ebbf .Alpha ,_ebbf .Decode );return _acfb ;};func (_faae *Monochrome )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_faae .Width ,Y :_faae .Height }};
};func _adde (_bfdc RGBA ,_abbeb NRGBA ,_cage _e .Rectangle ){for _ccb :=0;_ccb < _cage .Max .X ;_ccb ++{for _dedc :=0;_dedc < _cage .Max .Y ;_dedc ++{_fcfbg :=_bfdc .RGBAAt (_ccb ,_dedc );_abbeb .SetNRGBA (_ccb ,_dedc ,_adg (_fcfbg ));};};};func (_ddeb *Monochrome )AddPadding ()(_bcd error ){if _fgadc :=((_ddeb .Width *_ddeb .Height )+7)>>3;
len (_ddeb .Data )< _fgadc {return _ff .Errorf ("\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 (_ddeb .Data ),_fgadc );
};_eeb :=_ddeb .Width %8;if _eeb ==0{return nil ;};_aggf :=_ddeb .Width /8;_egcf :=_fe .NewReader (_ddeb .Data );_cccg :=make ([]byte ,_ddeb .Height *_ddeb .BytesPerLine );_gag :=_fe .NewWriterMSB (_cccg );_ddd :=make ([]byte ,_aggf );var (_ccfb int ;_aeg uint64 ;
);for _ccfb =0;_ccfb < _ddeb .Height ;_ccfb ++{if _ ,_bcd =_egcf .Read (_ddd );_bcd !=nil {return _bcd ;};if _ ,_bcd =_gag .Write (_ddd );_bcd !=nil {return _bcd ;};if _aeg ,_bcd =_egcf .ReadBits (byte (_eeb ));_bcd !=nil {return _bcd ;};if _bcd =_gag .WriteByte (byte (_aeg )<<uint (8-_eeb ));
_bcd !=nil {return _bcd ;};};_ddeb .Data =_gag .Data ();return nil ;};func _fg (_ce *Monochrome ,_egc int )(*Monochrome ,error ){if _ce ==nil {return nil ,_d .New ("\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _egc ==1{return _ce .copy (),nil ;};if !IsPowerOf2 (uint (_egc )){return nil ,_ff .Errorf ("\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006ci\u0064 \u0065x\u0070a\u006e\u0064\u0020\u0066\u0061\u0063\u0074\u006f\u0072\u003a\u0020\u0025\u0064",_egc );
};_ag :=_gcg (_egc );return _fb (_ce ,_egc ,_ag );};func _bb (_acg ,_dbd *Monochrome )(_dg error ){_ef :=_dbd .BytesPerLine ;_egg :=_acg .BytesPerLine ;var (_ceg byte ;_g uint16 ;_dc ,_bbc ,_fed ,_ba ,_fdc int ;);for _fed =0;_fed < _dbd .Height ;_fed ++{_dc =_fed *_ef ;
_bbc =2*_fed *_egg ;for _ba =0;_ba < _ef ;_ba ++{_ceg =_dbd .Data [_dc +_ba ];_g =_eb [_ceg ];_fdc =_bbc +_ba *2;if _acg .BytesPerLine !=_dbd .BytesPerLine *2&&(_ba +1)*2> _acg .BytesPerLine {_dg =_acg .setByte (_fdc ,byte (_g >>8));}else {_dg =_acg .setTwoBytes (_fdc ,_g );
};if _dg !=nil {return _dg ;};};for _ba =0;_ba < _egg ;_ba ++{_fdc =_bbc +_egg +_ba ;_ceg =_acg .Data [_bbc +_ba ];if _dg =_acg .setByte (_fdc ,_ceg );_dg !=nil {return _dg ;};};};return nil ;};func IsPowerOf2 (n uint )bool {return n > 0&&(n &(n -1))==0};
func (_fabe *NRGBA32 )ColorModel ()_f .Model {return _f .NRGBAModel };func _dfb (_bef _e .Image ,_aea Image ,_fcee _e .Rectangle ){for _aaba :=0;_aaba < _fcee .Max .X ;_aaba ++{for _ffda :=0;_ffda < _fcee .Max .Y ;_ffda ++{_cacc :=_bef .At (_aaba ,_ffda );
_aea .Set (_aaba ,_ffda ,_cacc );};};};func (_gaga *Gray4 )ColorAt (x ,y int )(_f .Color ,error ){return ColorAtGray4BPC (x ,y ,_gaga .BytesPerLine ,_gaga .Data ,_gaga .Decode );};func _add (_dbc _f .NRGBA )_f .Gray {var _cgb _f .NRGBA ;if _dbc ==_cgb {return _f .Gray {Y :0xff};
};_gcggg ,_ffdg ,_eeg ,_ :=_dbc .RGBA ();_gee :=(19595*_gcggg +38470*_ffdg +7471*_eeg +1<<15)>>24;return _f .Gray {Y :uint8 (_gee )};};func _cfeda (_dbbb _e .Image ,_acfde Image ,_fceb _e .Rectangle ){switch _gbgg :=_dbbb .(type ){case Gray :_bdgg (_gbgg ,_acfde .(Gray ),_fceb );
case NRGBA :_ecae (_gbgg ,_acfde .(Gray ),_fceb );case CMYK :_gdea (_gbgg ,_acfde .(Gray ),_fceb );case RGBA :_fbaf (_gbgg ,_acfde .(Gray ),_fceb );default:_dfb (_dbbb ,_acfde .(Image ),_fceb );};};func (_fga *CMYK32 )ColorAt (x ,y int )(_f .Color ,error ){return ColorAtCMYK (x ,y ,_fga .Width ,_fga .Data ,_fga .Decode );
};func InDelta (expected ,current ,delta float64 )bool {_bfeb :=expected -current ;if _bfeb <=-delta ||_bfeb >=delta {return false ;};return true ;};func (_aecb *RGBA32 )SetRGBA (x ,y int ,c _f .RGBA ){_bcbe :=y *_aecb .Width +x ;_cdda :=3*_bcbe ;if _cdda +2>=len (_aecb .Data ){return ;
};_aecb .setRGBA (_bcbe ,c );};func (_fcfb *NRGBA64 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_fcfb .Width ,Y :_fcfb .Height }};};func _cfgb (_fba Gray ,_dfge NRGBA ,_cgf _e .Rectangle ){for _gfb :=0;_gfb < _cgf .Max .X ;_gfb ++{for _fcd :=0;
_fcd < _cgf .Max .Y ;_fcd ++{_ggb :=_add (_dfge .NRGBAAt (_gfb ,_fcd ));_fba .SetGray (_gfb ,_fcd ,_ggb );};};};func (_badc *Monochrome )At (x ,y int )_f .Color {_aecc ,_ :=_badc .ColorAt (x ,y );return _aecc };func (_eged *ImageBase )getByte (_fcbf int )(byte ,error ){if _fcbf > len (_eged .Data )-1||_fcbf < 0{return 0,_ff .Errorf ("\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",_fcbf );
};return _eged .Data [_fcbf ],nil ;};func (_dee *ImageBase )setByte (_ccaf int ,_fgb byte )error {if _ccaf > len (_dee .Data )-1{return _d .New ("\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};_dee .Data [_ccaf ]=_fgb ;
return nil ;};func _bcbf (_cacg RGBA ,_cdea CMYK ,_fedb _e .Rectangle ){for _dfg :=0;_dfg < _fedb .Max .X ;_dfg ++{for _cbgg :=0;_cbgg < _fedb .Max .Y ;_cbgg ++{_ccd :=_cacg .RGBAAt (_dfg ,_cbgg );_cdea .SetCMYK (_dfg ,_cbgg ,_fgga (_ccd ));};};};func _eabg (_fcfa *_e .NYCbCrA ,_dcac NRGBA ,_fcde _e .Rectangle ){for _gefb :=0;
_gefb < _fcde .Max .X ;_gefb ++{for _afbb :=0;_afbb < _fcde .Max .Y ;_afbb ++{_dfac :=_fcfa .NYCbCrAAt (_gefb ,_afbb );_dcac .SetNRGBA (_gefb ,_afbb ,_decc (_dfac ));};};};type Gray4 struct{ImageBase };func (_fffa *NRGBA16 )ColorModel ()_f .Model {return NRGBA16Model };
func (_afd *CMYK32 )CMYKAt (x ,y int )_f .CMYK {_bfgg ,_ :=ColorAtCMYK (x ,y ,_afd .Width ,_afd .Data ,_afd .Decode );return _bfgg ;};func (_gccc *RGBA32 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_gccc .Width ,Y :_gccc .Height }};
};func (_ddcf *Monochrome )setGray (_gedda int ,_aabaa _f .Gray ,_agce int ){if _aabaa .Y ==0{_ddcf .clearBit (_agce ,_gedda );}else {_ddcf .setGrayBit (_agce ,_gedda );};};func (_acdc *ImageBase )setEightPartlyBytes (_aabad ,_cfcb int ,_geff uint64 )(_edgb error ){var (_bfd byte ;
_ccdf int ;);for _ebdf :=1;_ebdf <=_cfcb ;_ebdf ++{_ccdf =64-_ebdf *8;_bfd =byte (_geff >>uint (_ccdf )&0xff);if _edgb =_acdc .setByte (_aabad +_ebdf -1,_bfd );_edgb !=nil {return _edgb ;};};_fegg :=_acdc .BytesPerLine *8-_acdc .Width ;if _fegg ==0{return nil ;
};_ccdf -=8;_bfd =byte (_geff >>uint (_ccdf )&0xff)<<uint (_fegg );if _edgb =_acdc .setByte (_aabad +_cfcb ,_bfd );_edgb !=nil {return _edgb ;};return nil ;};func (_ebda *CMYK32 )Base ()*ImageBase {return &_ebda .ImageBase };func _fef (_fcb *Monochrome ,_dag ,_gc int )(*Monochrome ,error ){if _fcb ==nil {return nil ,_d .New ("\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _dag <=0||_gc <=0{return nil ,_d .New ("\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 _dag ==_gc {if _dag ==1{return _fcb .copy (),nil ;};if _dag ==2||_dag ==4||_dag ==8{_bff ,_bc :=_fg (_fcb ,_dag );
if _bc !=nil {return nil ,_bc ;};return _bff ,nil ;};};_fag :=_dag *_fcb .Width ;_aga :=_gc *_fcb .Height ;_cee :=_cegb (_fag ,_aga );_deb :=_cee .BytesPerLine ;var (_bg ,_cdb ,_aeb ,_fcc ,_abf int ;_bee byte ;_ec error ;);for _cdb =0;_cdb < _fcb .Height ;
_cdb ++{_bg =_gc *_cdb *_deb ;for _aeb =0;_aeb < _fcb .Width ;_aeb ++{if _abd :=_fcb .getBitAt (_aeb ,_cdb );_abd {_abf =_dag *_aeb ;for _fcc =0;_fcc < _dag ;_fcc ++{_cee .setIndexedBit (_bg *8+_abf +_fcc );};};};for _fcc =1;_fcc < _gc ;_fcc ++{_gf :=_bg +_fcc *_deb ;
for _bcf :=0;_bcf < _deb ;_bcf ++{if _bee ,_ec =_cee .getByte (_bg +_bcf );_ec !=nil {return nil ,_ec ;};if _ec =_cee .setByte (_gf +_bcf ,_bee );_ec !=nil {return nil ,_ec ;};};};};return _cee ,nil ;};func (_gbb *Gray4 )ColorModel ()_f .Model {return Gray4Model };
func (_bbaa *Gray16 )ColorModel ()_f .Model {return _f .Gray16Model };func _fddf (_dcc _f .NRGBA64 )_f .NRGBA {return _f .NRGBA {R :uint8 (_dcc .R >>8),G :uint8 (_dcc .G >>8),B :uint8 (_dcc .B >>8),A :uint8 (_dcc .A >>8)};};func _dfcc (_febb _f .NRGBA )_f .RGBA {_ebea ,_afff ,_cfcd ,_edg :=_febb .RGBA ();
return _f .RGBA {R :uint8 (_ebea >>8),G :uint8 (_afff >>8),B :uint8 (_cfcd >>8),A :uint8 (_edg >>8)};};func (_adbd *monochromeThresholdConverter )Convert (img _e .Image )(Image ,error ){if _fcgf ,_gabe :=img .(*Monochrome );_gabe {return _fcgf .Copy (),nil ;
};_dedb :=img .Bounds ();_dcf ,_eabd :=NewImage (_dedb .Max .X ,_dedb .Max .Y ,1,1,nil ,nil ,nil );if _eabd !=nil {return nil ,_eabd ;};_dcf .(*Monochrome ).ModelThreshold =_adbd .Threshold ;for _dcbc :=0;_dcbc < _dedb .Max .X ;_dcbc ++{for _efgf :=0;_efgf < _dedb .Max .Y ;
_efgf ++{_dde :=img .At (_dcbc ,_efgf );_dcf .Set (_dcbc ,_efgf ,_dde );};};return _dcf ,nil ;};func (_gebe *Gray2 )ColorAt (x ,y int )(_f .Color ,error ){return ColorAtGray2BPC (x ,y ,_gebe .BytesPerLine ,_gebe .Data ,_gebe .Decode );};func NewImage (width ,height ,bitsPerComponent ,colorComponents int ,data ,alpha []byte ,decode []float64 )(Image ,error ){_gdc :=NewImageBase (width ,height ,bitsPerComponent ,colorComponents ,data ,alpha ,decode );
var _gfc Image ;switch colorComponents {case 1:switch bitsPerComponent {case 1:_gfc =&Monochrome {ImageBase :_gdc ,ModelThreshold :0x0f};case 2:_gfc =&Gray2 {ImageBase :_gdc };case 4:_gfc =&Gray4 {ImageBase :_gdc };case 8:_gfc =&Gray8 {ImageBase :_gdc };
case 16:_gfc =&Gray16 {ImageBase :_gdc };};case 3:switch bitsPerComponent {case 4:_gfc =&NRGBA16 {ImageBase :_gdc };case 8:_gfc =&NRGBA32 {ImageBase :_gdc };case 16:_gfc =&NRGBA64 {ImageBase :_gdc };};case 4:_gfc =&CMYK32 {ImageBase :_gdc };};if _gfc ==nil {return nil ,ErrInvalidImage ;
};return _gfc ,nil ;};type nrgba64 interface{NRGBA64At (_ebee ,_bgbd int )_f .NRGBA64 ;SetNRGBA64 (_gddf ,_gafc int ,_cegc _f .NRGBA64 );};func _gd (_acdb ,_bffg int ,_afg []byte )*Monochrome {_efe :=_cegb (_acdb ,_bffg );_efe .Data =_afg ;return _efe ;
};func _fgg (_agc _e .Image )(Image ,error ){if _ged ,_ad :=_agc .(*CMYK32 );_ad {return _ged .Copy (),nil ;};_daa :=_agc .Bounds ();_efed ,_dgdd :=NewImage (_daa .Max .X ,_daa .Max .Y ,8,4,nil ,nil ,nil );if _dgdd !=nil {return nil ,_dgdd ;};switch _agfd :=_agc .(type ){case CMYK :_cfd (_agfd ,_efed .(CMYK ),_daa );
case Gray :_eab (_agfd ,_efed .(CMYK ),_daa );case NRGBA :_bgc (_agfd ,_efed .(CMYK ),_daa );case RGBA :_bcbf (_agfd ,_efed .(CMYK ),_daa );default:_dfb (_agc ,_efed ,_daa );};return _efed ,nil ;};func _acb (_edefc []byte ,_cfbe Image )error {_cag :=true ;
for _begec :=0;_begec < len (_edefc );_begec ++{if _edefc [_begec ]!=0xff{_cag =false ;break ;};};if _cag {switch _dbfb :=_cfbe .(type ){case *NRGBA32 :_dbfb .Alpha =nil ;case *NRGBA64 :_dbfb .Alpha =nil ;default:return _ff .Errorf ("i\u006ete\u0072n\u0061l\u0020\u0065\u0072\u0072\u006fr\u0020\u002d\u0020i\u006d\u0061\u0067\u0065\u0020s\u0068\u006f\u0075l\u0064\u0020\u0062\u0065\u0020\u006f\u0066\u0020\u0074\u0079\u0070e\u0020\u002a\u004eRGB\u0041\u0033\u0032\u0020\u006f\u0072 \u002a\u004e\u0052\u0047\u0042\u0041\u0036\u0034\u0020\u0062\u0075\u0074 \u0069s\u003a\u0020\u0025\u0054",_cfbe );
};};return nil ;};func NewImageBase (width int ,height int ,bitsPerComponent int ,colorComponents int ,data []byte ,alpha []byte ,decode []float64 )ImageBase {_afdg :=ImageBase {Width :width ,Height :height ,BitsPerComponent :bitsPerComponent ,ColorComponents :colorComponents ,Data :data ,Alpha :alpha ,Decode :decode ,BytesPerLine :BytesPerLine (width ,bitsPerComponent ,colorComponents )};
if data ==nil {_afdg .Data =make ([]byte ,height *_afdg .BytesPerLine );};return _afdg ;};func FromGoImage (i _e .Image )(Image ,error ){switch _cfa :=i .(type ){case Image :return _cfa .Copy (),nil ;case Gray :return GrayConverter .Convert (i );case *_e .Gray16 :return Gray16Converter .Convert (i );
case CMYK :return CMYKConverter .Convert (i );case *_e .NRGBA64 :return NRGBA64Converter .Convert (i );default:return NRGBAConverter .Convert (i );};};type colorConverter struct{_gedd func (_aag _e .Image )(Image ,error );};var _ _e .Image =&RGBA32 {};
var _ Image =&Gray4 {};func _deag (_cdgg _e .Image )(Image ,error ){if _deab ,_fbf :=_cdgg .(*Gray8 );_fbf {return _deab .Copy (),nil ;};_cfee :=_cdgg .Bounds ();_dabb ,_fcf :=NewImage (_cfee .Max .X ,_cfee .Max .Y ,8,1,nil ,nil ,nil );if _fcf !=nil {return nil ,_fcf ;
};_cfeda (_cdgg ,_dabb ,_cfee );return _dabb ,nil ;};func (_dbee colorConverter )Convert (src _e .Image )(Image ,error ){return _dbee ._gedd (src )};func _fec (_bfc ,_fa *Monochrome )(_cbc error ){_edb :=_fa .BytesPerLine ;_cdc :=_bfc .BytesPerLine ;var _cbg ,_bbb ,_aba ,_afa ,_ffe int ;
for _aba =0;_aba < _fa .Height ;_aba ++{_cbg =_aba *_edb ;_bbb =8*_aba *_cdc ;for _afa =0;_afa < _edb ;_afa ++{if _cbc =_bfc .setEightBytes (_bbb +_afa *8,_eagb [_fa .Data [_cbg +_afa ]]);_cbc !=nil {return _cbc ;};};for _ffe =1;_ffe < 8;_ffe ++{for _afa =0;
_afa < _cdc ;_afa ++{if _cbc =_bfc .setByte (_bbb +_ffe *_cdc +_afa ,_bfc .Data [_bbb +_afa ]);_cbc !=nil {return _cbc ;};};};};return nil ;};func MonochromeModel (threshold uint8 )_f .Model {return monochromeModel (threshold )};func (_dfaa *RGBA32 )ColorAt (x ,y int )(_f .Color ,error ){return ColorAtRGBA32 (x ,y ,_dfaa .Width ,_dfaa .Data ,_dfaa .Alpha ,_dfaa .Decode );
};func (_fddb *CMYK32 )Validate ()error {if len (_fddb .Data )!=4*_fddb .Width *_fddb .Height {return _d .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006da\u0067\u0065\u0020\u0064\u0061\u0074\u0061 s\u0069\u007a\u0065\u0020f\u006f\u0072\u0020\u0070\u0072\u006f\u0076\u0069\u0064ed\u0020\u0064i\u006d\u0065\u006e\u0073\u0069\u006f\u006e\u0073");
};return nil ;};func ColorAtGrayscale (x ,y ,bitsPerColor ,bytesPerLine int ,data []byte ,decode []float64 )(_f .Color ,error ){switch bitsPerColor {case 1:return ColorAtGray1BPC (x ,y ,bytesPerLine ,data ,decode );case 2:return ColorAtGray2BPC (x ,y ,bytesPerLine ,data ,decode );
case 4:return ColorAtGray4BPC (x ,y ,bytesPerLine ,data ,decode );case 8:return ColorAtGray8BPC (x ,y ,bytesPerLine ,data ,decode );case 16:return ColorAtGray16BPC (x ,y ,bytesPerLine ,data ,decode );default:return nil ,_ff .Errorf ("\u0075\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064\u0020\u0067\u0072\u0061\u0079\u0020\u0073c\u0061\u006c\u0065\u0020\u0062\u0069\u0074s\u0020\u0070\u0065\u0072\u0020\u0063\u006f\u006c\u006f\u0072\u0020a\u006d\u006f\u0075\u006e\u0074\u003a\u0020\u0027\u0025\u0064\u0027",bitsPerColor );
};};func _cceac (_aebba ,_gegf ,_ebaf byte )byte {return (_aebba &^(_ebaf ))|(_gegf &_ebaf )};func _cda ()(_feb [256]uint32 ){for _caf :=0;_caf < 256;_caf ++{if _caf &0x01!=0{_feb [_caf ]|=0xf;};if _caf &0x02!=0{_feb [_caf ]|=0xf0;};if _caf &0x04!=0{_feb [_caf ]|=0xf00;
};if _caf &0x08!=0{_feb [_caf ]|=0xf000;};if _caf &0x10!=0{_feb [_caf ]|=0xf0000;};if _caf &0x20!=0{_feb [_caf ]|=0xf00000;};if _caf &0x40!=0{_feb [_caf ]|=0xf000000;};if _caf &0x80!=0{_feb [_caf ]|=0xf0000000;};};return _feb ;};var _ NRGBA =&NRGBA32 {};
func (_acff *NRGBA32 )Base ()*ImageBase {return &_acff .ImageBase };func NextPowerOf2 (n uint )uint {if IsPowerOf2 (n ){return n ;};return 1<<(_dgfe (n )+1);};func _decc (_bgce _f .NYCbCrA )_f .NRGBA {_gda :=int32 (_bgce .Y )*0x10101;_ceea :=int32 (_bgce .Cb )-128;
_decd :=int32 (_bgce .Cr )-128;_dbec :=_gda +91881*_decd ;if uint32 (_dbec )&0xff000000==0{_dbec >>=8;}else {_dbec =^(_dbec >>31)&0xffff;};_bdae :=_gda -22554*_ceea -46802*_decd ;if uint32 (_bdae )&0xff000000==0{_bdae >>=8;}else {_bdae =^(_bdae >>31)&0xffff;
};_ggf :=_gda +116130*_ceea ;if uint32 (_ggf )&0xff000000==0{_ggf >>=8;}else {_ggf =^(_ggf >>31)&0xffff;};return _f .NRGBA {R :uint8 (_dbec >>8),G :uint8 (_bdae >>8),B :uint8 (_ggf >>8),A :_bgce .A };};func GetConverter (bitsPerComponent ,colorComponents int )(ColorConverter ,error ){switch colorComponents {case 1:switch bitsPerComponent {case 1:return MonochromeConverter ,nil ;
case 2:return Gray2Converter ,nil ;case 4:return Gray4Converter ,nil ;case 8:return GrayConverter ,nil ;case 16:return Gray16Converter ,nil ;};case 3:switch bitsPerComponent {case 4:return NRGBA16Converter ,nil ;case 8:return NRGBAConverter ,nil ;case 16:return NRGBA64Converter ,nil ;
};case 4:return CMYKConverter ,nil ;};return nil ,_ff .Errorf ("\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u0063\u006f\u006c\u006f\u0072\u0043o\u006e\u0076\u0065\u0072\u0074\u0065\u0072\u0020\u0070\u0061\u0072\u0061\u006d\u0065t\u0065\u0072\u0073\u002e\u0020\u0042\u0069\u0074\u0073\u0050\u0065\u0072\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u003a\u0020\u0025\u0064\u002c\u0020\u0043\u006f\u006co\u0072\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006et\u0073\u003a \u0025\u0064",bitsPerComponent ,colorComponents );
};func (_accg *NRGBA64 )ColorAt (x ,y int )(_f .Color ,error ){return ColorAtNRGBA64 (x ,y ,_accg .Width ,_accg .Data ,_accg .Alpha ,_accg .Decode );};func _cfda (_dbdf _f .RGBA )_f .Gray {_egfe :=(19595*uint32 (_dbdf .R )+38470*uint32 (_dbdf .G )+7471*uint32 (_dbdf .B )+1<<7)>>16;
return _f .Gray {Y :uint8 (_egfe )};};func (_fdbf *CMYK32 )ColorModel ()_f .Model {return _f .CMYKModel };func AddDataPadding (width ,height ,bitsPerComponent ,colorComponents int ,data []byte )([]byte ,error ){_ddfg :=BytesPerLine (width ,bitsPerComponent ,colorComponents );
if _ddfg ==width *colorComponents *bitsPerComponent /8{return data ,nil ;};_cfegd :=width *colorComponents *bitsPerComponent ;_adc :=_ddfg *8;_dcdf :=8-(_adc -_cfegd );_cbea :=_fe .NewReader (data );_ffbac :=_ddfg -1;_eefe :=make ([]byte ,_ffbac );_eegb :=make ([]byte ,height *_ddfg );
_cacf :=_fe .NewWriterMSB (_eegb );var _dfeb uint64 ;var _dbaf error ;for _dcee :=0;_dcee < height ;_dcee ++{_ ,_dbaf =_cbea .Read (_eefe );if _dbaf !=nil {return nil ,_dbaf ;};_ ,_dbaf =_cacf .Write (_eefe );if _dbaf !=nil {return nil ,_dbaf ;};_dfeb ,_dbaf =_cbea .ReadBits (byte (_dcdf ));
if _dbaf !=nil {return nil ,_dbaf ;};_ ,_dbaf =_cacf .WriteBits (_dfeb ,_dcdf );if _dbaf !=nil {return nil ,_dbaf ;};_cacf .FinishByte ();};return _eegb ,nil ;};func _bgbf (_ebeb _e .Image )(Image ,error ){if _ggca ,_gadee :=_ebeb .(*NRGBA16 );_gadee {return _ggca .Copy (),nil ;
};_debe :=_ebeb .Bounds ();_defac ,_ggd :=NewImage (_debe .Max .X ,_debe .Max .Y ,4,3,nil ,nil ,nil );if _ggd !=nil {return nil ,_ggd ;};_adff (_ebeb ,_defac ,_debe );return _defac ,nil ;};type Monochrome struct{ImageBase ;ModelThreshold uint8 ;};func ColorAtGray8BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_f .Gray ,error ){_eaag :=y *bytesPerLine +x ;
if _eaag >=len (data ){return _f .Gray {},_ff .Errorf ("\u0069\u006d\u0061\u0067\u0065\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006ea\u0074\u0065\u0073\u0020\u006f\u0075t\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u0028\u0025\u0064,\u0020\u0025\u0064\u0029",x ,y );
};_dgc :=data [_eaag ];if len (decode )==2{_dgc =uint8 (uint32 (LinearInterpolate (float64 (_dgc ),0,255,decode [0],decode [1]))&0xff);};return _f .Gray {Y :_dgc },nil ;};func (_dbbe *NRGBA32 )At (x ,y int )_f .Color {_dbbec ,_ :=_dbbe .ColorAt (x ,y );
return _dbbec };func _edeac (_eebd nrgba64 ,_acag RGBA ,_abcd _e .Rectangle ){for _efbe :=0;_efbe < _abcd .Max .X ;_efbe ++{for _bcfe :=0;_bcfe < _abcd .Max .Y ;_bcfe ++{_fgecg :=_eebd .NRGBA64At (_efbe ,_bcfe );_acag .SetRGBA (_efbe ,_bcfe ,_aad (_fgecg ));
};};};func _abab (_fcdba *_e .NYCbCrA ,_edcfc RGBA ,_gggf _e .Rectangle ){for _dfaf :=0;_dfaf < _gggf .Max .X ;_dfaf ++{for _bgde :=0;_bgde < _gggf .Max .Y ;_bgde ++{_fcgd :=_fcdba .NYCbCrAAt (_dfaf ,_bgde );_edcfc .SetRGBA (_dfaf ,_bgde ,_bgf (_fcgd ));
};};};func (_gbfdd *NRGBA64 )setNRGBA64 (_dfbc int ,_egd _f .NRGBA64 ,_aebf int ){_gbfdd .Data [_dfbc ]=uint8 (_egd .R >>8);_gbfdd .Data [_dfbc +1]=uint8 (_egd .R &0xff);_gbfdd .Data [_dfbc +2]=uint8 (_egd .G >>8);_gbfdd .Data [_dfbc +3]=uint8 (_egd .G &0xff);
_gbfdd .Data [_dfbc +4]=uint8 (_egd .B >>8);_gbfdd .Data [_dfbc +5]=uint8 (_egd .B &0xff);if _aebf +1< len (_gbfdd .Alpha ){_gbfdd .Alpha [_aebf ]=uint8 (_egd .A >>8);_gbfdd .Alpha [_aebf +1]=uint8 (_egd .A &0xff);};};func (_cddg *Gray8 )Copy ()Image {return &Gray8 {ImageBase :_cddg .copy ()}};
type Image interface{_fd .Image ;Base ()*ImageBase ;Copy ()Image ;Pix ()[]byte ;ColorAt (_dcgg ,_fdf int )(_f .Color ,error );Validate ()error ;};func (_dceb *Gray16 )At (x ,y int )_f .Color {_agfdc ,_ :=_dceb .ColorAt (x ,y );return _agfdc };func _ffbg (_cbge _e .Image ,_aaffd int )(_e .Rectangle ,bool ,[]byte ){_gbcg :=_cbge .Bounds ();
var (_fbdg bool ;_dgfg []byte ;);switch _adbg :=_cbge .(type ){case SMasker :_fbdg =_adbg .HasAlpha ();case NRGBA ,RGBA ,*_e .RGBA64 ,nrgba64 ,*_e .NYCbCrA :_dgfg =make ([]byte ,_gbcg .Max .X *_gbcg .Max .Y *_aaffd );case *_e .Paletted :var _ggfb bool ;
for _ ,_adga :=range _adbg .Palette {_bcda ,_cbag ,_ffa ,_ggbc :=_adga .RGBA ();if _bcda ==0&&_cbag ==0&&_ffa ==0&&_ggbc !=0{_ggfb =true ;break ;};};if _ggfb {_dgfg =make ([]byte ,_gbcg .Max .X *_gbcg .Max .Y *_aaffd );};};return _gbcg ,_fbdg ,_dgfg ;};
func (_bdcc *RGBA32 )ColorModel ()_f .Model {return _f .NRGBAModel };func _bcdd (_age *Monochrome ,_gbbea ,_fccg ,_dcbf ,_baeeb int ,_gddb RasterOperator ,_fgbb *Monochrome ,_afc ,_adfc int )error {var (_gcde byte ;_affd int ;_dged int ;_gccg ,_becg int ;
_beaaf ,_cbba int ;);_ecbf :=_dcbf >>3;_fgaf :=_dcbf &7;if _fgaf > 0{_gcde =_dege [_fgaf ];};_affd =_fgbb .BytesPerLine *_adfc +(_afc >>3);_dged =_age .BytesPerLine *_fccg +(_gbbea >>3);switch _gddb {case PixSrc :for _beaaf =0;_beaaf < _baeeb ;_beaaf ++{_gccg =_affd +_beaaf *_fgbb .BytesPerLine ;
_becg =_dged +_beaaf *_age .BytesPerLine ;for _cbba =0;_cbba < _ecbf ;_cbba ++{_age .Data [_becg ]=_fgbb .Data [_gccg ];_becg ++;_gccg ++;};if _fgaf > 0{_age .Data [_becg ]=_cceac (_age .Data [_becg ],_fgbb .Data [_gccg ],_gcde );};};case PixNotSrc :for _beaaf =0;
_beaaf < _baeeb ;_beaaf ++{_gccg =_affd +_beaaf *_fgbb .BytesPerLine ;_becg =_dged +_beaaf *_age .BytesPerLine ;for _cbba =0;_cbba < _ecbf ;_cbba ++{_age .Data [_becg ]=^(_fgbb .Data [_gccg ]);_becg ++;_gccg ++;};if _fgaf > 0{_age .Data [_becg ]=_cceac (_age .Data [_becg ],^_fgbb .Data [_gccg ],_gcde );
};};case PixSrcOrDst :for _beaaf =0;_beaaf < _baeeb ;_beaaf ++{_gccg =_affd +_beaaf *_fgbb .BytesPerLine ;_becg =_dged +_beaaf *_age .BytesPerLine ;for _cbba =0;_cbba < _ecbf ;_cbba ++{_age .Data [_becg ]|=_fgbb .Data [_gccg ];_becg ++;_gccg ++;};if _fgaf > 0{_age .Data [_becg ]=_cceac (_age .Data [_becg ],_fgbb .Data [_gccg ]|_age .Data [_becg ],_gcde );
};};case PixSrcAndDst :for _beaaf =0;_beaaf < _baeeb ;_beaaf ++{_gccg =_affd +_beaaf *_fgbb .BytesPerLine ;_becg =_dged +_beaaf *_age .BytesPerLine ;for _cbba =0;_cbba < _ecbf ;_cbba ++{_age .Data [_becg ]&=_fgbb .Data [_gccg ];_becg ++;_gccg ++;};if _fgaf > 0{_age .Data [_becg ]=_cceac (_age .Data [_becg ],_fgbb .Data [_gccg ]&_age .Data [_becg ],_gcde );
};};case PixSrcXorDst :for _beaaf =0;_beaaf < _baeeb ;_beaaf ++{_gccg =_affd +_beaaf *_fgbb .BytesPerLine ;_becg =_dged +_beaaf *_age .BytesPerLine ;for _cbba =0;_cbba < _ecbf ;_cbba ++{_age .Data [_becg ]^=_fgbb .Data [_gccg ];_becg ++;_gccg ++;};if _fgaf > 0{_age .Data [_becg ]=_cceac (_age .Data [_becg ],_fgbb .Data [_gccg ]^_age .Data [_becg ],_gcde );
};};case PixNotSrcOrDst :for _beaaf =0;_beaaf < _baeeb ;_beaaf ++{_gccg =_affd +_beaaf *_fgbb .BytesPerLine ;_becg =_dged +_beaaf *_age .BytesPerLine ;for _cbba =0;_cbba < _ecbf ;_cbba ++{_age .Data [_becg ]|=^(_fgbb .Data [_gccg ]);_becg ++;_gccg ++;};
if _fgaf > 0{_age .Data [_becg ]=_cceac (_age .Data [_becg ],^(_fgbb .Data [_gccg ])|_age .Data [_becg ],_gcde );};};case PixNotSrcAndDst :for _beaaf =0;_beaaf < _baeeb ;_beaaf ++{_gccg =_affd +_beaaf *_fgbb .BytesPerLine ;_becg =_dged +_beaaf *_age .BytesPerLine ;
for _cbba =0;_cbba < _ecbf ;_cbba ++{_age .Data [_becg ]&=^(_fgbb .Data [_gccg ]);_becg ++;_gccg ++;};if _fgaf > 0{_age .Data [_becg ]=_cceac (_age .Data [_becg ],^(_fgbb .Data [_gccg ])&_age .Data [_becg ],_gcde );};};case PixSrcOrNotDst :for _beaaf =0;
_beaaf < _baeeb ;_beaaf ++{_gccg =_affd +_beaaf *_fgbb .BytesPerLine ;_becg =_dged +_beaaf *_age .BytesPerLine ;for _cbba =0;_cbba < _ecbf ;_cbba ++{_age .Data [_becg ]=_fgbb .Data [_gccg ]|^(_age .Data [_becg ]);_becg ++;_gccg ++;};if _fgaf > 0{_age .Data [_becg ]=_cceac (_age .Data [_becg ],_fgbb .Data [_gccg ]|^(_age .Data [_becg ]),_gcde );
};};case PixSrcAndNotDst :for _beaaf =0;_beaaf < _baeeb ;_beaaf ++{_gccg =_affd +_beaaf *_fgbb .BytesPerLine ;_becg =_dged +_beaaf *_age .BytesPerLine ;for _cbba =0;_cbba < _ecbf ;_cbba ++{_age .Data [_becg ]=_fgbb .Data [_gccg ]&^(_age .Data [_becg ]);
_becg ++;_gccg ++;};if _fgaf > 0{_age .Data [_becg ]=_cceac (_age .Data [_becg ],_fgbb .Data [_gccg ]&^(_age .Data [_becg ]),_gcde );};};case PixNotPixSrcOrDst :for _beaaf =0;_beaaf < _baeeb ;_beaaf ++{_gccg =_affd +_beaaf *_fgbb .BytesPerLine ;_becg =_dged +_beaaf *_age .BytesPerLine ;
for _cbba =0;_cbba < _ecbf ;_cbba ++{_age .Data [_becg ]=^(_fgbb .Data [_gccg ]|_age .Data [_becg ]);_becg ++;_gccg ++;};if _fgaf > 0{_age .Data [_becg ]=_cceac (_age .Data [_becg ],^(_fgbb .Data [_gccg ]|_age .Data [_becg ]),_gcde );};};case PixNotPixSrcAndDst :for _beaaf =0;
_beaaf < _baeeb ;_beaaf ++{_gccg =_affd +_beaaf *_fgbb .BytesPerLine ;_becg =_dged +_beaaf *_age .BytesPerLine ;for _cbba =0;_cbba < _ecbf ;_cbba ++{_age .Data [_becg ]=^(_fgbb .Data [_gccg ]&_age .Data [_becg ]);_becg ++;_gccg ++;};if _fgaf > 0{_age .Data [_becg ]=_cceac (_age .Data [_becg ],^(_fgbb .Data [_gccg ]&_age .Data [_becg ]),_gcde );
};};case PixNotPixSrcXorDst :for _beaaf =0;_beaaf < _baeeb ;_beaaf ++{_gccg =_affd +_beaaf *_fgbb .BytesPerLine ;_becg =_dged +_beaaf *_age .BytesPerLine ;for _cbba =0;_cbba < _ecbf ;_cbba ++{_age .Data [_becg ]=^(_fgbb .Data [_gccg ]^_age .Data [_becg ]);
_becg ++;_gccg ++;};if _fgaf > 0{_age .Data [_becg ]=_cceac (_age .Data [_becg ],^(_fgbb .Data [_gccg ]^_age .Data [_becg ]),_gcde );};};default:_cb .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",_gddb );
return _d .New ("\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");};return nil ;};func _aeaec (_bffe uint8 )bool {if _bffe ==0||_bffe ==255{return true ;};return false ;};
func _dae (_aafg _f .NRGBA64 )_f .Gray {var _bfgb _f .NRGBA64 ;if _aafg ==_bfgb {return _f .Gray {Y :0xff};};_fega ,_ddbe ,_dedd ,_ :=_aafg .RGBA ();_def :=(19595*_fega +38470*_ddbe +7471*_dedd +1<<15)>>24;return _f .Gray {Y :uint8 (_def )};};func _cbdc (_edeag ,_eada uint8 )uint8 {if _edeag < _eada {return 255;
};return 0;};func _bgf (_faa _f .NYCbCrA )_f .RGBA {_eef ,_ddg ,_bfag ,_cca :=_decc (_faa ).RGBA ();return _f .RGBA {R :uint8 (_eef >>8),G :uint8 (_ddg >>8),B :uint8 (_bfag >>8),A :uint8 (_cca >>8)};};func _fca (_gbcf _f .Gray )_f .NRGBA {return _f .NRGBA {R :_gbcf .Y ,G :_gbcf .Y ,B :_gbcf .Y ,A :0xff}};
func _gcge (_bfb _e .Image )(Image ,error ){if _bga ,_agd :=_bfb .(*Monochrome );_agd {return _bga ,nil ;};_gdb :=_bfb .Bounds ();var _fgd Gray ;switch _fea :=_bfb .(type ){case Gray :_fgd =_fea ;case NRGBA :_fgd =&Gray8 {ImageBase :NewImageBase (_gdb .Max .X ,_gdb .Max .Y ,8,1,nil ,nil ,nil )};
_cfgb (_fgd ,_fea ,_gdb );case nrgba64 :_fgd =&Gray8 {ImageBase :NewImageBase (_gdb .Max .X ,_gdb .Max .Y ,8,1,nil ,nil ,nil )};_afda (_fgd ,_fea ,_gdb );default:_fcaa ,_bdab :=GrayConverter .Convert (_bfb );if _bdab !=nil {return nil ,_bdab ;};_fgd =_fcaa .(Gray );
};_edec ,_ddcg :=NewImage (_gdb .Max .X ,_gdb .Max .Y ,1,1,nil ,nil ,nil );if _ddcg !=nil {return nil ,_ddcg ;};_fbec :=_edec .(*Monochrome );_ccf :=AutoThresholdTriangle (GrayHistogram (_fgd ));for _gaab :=0;_gaab < _gdb .Max .X ;_gaab ++{for _cefg :=0;
_cefg < _gdb .Max .Y ;_cefg ++{_aedg :=_dccb (_fgd .GrayAt (_gaab ,_cefg ),monochromeModel (_ccf ));_fbec .SetGray (_gaab ,_cefg ,_aedg );};};return _edec ,nil ;};func ColorAtGray2BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_f .Gray ,error ){_fgae :=y *bytesPerLine +x >>2;
if _fgae >=len (data ){return _f .Gray {},_ff .Errorf ("\u0069\u006d\u0061\u0067\u0065\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006ea\u0074\u0065\u0073\u0020\u006f\u0075t\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u0028\u0025\u0064,\u0020\u0025\u0064\u0029",x ,y );
};_bdg :=data [_fgae ]>>uint (6-(x &3)*2)&3;if len (decode )==2{_bdg =uint8 (uint32 (LinearInterpolate (float64 (_bdg ),0,3.0,decode [0],decode [1]))&3);};return _f .Gray {Y :_bdg *85},nil ;};func ImgToBinary (i _e .Image ,threshold uint8 )*_e .Gray {switch _degf :=i .(type ){case *_e .Gray :if _gddbe (_degf ){return _degf ;
};return _baceg (_degf ,threshold );case *_e .Gray16 :return _afdb (_degf ,threshold );default:return _ebgfed (_degf ,threshold );};};var _ Gray =&Gray2 {};func (_bege *Gray2 )GrayAt (x ,y int )_f .Gray {_cdeb ,_ :=ColorAtGray2BPC (x ,y ,_bege .BytesPerLine ,_bege .Data ,_bege .Decode );
return _cdeb ;};func GrayHistogram (g Gray )(_cegf [256]int ){switch _acda :=g .(type ){case Histogramer :return _acda .Histogram ();case _e .Image :_bfea :=_acda .Bounds ();for _bgea :=0;_bgea < _bfea .Max .X ;_bgea ++{for _cdfc :=0;_cdfc < _bfea .Max .Y ;
_cdfc ++{_cegf [g .GrayAt (_bgea ,_cdfc ).Y ]++;};};return _cegf ;default:return [256]int {};};};func _ddde (_eafe CMYK ,_gdcc RGBA ,_edff _e .Rectangle ){for _afdd :=0;_afdd < _edff .Max .X ;_afdd ++{for _cbfga :=0;_cbfga < _edff .Max .Y ;_cbfga ++{_eegd :=_eafe .CMYKAt (_afdd ,_cbfga );
_gdcc .SetRGBA (_afdd ,_cbfga ,_aaab (_eegd ));};};};type shift int ;func (_ddc *CMYK32 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_ddc .Width ,Y :_ddc .Height }};};type CMYK interface{CMYKAt (_bfa ,_cfea int )_f .CMYK ;SetCMYK (_gfa ,_dba int ,_cde _f .CMYK );
};var _ NRGBA =&NRGBA16 {};var _ _e .Image =&NRGBA64 {};func (_ebgf *Gray16 )ColorAt (x ,y int )(_f .Color ,error ){return ColorAtGray16BPC (x ,y ,_ebgf .BytesPerLine ,_ebgf .Data ,_ebgf .Decode );};