unipdf/internal/imageutil/imageutil.go
2024-04-16 11:40:43 +00:00

403 lines
115 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 (_a "encoding/binary";_f "errors";_ab "fmt";_gbb "github.com/unidoc/unipdf/v3/common";_d "github.com/unidoc/unipdf/v3/internal/bitwise";_e "image";_gbg "image/color";_c "image/draw";_gb "math";);func (_bedf *NRGBA32 )setRGBA (_begg int ,_gefga _gbg .NRGBA ){_gggf :=3*_begg ;
_bedf .Data [_gggf ]=_gefga .R ;_bedf .Data [_gggf +1]=_gefga .G ;_bedf .Data [_gggf +2]=_gefga .B ;if _begg < len (_bedf .Alpha ){_bedf .Alpha [_begg ]=_gefga .A ;};};func (_fgaba *RGBA32 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_fgaba .Width ,Y :_fgaba .Height }};
};func _ee (_bc *Monochrome ,_cfd ,_cfb int )(*Monochrome ,error ){if _bc ==nil {return nil ,_f .New ("\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cfd <=0||_cfb <=0{return nil ,_f .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 _cfd ==_cfb {if _cfd ==1{return _bc .copy (),nil ;};if _cfd ==2||_cfd ==4||_cfd ==8{_fb ,_gga :=_fea (_bc ,_cfd );if _gga !=nil {return nil ,_gga ;};return _fb ,nil ;};};_dbe :=_cfd *_bc .Width ;_cea :=_cfb *_bc .Height ;_dd :=_dagf (_dbe ,_cea );
_bea :=_dd .BytesPerLine ;var (_dg ,_fdb ,_cab ,_ccb ,_afd int ;_fdc byte ;_eb error ;);for _fdb =0;_fdb < _bc .Height ;_fdb ++{_dg =_cfb *_fdb *_bea ;for _cab =0;_cab < _bc .Width ;_cab ++{if _fge :=_bc .getBitAt (_cab ,_fdb );_fge {_afd =_cfd *_cab ;
for _ccb =0;_ccb < _cfd ;_ccb ++{_dd .setIndexedBit (_dg *8+_afd +_ccb );};};};for _ccb =1;_ccb < _cfb ;_ccb ++{_gfb :=_dg +_ccb *_bea ;for _gbc :=0;_gbc < _bea ;_gbc ++{if _fdc ,_eb =_dd .getByte (_dg +_gbc );_eb !=nil {return nil ,_eb ;};if _eb =_dd .setByte (_gfb +_gbc ,_fdc );
_eb !=nil {return nil ,_eb ;};};};};return _dd ,nil ;};type CMYK32 struct{ImageBase };func _egccc (_daea *_e .NYCbCrA ,_cbag RGBA ,_ceaa _e .Rectangle ){for _bfgaf :=0;_bfgaf < _ceaa .Max .X ;_bfgaf ++{for _ddac :=0;_ddac < _ceaa .Max .Y ;_ddac ++{_caeg :=_daea .NYCbCrAAt (_bfgaf ,_ddac );
_cbag .SetRGBA (_bfgaf ,_ddac ,_deb (_caeg ));};};};func (_dbag *Gray2 )Set (x ,y int ,c _gbg .Color ){if x >=_dbag .Width ||y >=_dbag .Height {return ;};_gaec :=Gray2Model .Convert (c ).(_gbg .Gray );_ffgg :=y *_dbag .BytesPerLine ;_cffa :=_ffgg +(x >>2);
_dgdb :=_gaec .Y >>6;_dbag .Data [_cffa ]=(_dbag .Data [_cffa ]&(^(0xc0>>uint (2*((x )&3)))))|(_dgdb <<uint (6-2*(x &3)));};type RGBA interface{RGBAAt (_ede ,_adgfd int )_gbg .RGBA ;SetRGBA (_badg ,_bfdg int ,_eagb _gbg .RGBA );};func (_bgg *Gray16 )Base ()*ImageBase {return &_bgg .ImageBase };
type colorConverter struct{_ggc func (_aagb _e .Image )(Image ,error );};func (_agfc *Gray2 )ColorModel ()_gbg .Model {return Gray2Model };func (_fcgb *Gray8 )GrayAt (x ,y int )_gbg .Gray {_fag ,_ :=ColorAtGray8BPC (x ,y ,_fcgb .BytesPerLine ,_fcgb .Data ,_fcgb .Decode );
return _fag ;};func _bgfd (_ebcb _e .Image )(Image ,error ){if _cagf ,_cbff :=_ebcb .(*CMYK32 );_cbff {return _cagf .Copy (),nil ;};_caad :=_ebcb .Bounds ();_gec ,_dbec :=NewImage (_caad .Max .X ,_caad .Max .Y ,8,4,nil ,nil ,nil );if _dbec !=nil {return nil ,_dbec ;
};switch _ddad :=_ebcb .(type ){case CMYK :_bge (_ddad ,_gec .(CMYK ),_caad );case Gray :_afga (_ddad ,_gec .(CMYK ),_caad );case NRGBA :_cdb (_ddad ,_gec .(CMYK ),_caad );case RGBA :_bbg (_ddad ,_gec .(CMYK ),_caad );default:_fdea (_ebcb ,_gec ,_caad );
};return _gec ,nil ;};func _bde (_dbd _gbg .NRGBA64 )_gbg .NRGBA {return _gbg .NRGBA {R :uint8 (_dbd .R >>8),G :uint8 (_dbd .G >>8),B :uint8 (_dbd .B >>8),A :uint8 (_dbd .A >>8)};};func (_eeb *Gray2 )GrayAt (x ,y int )_gbg .Gray {_gceb ,_ :=ColorAtGray2BPC (x ,y ,_eeb .BytesPerLine ,_eeb .Data ,_eeb .Decode );
return _gceb ;};var _ _e .Image =&Monochrome {};func (_gfdf *Monochrome )setBit (_cgeb ,_fca int ){_gfdf .Data [_cgeb +(_fca >>3)]|=0x80>>uint (_fca &7)};func _afge (_bfb _gbg .NRGBA64 )_gbg .RGBA {_cfac ,_dbcb ,_dgbd ,_cadc :=_bfb .RGBA ();return _gbg .RGBA {R :uint8 (_cfac >>8),G :uint8 (_dbcb >>8),B :uint8 (_dgbd >>8),A :uint8 (_cadc >>8)};
};var _ _e .Image =&Gray8 {};func (_daafaf *RGBA32 )setRGBA (_dccb int ,_ffcg _gbg .RGBA ){_agfd :=3*_dccb ;_daafaf .Data [_agfd ]=_ffcg .R ;_daafaf .Data [_agfd +1]=_ffcg .G ;_daafaf .Data [_agfd +2]=_ffcg .B ;if _dccb < len (_daafaf .Alpha ){_daafaf .Alpha [_dccb ]=_ffcg .A ;
};};type Gray interface{GrayAt (_adgf ,_ece int )_gbg .Gray ;SetGray (_agg ,_cgd int ,_fcd _gbg .Gray );};func NewImage (width ,height ,bitsPerComponent ,colorComponents int ,data ,alpha []byte ,decode []float64 )(Image ,error ){_cffaf :=NewImageBase (width ,height ,bitsPerComponent ,colorComponents ,data ,alpha ,decode );
var _ccda Image ;switch colorComponents {case 1:switch bitsPerComponent {case 1:_ccda =&Monochrome {ImageBase :_cffaf ,ModelThreshold :0x0f};case 2:_ccda =&Gray2 {ImageBase :_cffaf };case 4:_ccda =&Gray4 {ImageBase :_cffaf };case 8:_ccda =&Gray8 {ImageBase :_cffaf };
case 16:_ccda =&Gray16 {ImageBase :_cffaf };};case 3:switch bitsPerComponent {case 4:_ccda =&NRGBA16 {ImageBase :_cffaf };case 8:_ccda =&NRGBA32 {ImageBase :_cffaf };case 16:_ccda =&NRGBA64 {ImageBase :_cffaf };};case 4:_ccda =&CMYK32 {ImageBase :_cffaf };
};if _ccda ==nil {return nil ,ErrInvalidImage ;};return _ccda ,nil ;};func _ddfc (_ffcd _gbg .Gray )_gbg .Gray {_ffcd .Y >>=4;_ffcd .Y |=_ffcd .Y <<4;return _ffcd };func (_ddfce *NRGBA64 )Base ()*ImageBase {return &_ddfce .ImageBase };func (_cfce *Monochrome )copy ()*Monochrome {_fdga :=_dagf (_cfce .Width ,_cfce .Height );
_fdga .ModelThreshold =_cfce .ModelThreshold ;_fdga .Data =make ([]byte ,len (_cfce .Data ));copy (_fdga .Data ,_cfce .Data );if len (_cfce .Decode )!=0{_fdga .Decode =make ([]float64 ,len (_cfce .Decode ));copy (_fdga .Decode ,_cfce .Decode );};if len (_cfce .Alpha )!=0{_fdga .Alpha =make ([]byte ,len (_cfce .Alpha ));
copy (_fdga .Alpha ,_cfce .Alpha );};return _fdga ;};func (_edaa *ImageBase )setTwoBytes (_dfdd int ,_deeb uint16 )error {if _dfdd +1> len (_edaa .Data )-1{return _f .New ("\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_edaa .Data [_dfdd ]=byte ((_deeb &0xff00)>>8);_edaa .Data [_dfdd +1]=byte (_deeb &0xff);return nil ;};func _fead (_edec RGBA ,_gfac NRGBA ,_fdfg _e .Rectangle ){for _caagc :=0;_caagc < _fdfg .Max .X ;_caagc ++{for _bdfd :=0;_bdfd < _fdfg .Max .Y ;_bdfd ++{_cfgb :=_edec .RGBAAt (_caagc ,_bdfd );
_gfac .SetNRGBA (_caagc ,_bdfd ,_fad (_cfgb ));};};};func (_cfbg *Gray16 )Set (x ,y int ,c _gbg .Color ){_bac :=(y *_cfbg .BytesPerLine /2+x )*2;if _bac +1>=len (_cfbg .Data ){return ;};_dedb :=_gbg .Gray16Model .Convert (c ).(_gbg .Gray16 );_cfbg .Data [_bac ],_cfbg .Data [_bac +1]=uint8 (_dedb .Y >>8),uint8 (_dedb .Y &0xff);
};func (_bcge *NRGBA16 )ColorModel ()_gbg .Model {return NRGBA16Model };func (_gaf *CMYK32 )CMYKAt (x ,y int )_gbg .CMYK {_ebg ,_ :=ColorAtCMYK (x ,y ,_gaf .Width ,_gaf .Data ,_gaf .Decode );return _ebg ;};var _ Image =&Gray4 {};func _gbgg ()(_ffeb [256]uint32 ){for _fcgfd :=0;
_fcgfd < 256;_fcgfd ++{if _fcgfd &0x01!=0{_ffeb [_fcgfd ]|=0xf;};if _fcgfd &0x02!=0{_ffeb [_fcgfd ]|=0xf0;};if _fcgfd &0x04!=0{_ffeb [_fcgfd ]|=0xf00;};if _fcgfd &0x08!=0{_ffeb [_fcgfd ]|=0xf000;};if _fcgfd &0x10!=0{_ffeb [_fcgfd ]|=0xf0000;};if _fcgfd &0x20!=0{_ffeb [_fcgfd ]|=0xf00000;
};if _fcgfd &0x40!=0{_ffeb [_fcgfd ]|=0xf000000;};if _fcgfd &0x80!=0{_ffeb [_fcgfd ]|=0xf0000000;};};return _ffeb ;};func (_aac *Gray2 )At (x ,y int )_gbg .Color {_bdcc ,_ :=_aac .ColorAt (x ,y );return _bdcc };type ColorConverter interface{Convert (_abe _e .Image )(Image ,error );
};func _eebe (_abfg CMYK ,_gccd NRGBA ,_gdg _e .Rectangle ){for _eafbe :=0;_eafbe < _gdg .Max .X ;_eafbe ++{for _gdagg :=0;_gdagg < _gdg .Max .Y ;_gdagg ++{_ccae :=_abfg .CMYKAt (_eafbe ,_gdagg );_gccd .SetNRGBA (_eafbe ,_gdagg ,_ega (_ccae ));};};};func (_gbdd *Gray8 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_gbdd .Width ,Y :_gbdd .Height }};
};func _bffa (_cdafc _e .Image )(Image ,error ){if _faada ,_babd :=_cdafc .(*Gray4 );_babd {return _faada .Copy (),nil ;};_dacf :=_cdafc .Bounds ();_efaad ,_ccbe :=NewImage (_dacf .Max .X ,_dacf .Max .Y ,4,1,nil ,nil ,nil );if _ccbe !=nil {return nil ,_ccbe ;
};_cdba (_cdafc ,_efaad ,_dacf );return _efaad ,nil ;};func _aaag (_cagec _gbg .Color )_gbg .Color {_cfcf :=_gbg .GrayModel .Convert (_cagec ).(_gbg .Gray );return _ddfc (_cfcf );};func ColorAtNRGBA (x ,y ,width ,bytesPerLine ,bitsPerColor int ,data ,alpha []byte ,decode []float64 )(_gbg .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 ,_ab .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 (_ggadb *Gray8 )Base ()*ImageBase {return &_ggadb .ImageBase };func _faf (_dcda _gbg .NRGBA )_gbg .Gray {_cfdc ,_fbcd ,_daaf ,_ :=_dcda .RGBA ();_adff :=(19595*_cfdc +38470*_fbcd +7471*_daaf +1<<15)>>24;return _gbg .Gray {Y :uint8 (_adff )};};
func _deb (_ddf _gbg .NYCbCrA )_gbg .RGBA {_ecdg ,_aaa ,_gbbbe ,_faad :=_dace (_ddf ).RGBA ();return _gbg .RGBA {R :uint8 (_ecdg >>8),G :uint8 (_aaa >>8),B :uint8 (_gbbbe >>8),A :uint8 (_faad >>8)};};func (_badc *NRGBA64 )Copy ()Image {return &NRGBA64 {ImageBase :_badc .copy ()}};
func _dfe (_caaf _gbg .NRGBA )_gbg .CMYK {_gee ,_edd ,_gge ,_ :=_caaf .RGBA ();_efce ,_dfda ,_acga ,_cbb :=_gbg .RGBToCMYK (uint8 (_gee >>8),uint8 (_edd >>8),uint8 (_gge >>8));return _gbg .CMYK {C :_efce ,M :_dfda ,Y :_acga ,K :_cbb };};func _dbege (_eagbf []byte ,_acf Image )error {_gaece :=true ;
for _edga :=0;_edga < len (_eagbf );_edga ++{if _eagbf [_edga ]!=0xff{_gaece =false ;break ;};};if _gaece {switch _cdae :=_acf .(type ){case *NRGBA32 :_cdae .Alpha =nil ;case *NRGBA64 :_cdae .Alpha =nil ;default:return _ab .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",_acf );
};};return nil ;};func ColorAtRGBA32 (x ,y ,width int ,data ,alpha []byte ,decode []float64 )(_gbg .RGBA ,error ){_acb :=y *width +x ;_dcfdf :=3*_acb ;if _dcfdf +2>=len (data ){return _gbg .RGBA {},_ab .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 );
};_gadd :=uint8 (0xff);if alpha !=nil &&len (alpha )> _acb {_gadd =alpha [_acb ];};_cede ,_abgd ,_ceaf :=data [_dcfdf ],data [_dcfdf +1],data [_dcfdf +2];if len (decode )==6{_cede =uint8 (uint32 (LinearInterpolate (float64 (_cede ),0,255,decode [0],decode [1]))&0xff);
_abgd =uint8 (uint32 (LinearInterpolate (float64 (_abgd ),0,255,decode [2],decode [3]))&0xff);_ceaf =uint8 (uint32 (LinearInterpolate (float64 (_ceaf ),0,255,decode [4],decode [5]))&0xff);};return _gbg .RGBA {R :_cede ,G :_abgd ,B :_ceaf ,A :_gadd },nil ;
};type RasterOperator int ;func (_geaa *Gray8 )Set (x ,y int ,c _gbg .Color ){_aadbb :=y *_geaa .BytesPerLine +x ;if _aadbb > len (_geaa .Data )-1{return ;};_feff :=_gbg .GrayModel .Convert (c );_geaa .Data [_aadbb ]=_feff .(_gbg .Gray ).Y ;};func _dadg (_dgge _gbg .CMYK )_gbg .RGBA {_abd ,_bed ,_cfc :=_gbg .CMYKToRGB (_dgge .C ,_dgge .M ,_dgge .Y ,_dgge .K );
return _gbg .RGBA {R :_abd ,G :_bed ,B :_cfc ,A :0xff};};func (_fec *Gray16 )ColorAt (x ,y int )(_gbg .Color ,error ){return ColorAtGray16BPC (x ,y ,_fec .BytesPerLine ,_fec .Data ,_fec .Decode );};func _accbe (_afgaa ,_cdbag ,_gggd byte )byte {return (_afgaa &^(_gggd ))|(_cdbag &_gggd )};
func _gcc (_caag _gbg .Gray )_gbg .CMYK {return _gbg .CMYK {K :0xff-_caag .Y }};func (_aca *Monochrome )At (x ,y int )_gbg .Color {_ddfe ,_ :=_aca .ColorAt (x ,y );return _ddfe };func (_dbab *Monochrome )clearBit (_afgg ,_ffag int ){_dbab .Data [_afgg ]&=^(0x80>>uint (_ffag &7))};
func _fea (_fc *Monochrome ,_gf int )(*Monochrome ,error ){if _fc ==nil {return nil ,_f .New ("\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _gf ==1{return _fc .copy (),nil ;};if !IsPowerOf2 (uint (_gf )){return nil ,_ab .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",_gf );
};_dfa :=_fgc (_gf );return _gg (_fc ,_gf ,_dfa );};func (_ecg *CMYK32 )SetCMYK (x ,y int ,c _gbg .CMYK ){_bec :=4*(y *_ecg .Width +x );if _bec +3>=len (_ecg .Data ){return ;};_ecg .Data [_bec ]=c .C ;_ecg .Data [_bec +1]=c .M ;_ecg .Data [_bec +2]=c .Y ;
_ecg .Data [_bec +3]=c .K ;};func IsGrayImgBlackAndWhite (i *_e .Gray )bool {return _fgbf (i )};func (_eecb *Gray2 )Histogram ()(_gffa [256]int ){for _bfd :=0;_bfd < _eecb .Width ;_bfd ++{for _ggcc :=0;_ggcc < _eecb .Height ;_ggcc ++{_gffa [_eecb .GrayAt (_bfd ,_ggcc ).Y ]++;
};};return _gffa ;};func (_cfag *Gray4 )At (x ,y int )_gbg .Color {_fdcf ,_ :=_cfag .ColorAt (x ,y );return _fdcf };var _edb [256]uint8 ;func (_gagd *Gray16 )ColorModel ()_gbg .Model {return _gbg .Gray16Model };func _bbcbea (_eaba _gbg .NRGBA )_gbg .NRGBA {_eaba .R =_eaba .R >>4|(_eaba .R >>4)<<4;
_eaba .G =_eaba .G >>4|(_eaba .G >>4)<<4;_eaba .B =_eaba .B >>4|(_eaba .B >>4)<<4;return _eaba ;};func (_gba *Monochrome )ColorModel ()_gbg .Model {return MonochromeModel (_gba .ModelThreshold )};func _ega (_dfd _gbg .CMYK )_gbg .NRGBA {_bgeg ,_gdd ,_ffee :=_gbg .CMYKToRGB (_dfd .C ,_dfd .M ,_dfd .Y ,_dfd .K );
return _gbg .NRGBA {R :_bgeg ,G :_gdd ,B :_ffee ,A :0xff};};func InDelta (expected ,current ,delta float64 )bool {_ggcg :=expected -current ;if _ggcg <=-delta ||_ggcg >=delta {return false ;};return true ;};var _ _e .Image =&Gray2 {};func (_fcfc *Monochrome )setGrayBit (_bgec ,_baab int ){_fcfc .Data [_bgec ]|=0x80>>uint (_baab &7)};
func (_daafa *Gray16 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_daafa .Width ,Y :_daafa .Height }};};func (_cfdga *ImageBase )setEightPartlyBytes (_fdec ,_agca int ,_fefdc uint64 )(_dbf error ){var (_aff byte ;_bcdg int ;);for _dfcb :=1;
_dfcb <=_agca ;_dfcb ++{_bcdg =64-_dfcb *8;_aff =byte (_fefdc >>uint (_bcdg )&0xff);if _dbf =_cfdga .setByte (_fdec +_dfcb -1,_aff );_dbf !=nil {return _dbf ;};};_abdc :=_cfdga .BytesPerLine *8-_cfdga .Width ;if _abdc ==0{return nil ;};_bcdg -=8;_aff =byte (_fefdc >>uint (_bcdg )&0xff)<<uint (_abdc );
if _dbf =_cfdga .setByte (_fdec +_agca ,_aff );_dbf !=nil {return _dbf ;};return nil ;};func NewImageBase (width int ,height int ,bitsPerComponent int ,colorComponents int ,data []byte ,alpha []byte ,decode []float64 )ImageBase {_ecae :=ImageBase {Width :width ,Height :height ,BitsPerComponent :bitsPerComponent ,ColorComponents :colorComponents ,Data :data ,Alpha :alpha ,Decode :decode ,BytesPerLine :BytesPerLine (width ,bitsPerComponent ,colorComponents )};
if data ==nil {_ecae .Data =make ([]byte ,height *_ecae .BytesPerLine );};return _ecae ;};func init (){_fbcb ()};func _dace (_dffd _gbg .NYCbCrA )_gbg .NRGBA {_bdfc :=int32 (_dffd .Y )*0x10101;_bbe :=int32 (_dffd .Cb )-128;_fbeef :=int32 (_dffd .Cr )-128;
_cffb :=_bdfc +91881*_fbeef ;if uint32 (_cffb )&0xff000000==0{_cffb >>=8;}else {_cffb =^(_cffb >>31)&0xffff;};_edg :=_bdfc -22554*_bbe -46802*_fbeef ;if uint32 (_edg )&0xff000000==0{_edg >>=8;}else {_edg =^(_edg >>31)&0xffff;};_bcfb :=_bdfc +116130*_bbe ;
if uint32 (_bcfb )&0xff000000==0{_bcfb >>=8;}else {_bcfb =^(_bcfb >>31)&0xffff;};return _gbg .NRGBA {R :uint8 (_cffb >>8),G :uint8 (_edg >>8),B :uint8 (_bcfb >>8),A :_dffd .A };};func (_degf *Gray4 )GrayAt (x ,y int )_gbg .Gray {_badfa ,_ :=ColorAtGray4BPC (x ,y ,_degf .BytesPerLine ,_degf .Data ,_degf .Decode );
return _badfa ;};func BytesPerLine (width ,bitsPerComponent ,colorComponents int )int {return ((width *bitsPerComponent )*colorComponents +7)>>3;};func (_gbf *Monochrome )ResolveDecode ()error {if len (_gbf .Decode )!=2{return nil ;};if _gbf .Decode [0]==1&&_gbf .Decode [1]==0{if _ccf :=_gbf .InverseData ();
_ccf !=nil {return _ccf ;};_gbf .Decode =nil ;};return nil ;};func (_caab *Monochrome )ScaleLow (width ,height int )(*Monochrome ,error ){if width < 0||height < 0{return nil ,_f .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");
};_fgg :=_dagf (width ,height );_bdea :=make ([]int ,height );_fdae :=make ([]int ,width );_dfggb :=float64 (_caab .Width )/float64 (width );_ggfd :=float64 (_caab .Height )/float64 (height );for _bfbd :=0;_bfbd < height ;_bfbd ++{_bdea [_bfbd ]=int (_gb .Min (_ggfd *float64 (_bfbd )+0.5,float64 (_caab .Height -1)));
};for _eba :=0;_eba < width ;_eba ++{_fdae [_eba ]=int (_gb .Min (_dfggb *float64 (_eba )+0.5,float64 (_caab .Width -1)));};_bgbc :=-1;_bgd :=byte (0);for _fcca :=0;_fcca < height ;_fcca ++{_bffd :=_bdea [_fcca ]*_caab .BytesPerLine ;_bgaf :=_fcca *_fgg .BytesPerLine ;
for _egc :=0;_egc < width ;_egc ++{_ffac :=_fdae [_egc ];if _ffac !=_bgbc {_bgd =_caab .getBit (_bffd ,_ffac );if _bgd !=0{_fgg .setBit (_bgaf ,_egc );};_bgbc =_ffac ;}else {if _bgd !=0{_fgg .setBit (_bgaf ,_egc );};};};};return _fgg ,nil ;};func (_ecdc *Gray8 )Histogram ()(_ffff [256]int ){for _gfgg :=0;
_gfgg < len (_ecdc .Data );_gfgg ++{_ffff [_ecdc .Data [_gfgg ]]++;};return _ffff ;};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 ,_ab .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 (_eaab *monochromeThresholdConverter )Convert (img _e .Image )(Image ,error ){if _faag ,_deff :=img .(*Monochrome );_deff {return _faag .Copy (),nil ;};_dagg :=img .Bounds ();_badb ,_afdc :=NewImage (_dagg .Max .X ,_dagg .Max .Y ,1,1,nil ,nil ,nil );
if _afdc !=nil {return nil ,_afdc ;};_badb .(*Monochrome ).ModelThreshold =_eaab .Threshold ;for _cage :=0;_cage < _dagg .Max .X ;_cage ++{for _aadf :=0;_aadf < _dagg .Max .Y ;_aadf ++{_afca :=img .At (_cage ,_aadf );_badb .Set (_cage ,_aadf ,_afca );};
};return _badb ,nil ;};func ImgToGray (i _e .Image )*_e .Gray {if _gdffe ,_efefg :=i .(*_e .Gray );_efefg {return _gdffe ;};_bfcg :=i .Bounds ();_ccafe :=_e .NewGray (_bfcg );for _efba :=0;_efba < _bfcg .Max .X ;_efba ++{for _gadb :=0;_gadb < _bfcg .Max .Y ;
_gadb ++{_efge :=i .At (_efba ,_gadb );_ccafe .Set (_efba ,_gadb ,_efge );};};return _ccafe ;};func _bbg (_gfd RGBA ,_daa CMYK ,_dcd _e .Rectangle ){for _fbee :=0;_fbee < _dcd .Max .X ;_fbee ++{for _gedf :=0;_gedf < _dcd .Max .Y ;_gedf ++{_fbd :=_gfd .RGBAAt (_fbee ,_gedf );
_daa .SetCMYK (_fbee ,_gedf ,_abg (_fbd ));};};};const (_cddb shift =iota ;_gafe ;);var _ NRGBA =&NRGBA16 {};func _dcfd (_fcfee _e .Image )(Image ,error ){if _adee ,_bgag :=_fcfee .(*Gray8 );_bgag {return _adee .Copy (),nil ;};_cdd :=_fcfee .Bounds ();
_fgca ,_gag :=NewImage (_cdd .Max .X ,_cdd .Max .Y ,8,1,nil ,nil ,nil );if _gag !=nil {return nil ,_gag ;};_cdba (_fcfee ,_fgca ,_cdd );return _fgca ,nil ;};func _fbbf (_gaee *Monochrome ,_dcfg ,_deae ,_daed ,_fdca int ,_cdebe RasterOperator ){if _dcfg < 0{_daed +=_dcfg ;
_dcfg =0;};_edae :=_dcfg +_daed -_gaee .Width ;if _edae > 0{_daed -=_edae ;};if _deae < 0{_fdca +=_deae ;_deae =0;};_dadb :=_deae +_fdca -_gaee .Height ;if _dadb > 0{_fdca -=_dadb ;};if _daed <=0||_fdca <=0{return ;};if (_dcfg &7)==0{_beae (_gaee ,_dcfg ,_deae ,_daed ,_fdca ,_cdebe );
}else {_ggdb (_gaee ,_dcfg ,_deae ,_daed ,_fdca ,_cdebe );};};func (_afcd *NRGBA16 )ColorAt (x ,y int )(_gbg .Color ,error ){return ColorAtNRGBA16 (x ,y ,_afcd .Width ,_afcd .BytesPerLine ,_afcd .Data ,_afcd .Alpha ,_afcd .Decode );};func _agcb (_fffa _e .Image ,_cece Image ,_fega _e .Rectangle ){if _egcg ,_eccd :=_fffa .(SMasker );
_eccd &&_egcg .HasAlpha (){_cece .(SMasker ).MakeAlpha ();};switch _dgaf :=_fffa .(type ){case Gray :_bdae (_dgaf ,_cece .(RGBA ),_fega );case NRGBA :_bbgf (_dgaf ,_cece .(RGBA ),_fega );case *_e .NYCbCrA :_egccc (_dgaf ,_cece .(RGBA ),_fega );case CMYK :_ggca (_dgaf ,_cece .(RGBA ),_fega );
case RGBA :_adab (_dgaf ,_cece .(RGBA ),_fega );case nrgba64 :_fgcf (_dgaf ,_cece .(RGBA ),_fega );default:_fdea (_fffa ,_cece ,_fega );};};var _ _e .Image =&RGBA32 {};func ColorAtGrayscale (x ,y ,bitsPerColor ,bytesPerLine int ,data []byte ,decode []float64 )(_gbg .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 ,_ab .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 _fcg (_ce ,_adf *Monochrome )(_eca error ){_dc :=_adf .BytesPerLine ;_afe :=_ce .BytesPerLine ;var _ecf ,_dee ,_fefd ,_fgb ,_baa int ;for _fefd =0;_fefd < _adf .Height ;_fefd ++{_ecf =_fefd *_dc ;_dee =8*_fefd *_afe ;for _fgb =0;_fgb < _dc ;_fgb ++{if _eca =_ce .setEightBytes (_dee +_fgb *8,_cb [_adf .Data [_ecf +_fgb ]]);
_eca !=nil {return _eca ;};};for _baa =1;_baa < 8;_baa ++{for _fgb =0;_fgb < _afe ;_fgb ++{if _eca =_ce .setByte (_dee +_baa *_afe +_fgb ,_ce .Data [_dee +_fgb ]);_eca !=nil {return _eca ;};};};};return nil ;};func ColorAtCMYK (x ,y ,width int ,data []byte ,decode []float64 )(_gbg .CMYK ,error ){_eff :=4*(y *width +x );
if _eff +3>=len (data ){return _gbg .CMYK {},_ab .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 [_eff ]&0xff;M :=data [_eff +1]&0xff;Y :=data [_eff +2]&0xff;K :=data [_eff +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 _gbg .CMYK {C :C ,M :M ,Y :Y ,K :K },nil ;};func (_ebe *Gray2 )Validate ()error {if len (_ebe .Data )!=_ebe .Height *_ebe .BytesPerLine {return ErrInvalidImage ;
};return nil ;};func (_cfae *Gray8 )Copy ()Image {return &Gray8 {ImageBase :_cfae .copy ()}};func (_dbfbe *RGBA32 )SetRGBA (x ,y int ,c _gbg .RGBA ){_acefd :=y *_dbfbe .Width +x ;_ggda :=3*_acefd ;if _ggda +2>=len (_dbfbe .Data ){return ;};_dbfbe .setRGBA (_acefd ,c );
};func _eab (_ec ,_efc *Monochrome )(_abb error ){_fda :=_efc .BytesPerLine ;_gef :=_ec .BytesPerLine ;_efca :=_efc .BytesPerLine *4-_ec .BytesPerLine ;var (_be ,_af byte ;_cdf uint32 ;_ae ,_cc ,_bf ,_aee ,_adg ,_ffe ,_gc int ;);for _bf =0;_bf < _efc .Height ;
_bf ++{_ae =_bf *_fda ;_cc =4*_bf *_gef ;for _aee =0;_aee < _fda ;_aee ++{_be =_efc .Data [_ae +_aee ];_cdf =_fce [_be ];_ffe =_cc +_aee *4;if _efca !=0&&(_aee +1)*4> _ec .BytesPerLine {for _adg =_efca ;_adg > 0;_adg --{_af =byte ((_cdf >>uint (_adg *8))&0xff);
_gc =_ffe +(_efca -_adg );if _abb =_ec .setByte (_gc ,_af );_abb !=nil {return _abb ;};};}else if _abb =_ec .setFourBytes (_ffe ,_cdf );_abb !=nil {return _abb ;};if _abb =_ec .setFourBytes (_cc +_aee *4,_fce [_efc .Data [_ae +_aee ]]);_abb !=nil {return _abb ;
};};for _adg =1;_adg < 4;_adg ++{for _aee =0;_aee < _gef ;_aee ++{if _abb =_ec .setByte (_cc +_adg *_gef +_aee ,_ec .Data [_cc +_aee ]);_abb !=nil {return _abb ;};};};};return nil ;};func _eag (_afg ,_bdb *Monochrome ,_cec []byte ,_aa int )(_cbf error ){var (_feb ,_aeb ,_fdbd ,_ebb ,_abf ,_aad ,_gab ,_cee int ;
_ecc ,_ccgd ,_eed ,_egfe uint32 ;_dbg ,_ceeb byte ;_dddc uint16 ;);_afdd :=make ([]byte ,4);_eef :=make ([]byte ,4);for _fdbd =0;_fdbd < _afg .Height -1;_fdbd ,_ebb =_fdbd +2,_ebb +1{_feb =_fdbd *_afg .BytesPerLine ;_aeb =_ebb *_bdb .BytesPerLine ;for _abf ,_aad =0,0;
_abf < _aa ;_abf ,_aad =_abf +4,_aad +1{for _gab =0;_gab < 4;_gab ++{_cee =_feb +_abf +_gab ;if _cee <=len (_afg .Data )-1&&_cee < _feb +_afg .BytesPerLine {_afdd [_gab ]=_afg .Data [_cee ];}else {_afdd [_gab ]=0x00;};_cee =_feb +_afg .BytesPerLine +_abf +_gab ;
if _cee <=len (_afg .Data )-1&&_cee < _feb +(2*_afg .BytesPerLine ){_eef [_gab ]=_afg .Data [_cee ];}else {_eef [_gab ]=0x00;};};_ecc =_a .BigEndian .Uint32 (_afdd );_ccgd =_a .BigEndian .Uint32 (_eef );_eed =_ecc &_ccgd ;_eed |=_eed <<1;_egfe =_ecc |_ccgd ;
_egfe &=_egfe <<1;_ccgd =_eed |_egfe ;_ccgd &=0xaaaaaaaa;_ecc =_ccgd |(_ccgd <<7);_dbg =byte (_ecc >>24);_ceeb =byte ((_ecc >>8)&0xff);_cee =_aeb +_aad ;if _cee +1==len (_bdb .Data )-1||_cee +1>=_aeb +_bdb .BytesPerLine {if _cbf =_bdb .setByte (_cee ,_cec [_dbg ]);
_cbf !=nil {return _ab .Errorf ("\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_cee );};}else {_dddc =(uint16 (_cec [_dbg ])<<8)|uint16 (_cec [_ceeb ]);if _cbf =_bdb .setTwoBytes (_cee ,_dddc );_cbf !=nil {return _ab .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",_cee );
};_aad ++;};};};return nil ;};var _ Image =&Gray16 {};var _ _e .Image =&NRGBA32 {};func _bdge (_gaef _e .Image ,_fdaea Image ,_aacb _e .Rectangle ){if _gbeg ,_fcec :=_gaef .(SMasker );_fcec &&_gbeg .HasAlpha (){_fdaea .(SMasker ).MakeAlpha ();};_fdea (_gaef ,_fdaea ,_aacb );
};func ColorAtGray8BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_gbg .Gray ,error ){_aegb :=y *bytesPerLine +x ;if _aegb >=len (data ){return _gbg .Gray {},_ab .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 );
};_bfbe :=data [_aegb ];if len (decode )==2{_bfbe =uint8 (uint32 (LinearInterpolate (float64 (_bfbe ),0,255,decode [0],decode [1]))&0xff);};return _gbg .Gray {Y :_bfbe },nil ;};func (_cbac *Gray8 )ColorModel ()_gbg .Model {return _gbg .GrayModel };func _agfa (_ege ,_bcfd *Monochrome ,_ffc []byte ,_gefg int )(_fff error ){var (_faaf ,_beb ,_dad ,_cfbc ,_efa ,_gcf ,_ddda ,_fdg int ;
_fga ,_ffef uint32 ;_ddb ,_fgeg byte ;_cecd uint16 ;);_gbcd :=make ([]byte ,4);_gde :=make ([]byte ,4);for _dad =0;_dad < _ege .Height -1;_dad ,_cfbc =_dad +2,_cfbc +1{_faaf =_dad *_ege .BytesPerLine ;_beb =_cfbc *_bcfd .BytesPerLine ;for _efa ,_gcf =0,0;
_efa < _gefg ;_efa ,_gcf =_efa +4,_gcf +1{for _ddda =0;_ddda < 4;_ddda ++{_fdg =_faaf +_efa +_ddda ;if _fdg <=len (_ege .Data )-1&&_fdg < _faaf +_ege .BytesPerLine {_gbcd [_ddda ]=_ege .Data [_fdg ];}else {_gbcd [_ddda ]=0x00;};_fdg =_faaf +_ege .BytesPerLine +_efa +_ddda ;
if _fdg <=len (_ege .Data )-1&&_fdg < _faaf +(2*_ege .BytesPerLine ){_gde [_ddda ]=_ege .Data [_fdg ];}else {_gde [_ddda ]=0x00;};};_fga =_a .BigEndian .Uint32 (_gbcd );_ffef =_a .BigEndian .Uint32 (_gde );_ffef &=_fga ;_ffef &=_ffef <<1;_ffef &=0xaaaaaaaa;
_fga =_ffef |(_ffef <<7);_ddb =byte (_fga >>24);_fgeg =byte ((_fga >>8)&0xff);_fdg =_beb +_gcf ;if _fdg +1==len (_bcfd .Data )-1||_fdg +1>=_beb +_bcfd .BytesPerLine {_bcfd .Data [_fdg ]=_ffc [_ddb ];if _fff =_bcfd .setByte (_fdg ,_ffc [_ddb ]);_fff !=nil {return _ab .Errorf ("\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_fdg );
};}else {_cecd =(uint16 (_ffc [_ddb ])<<8)|uint16 (_ffc [_fgeg ]);if _fff =_bcfd .setTwoBytes (_fdg ,_cecd );_fff !=nil {return _ab .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",_fdg );
};_gcf ++;};};};return nil ;};func _beae (_dgeg *Monochrome ,_feec ,_gecg int ,_dcaa ,_cgdb int ,_dacba RasterOperator ){var (_cbgd int ;_bbef byte ;_gfe ,_dfgd int ;_eedd int ;);_dab :=_dcaa >>3;_dbae :=_dcaa &7;if _dbae > 0{_bbef =_gdac [_dbae ];};_cbgd =_dgeg .BytesPerLine *_gecg +(_feec >>3);
switch _dacba {case PixClr :for _gfe =0;_gfe < _cgdb ;_gfe ++{_eedd =_cbgd +_gfe *_dgeg .BytesPerLine ;for _dfgd =0;_dfgd < _dab ;_dfgd ++{_dgeg .Data [_eedd ]=0x0;_eedd ++;};if _dbae > 0{_dgeg .Data [_eedd ]=_accbe (_dgeg .Data [_eedd ],0x0,_bbef );};
};case PixSet :for _gfe =0;_gfe < _cgdb ;_gfe ++{_eedd =_cbgd +_gfe *_dgeg .BytesPerLine ;for _dfgd =0;_dfgd < _dab ;_dfgd ++{_dgeg .Data [_eedd ]=0xff;_eedd ++;};if _dbae > 0{_dgeg .Data [_eedd ]=_accbe (_dgeg .Data [_eedd ],0xff,_bbef );};};case PixNotDst :for _gfe =0;
_gfe < _cgdb ;_gfe ++{_eedd =_cbgd +_gfe *_dgeg .BytesPerLine ;for _dfgd =0;_dfgd < _dab ;_dfgd ++{_dgeg .Data [_eedd ]=^_dgeg .Data [_eedd ];_eedd ++;};if _dbae > 0{_dgeg .Data [_eedd ]=_accbe (_dgeg .Data [_eedd ],^_dgeg .Data [_eedd ],_bbef );};};};
};func (_gbfb *Monochrome )GrayAt (x ,y int )_gbg .Gray {_gcca ,_ :=ColorAtGray1BPC (x ,y ,_gbfb .BytesPerLine ,_gbfb .Data ,_gbfb .Decode );return _gcca ;};type NRGBA64 struct{ImageBase };func (_gege *Gray4 )ColorModel ()_gbg .Model {return Gray4Model };
func (_fdeb *Gray16 )At (x ,y int )_gbg .Color {_cdgc ,_ :=_fdeb .ColorAt (x ,y );return _cdgc };type CMYK interface{CMYKAt (_bebd ,_aag int )_gbg .CMYK ;SetCMYK (_cbfg ,_eafb int ,_bbbg _gbg .CMYK );};func NextPowerOf2 (n uint )uint {if IsPowerOf2 (n ){return n ;
};return 1<<(_agea (n )+1);};func _ba (_gfg ,_fef *Monochrome )(_cd error ){_gd :=_fef .BytesPerLine ;_fa :=_gfg .BytesPerLine ;var (_eg byte ;_dba uint16 ;_fg ,_ca ,_da ,_caa ,_cfa int ;);for _da =0;_da < _fef .Height ;_da ++{_fg =_da *_gd ;_ca =2*_da *_fa ;
for _caa =0;_caa < _gd ;_caa ++{_eg =_fef .Data [_fg +_caa ];_dba =_fcgf [_eg ];_cfa =_ca +_caa *2;if _gfg .BytesPerLine !=_fef .BytesPerLine *2&&(_caa +1)*2> _gfg .BytesPerLine {_cd =_gfg .setByte (_cfa ,byte (_dba >>8));}else {_cd =_gfg .setTwoBytes (_cfa ,_dba );
};if _cd !=nil {return _cd ;};};for _caa =0;_caa < _fa ;_caa ++{_cfa =_ca +_fa +_caa ;_eg =_gfg .Data [_ca +_caa ];if _cd =_gfg .setByte (_cfa ,_eg );_cd !=nil {return _cd ;};};};return nil ;};func ColorAtGray2BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_gbg .Gray ,error ){_cedb :=y *bytesPerLine +x >>2;
if _cedb >=len (data ){return _gbg .Gray {},_ab .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 );
};_dcdc :=data [_cedb ]>>uint (6-(x &3)*2)&3;if len (decode )==2{_dcdc =uint8 (uint32 (LinearInterpolate (float64 (_dcdc ),0,3.0,decode [0],decode [1]))&3);};return _gbg .Gray {Y :_dcdc *85},nil ;};func (_gceg *Monochrome )ReduceBinary (factor float64 )(*Monochrome ,error ){_dcgb :=_agea (uint (factor ));
if !IsPowerOf2 (uint (factor )){_dcgb ++;};_fcdb :=make ([]int ,_dcgb );for _gcfe :=range _fcdb {_fcdb [_gcfe ]=4;};_dccf ,_cgeg :=_ged (_gceg ,_fcdb ...);if _cgeg !=nil {return nil ,_cgeg ;};return _dccf ,nil ;};func (_cbfa *Gray8 )Validate ()error {if len (_cbfa .Data )!=_cbfa .Height *_cbfa .BytesPerLine {return ErrInvalidImage ;
};return nil ;};func (_adgd *Gray2 )Base ()*ImageBase {return &_adgd .ImageBase };func _bbcf (_deag Gray ,_edcg NRGBA ,_ada _e .Rectangle ){for _gfee :=0;_gfee < _ada .Max .X ;_gfee ++{for _cgfc :=0;_cgfc < _ada .Max .Y ;_cgfc ++{_aeee :=_deag .GrayAt (_gfee ,_cgfc );
_edcg .SetNRGBA (_gfee ,_cgfc ,_dcg (_aeee ));};};};func ColorAtGray16BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_gbg .Gray16 ,error ){_bddc :=(y *bytesPerLine /2+x )*2;if _bddc +1>=len (data ){return _gbg .Gray16 {},_ab .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 );
};_gaag :=uint16 (data [_bddc ])<<8|uint16 (data [_bddc +1]);if len (decode )==2{_gaag =uint16 (uint64 (LinearInterpolate (float64 (_gaag ),0,65535,decode [0],decode [1])));};return _gbg .Gray16 {Y :_gaag },nil ;};func _ged (_ga *Monochrome ,_faa ...int )(_cfe *Monochrome ,_ggf error ){if _ga ==nil {return nil ,_f .New ("\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if len (_faa )==0{return nil ,_f .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");
};_bcd :=_bbb ();_cfe =_ga ;for _ ,_ddd :=range _faa {if _ddd <=0{break ;};_cfe ,_ggf =_aba (_cfe ,_ddd ,_bcd );if _ggf !=nil {return nil ,_ggf ;};};return _cfe ,nil ;};func (_gae *CMYK32 )ColorModel ()_gbg .Model {return _gbg .CMYKModel };func (_dabb *NRGBA16 )Set (x ,y int ,c _gbg .Color ){_bbfd :=y *_dabb .BytesPerLine +x *3/2;
if _bbfd +1>=len (_dabb .Data ){return ;};_bbde :=NRGBA16Model .Convert (c ).(_gbg .NRGBA );_dabb .setNRGBA (x ,y ,_bbfd ,_bbde );};var _ Gray =&Monochrome {};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 (_bab *Monochrome )SetGray (x ,y int ,g _gbg .Gray ){_ggdf :=y *_bab .BytesPerLine +x >>3;
if _ggdf > len (_bab .Data )-1{return ;};g =_ddbg (g ,monochromeModel (_bab .ModelThreshold ));_bab .setGray (x ,g ,_ggdf );};func (_efab *NRGBA64 )SetNRGBA64 (x ,y int ,c _gbg .NRGBA64 ){_dbfc :=(y *_efab .Width +x )*2;_edda :=_dbfc *3;if _edda +5>=len (_efab .Data ){return ;
};_efab .setNRGBA64 (_edda ,c ,_dbfc );};func (_gfa *Gray4 )setGray (_abef int ,_gefe int ,_gddg _gbg .Gray ){_aaeb :=_gefe *_gfa .BytesPerLine ;_ddg :=_aaeb +(_abef >>1);if _ddg >=len (_gfa .Data ){return ;};_aga :=_gddg .Y >>4;_gfa .Data [_ddg ]=(_gfa .Data [_ddg ]&(^(0xf0>>uint (4*(_abef &1)))))|(_aga <<uint (4-4*(_abef &1)));
};func _cgga (_feda *Monochrome ,_eecbg ,_bbf int ,_dgeb ,_dcbfd int ,_efb RasterOperator ,_ffca *Monochrome ,_bddf ,_gdfa int )error {var _bfgf ,_cdeb ,_baeg ,_dacd int ;if _eecbg < 0{_bddf -=_eecbg ;_dgeb +=_eecbg ;_eecbg =0;};if _bddf < 0{_eecbg -=_bddf ;
_dgeb +=_bddf ;_bddf =0;};_bfgf =_eecbg +_dgeb -_feda .Width ;if _bfgf > 0{_dgeb -=_bfgf ;};_cdeb =_bddf +_dgeb -_ffca .Width ;if _cdeb > 0{_dgeb -=_cdeb ;};if _bbf < 0{_gdfa -=_bbf ;_dcbfd +=_bbf ;_bbf =0;};if _gdfa < 0{_bbf -=_gdfa ;_dcbfd +=_gdfa ;_gdfa =0;
};_baeg =_bbf +_dcbfd -_feda .Height ;if _baeg > 0{_dcbfd -=_baeg ;};_dacd =_gdfa +_dcbfd -_ffca .Height ;if _dacd > 0{_dcbfd -=_dacd ;};if _dgeb <=0||_dcbfd <=0{return nil ;};var _afdf error ;switch {case _eecbg &7==0&&_bddf &7==0:_afdf =_ecfe (_feda ,_eecbg ,_bbf ,_dgeb ,_dcbfd ,_efb ,_ffca ,_bddf ,_gdfa );
case _eecbg &7==_bddf &7:_afdf =_gbcfg (_feda ,_eecbg ,_bbf ,_dgeb ,_dcbfd ,_efb ,_ffca ,_bddf ,_gdfa );default:_afdf =_gdfd (_feda ,_eecbg ,_bbf ,_dgeb ,_dcbfd ,_efb ,_ffca ,_bddf ,_gdfa );};if _afdf !=nil {return _afdf ;};return nil ;};func (_ccdc *Gray4 )Histogram ()(_afb [256]int ){for _fcaf :=0;
_fcaf < _ccdc .Width ;_fcaf ++{for _fae :=0;_fae < _ccdc .Height ;_fae ++{_afb [_ccdc .GrayAt (_fcaf ,_fae ).Y ]++;};};return _afb ;};var _ Image =&NRGBA64 {};func (_ceg *NRGBA32 )At (x ,y int )_gbg .Color {_gfcc ,_ :=_ceg .ColorAt (x ,y );return _gfcc };
func (_ebaadf *RGBA32 )Set (x ,y int ,c _gbg .Color ){_cdaa :=y *_ebaadf .Width +x ;_edee :=3*_cdaa ;if _edee +2>=len (_ebaadf .Data ){return ;};_faaff :=_gbg .RGBAModel .Convert (c ).(_gbg .RGBA );_ebaadf .setRGBA (_cdaa ,_faaff );};var (_fcgf =_dag ();
_fce =_gbgg ();_cb =_aeg (););func _gded (_acdbb _gbg .Color )_gbg .Color {_ebcd :=_gbg .GrayModel .Convert (_acdbb ).(_gbg .Gray );return _gegf (_ebcd );};type shift int ;func (_cdaff *NRGBA32 )Copy ()Image {return &NRGBA32 {ImageBase :_cdaff .copy ()}};
func (_eegd *Gray2 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_eegd .Width ,Y :_eegd .Height }};};func _aceg (_caee _e .Image ,_adb int )(_e .Rectangle ,bool ,[]byte ){_ecfee :=_caee .Bounds ();var (_agfgf bool ;_gbef []byte ;);switch _fgac :=_caee .(type ){case SMasker :_agfgf =_fgac .HasAlpha ();
case NRGBA ,RGBA ,*_e .RGBA64 ,nrgba64 ,*_e .NYCbCrA :_gbef =make ([]byte ,_ecfee .Max .X *_ecfee .Max .Y *_adb );case *_e .Paletted :var _deaef bool ;for _ ,_fbag :=range _fgac .Palette {_gccf ,_ebf ,_caaga ,_cbbe :=_fbag .RGBA ();if _gccf ==0&&_ebf ==0&&_caaga ==0&&_cbbe !=0{_deaef =true ;
break ;};};if _deaef {_gbef =make ([]byte ,_ecfee .Max .X *_ecfee .Max .Y *_adb );};};return _ecfee ,_agfgf ,_gbef ;};func _ggdb (_fegg *Monochrome ,_gacd ,_eaae int ,_ebaf ,_bcg int ,_afef RasterOperator ){var (_cfaf bool ;_becd bool ;_gad int ;_bba int ;
_cagg int ;_dbcgc int ;_feab bool ;_dcee byte ;);_ffbe :=8-(_gacd &7);_bcbb :=_ggeg [_ffbe ];_eaef :=_fegg .BytesPerLine *_eaae +(_gacd >>3);if _ebaf < _ffbe {_cfaf =true ;_bcbb &=_gdac [8-_ffbe +_ebaf ];};if !_cfaf {_gad =(_ebaf -_ffbe )>>3;if _gad !=0{_becd =true ;
_bba =_eaef +1;};};_cagg =(_gacd +_ebaf )&7;if !(_cfaf ||_cagg ==0){_feab =true ;_dcee =_gdac [_cagg ];_dbcgc =_eaef +1+_gad ;};var _becdd ,_aaca int ;switch _afef {case PixClr :for _becdd =0;_becdd < _bcg ;_becdd ++{_fegg .Data [_eaef ]=_accbe (_fegg .Data [_eaef ],0x0,_bcbb );
_eaef +=_fegg .BytesPerLine ;};if _becd {for _becdd =0;_becdd < _bcg ;_becdd ++{for _aaca =0;_aaca < _gad ;_aaca ++{_fegg .Data [_bba +_aaca ]=0x0;};_bba +=_fegg .BytesPerLine ;};};if _feab {for _becdd =0;_becdd < _bcg ;_becdd ++{_fegg .Data [_dbcgc ]=_accbe (_fegg .Data [_dbcgc ],0x0,_dcee );
_dbcgc +=_fegg .BytesPerLine ;};};case PixSet :for _becdd =0;_becdd < _bcg ;_becdd ++{_fegg .Data [_eaef ]=_accbe (_fegg .Data [_eaef ],0xff,_bcbb );_eaef +=_fegg .BytesPerLine ;};if _becd {for _becdd =0;_becdd < _bcg ;_becdd ++{for _aaca =0;_aaca < _gad ;
_aaca ++{_fegg .Data [_bba +_aaca ]=0xff;};_bba +=_fegg .BytesPerLine ;};};if _feab {for _becdd =0;_becdd < _bcg ;_becdd ++{_fegg .Data [_dbcgc ]=_accbe (_fegg .Data [_dbcgc ],0xff,_dcee );_dbcgc +=_fegg .BytesPerLine ;};};case PixNotDst :for _becdd =0;
_becdd < _bcg ;_becdd ++{_fegg .Data [_eaef ]=_accbe (_fegg .Data [_eaef ],^_fegg .Data [_eaef ],_bcbb );_eaef +=_fegg .BytesPerLine ;};if _becd {for _becdd =0;_becdd < _bcg ;_becdd ++{for _aaca =0;_aaca < _gad ;_aaca ++{_fegg .Data [_bba +_aaca ]=^(_fegg .Data [_bba +_aaca ]);
};_bba +=_fegg .BytesPerLine ;};};if _feab {for _becdd =0;_becdd < _bcg ;_becdd ++{_fegg .Data [_dbcgc ]=_accbe (_fegg .Data [_dbcgc ],^_fegg .Data [_dbcgc ],_dcee );_dbcgc +=_fegg .BytesPerLine ;};};};};func (_baea *Gray8 )At (x ,y int )_gbg .Color {_acaa ,_ :=_baea .ColorAt (x ,y );
return _acaa };func _dgda (_edgg nrgba64 ,_dfcc NRGBA ,_gaca _e .Rectangle ){for _cdcc :=0;_cdcc < _gaca .Max .X ;_cdcc ++{for _fegd :=0;_fegd < _gaca .Max .Y ;_fegd ++{_fcfcf :=_edgg .NRGBA64At (_cdcc ,_fegd );_dfcc .SetNRGBA (_cdcc ,_fegd ,_bde (_fcfcf ));
};};};type Gray16 struct{ImageBase };var _ Gray =&Gray4 {};func (_cbfgf *NRGBA32 )ColorModel ()_gbg .Model {return _gbg .NRGBAModel };func (_bgdf *Gray16 )Histogram ()(_afbc [256]int ){for _bedc :=0;_bedc < _bgdf .Width ;_bedc ++{for _agec :=0;_agec < _bgdf .Height ;
_agec ++{_afbc [_bgdf .GrayAt (_bedc ,_agec ).Y ]++;};};return _afbc ;};func _ebge (_fab int ,_caabb int )int {if _fab < _caabb {return _fab ;};return _caabb ;};func (_gadee *NRGBA64 )Validate ()error {if len (_gadee .Data )!=3*2*_gadee .Width *_gadee .Height {return _f .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 _gbcfg (_ecge *Monochrome ,_egfc ,_bcec ,_bfee ,_feeb int ,_gbfe RasterOperator ,_dbfb *Monochrome ,_dbga ,_bbea int )error {var (_ddag bool ;_edc bool ;_dbfe int ;_gcb int ;_dde int ;_dbaga bool ;_ffbb byte ;_gdcg int ;_bee int ;_fdecf int ;
_gddbf ,_gbcff int ;);_eggb :=8-(_egfc &7);_bbfg :=_ggeg [_eggb ];_bdca :=_ecge .BytesPerLine *_bcec +(_egfc >>3);_baee :=_dbfb .BytesPerLine *_bbea +(_dbga >>3);if _bfee < _eggb {_ddag =true ;_bbfg &=_gdac [8-_eggb +_bfee ];};if !_ddag {_dbfe =(_bfee -_eggb )>>3;
if _dbfe > 0{_edc =true ;_gcb =_bdca +1;_dde =_baee +1;};};_gdcg =(_egfc +_bfee )&7;if !(_ddag ||_gdcg ==0){_dbaga =true ;_ffbb =_gdac [_gdcg ];_bee =_bdca +1+_dbfe ;_fdecf =_baee +1+_dbfe ;};switch _gbfe {case PixSrc :for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bdca ]=_accbe (_ecge .Data [_bdca ],_dbfb .Data [_baee ],_bbfg );
_bdca +=_ecge .BytesPerLine ;_baee +=_dbfb .BytesPerLine ;};if _edc {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{for _gbcff =0;_gbcff < _dbfe ;_gbcff ++{_ecge .Data [_gcb +_gbcff ]=_dbfb .Data [_dde +_gbcff ];};_gcb +=_ecge .BytesPerLine ;_dde +=_dbfb .BytesPerLine ;
};};if _dbaga {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bee ]=_accbe (_ecge .Data [_bee ],_dbfb .Data [_fdecf ],_ffbb );_bee +=_ecge .BytesPerLine ;_fdecf +=_dbfb .BytesPerLine ;};};case PixNotSrc :for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bdca ]=_accbe (_ecge .Data [_bdca ],^_dbfb .Data [_baee ],_bbfg );
_bdca +=_ecge .BytesPerLine ;_baee +=_dbfb .BytesPerLine ;};if _edc {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{for _gbcff =0;_gbcff < _dbfe ;_gbcff ++{_ecge .Data [_gcb +_gbcff ]=^_dbfb .Data [_dde +_gbcff ];};_gcb +=_ecge .BytesPerLine ;_dde +=_dbfb .BytesPerLine ;
};};if _dbaga {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bee ]=_accbe (_ecge .Data [_bee ],^_dbfb .Data [_fdecf ],_ffbb );_bee +=_ecge .BytesPerLine ;_fdecf +=_dbfb .BytesPerLine ;};};case PixSrcOrDst :for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bdca ]=_accbe (_ecge .Data [_bdca ],_dbfb .Data [_baee ]|_ecge .Data [_bdca ],_bbfg );
_bdca +=_ecge .BytesPerLine ;_baee +=_dbfb .BytesPerLine ;};if _edc {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{for _gbcff =0;_gbcff < _dbfe ;_gbcff ++{_ecge .Data [_gcb +_gbcff ]|=_dbfb .Data [_dde +_gbcff ];};_gcb +=_ecge .BytesPerLine ;_dde +=_dbfb .BytesPerLine ;
};};if _dbaga {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bee ]=_accbe (_ecge .Data [_bee ],_dbfb .Data [_fdecf ]|_ecge .Data [_bee ],_ffbb );_bee +=_ecge .BytesPerLine ;_fdecf +=_dbfb .BytesPerLine ;};};case PixSrcAndDst :for _gddbf =0;_gddbf < _feeb ;
_gddbf ++{_ecge .Data [_bdca ]=_accbe (_ecge .Data [_bdca ],_dbfb .Data [_baee ]&_ecge .Data [_bdca ],_bbfg );_bdca +=_ecge .BytesPerLine ;_baee +=_dbfb .BytesPerLine ;};if _edc {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{for _gbcff =0;_gbcff < _dbfe ;_gbcff ++{_ecge .Data [_gcb +_gbcff ]&=_dbfb .Data [_dde +_gbcff ];
};_gcb +=_ecge .BytesPerLine ;_dde +=_dbfb .BytesPerLine ;};};if _dbaga {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bee ]=_accbe (_ecge .Data [_bee ],_dbfb .Data [_fdecf ]&_ecge .Data [_bee ],_ffbb );_bee +=_ecge .BytesPerLine ;_fdecf +=_dbfb .BytesPerLine ;
};};case PixSrcXorDst :for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bdca ]=_accbe (_ecge .Data [_bdca ],_dbfb .Data [_baee ]^_ecge .Data [_bdca ],_bbfg );_bdca +=_ecge .BytesPerLine ;_baee +=_dbfb .BytesPerLine ;};if _edc {for _gddbf =0;_gddbf < _feeb ;
_gddbf ++{for _gbcff =0;_gbcff < _dbfe ;_gbcff ++{_ecge .Data [_gcb +_gbcff ]^=_dbfb .Data [_dde +_gbcff ];};_gcb +=_ecge .BytesPerLine ;_dde +=_dbfb .BytesPerLine ;};};if _dbaga {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bee ]=_accbe (_ecge .Data [_bee ],_dbfb .Data [_fdecf ]^_ecge .Data [_bee ],_ffbb );
_bee +=_ecge .BytesPerLine ;_fdecf +=_dbfb .BytesPerLine ;};};case PixNotSrcOrDst :for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bdca ]=_accbe (_ecge .Data [_bdca ],^(_dbfb .Data [_baee ])|_ecge .Data [_bdca ],_bbfg );_bdca +=_ecge .BytesPerLine ;
_baee +=_dbfb .BytesPerLine ;};if _edc {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{for _gbcff =0;_gbcff < _dbfe ;_gbcff ++{_ecge .Data [_gcb +_gbcff ]|=^(_dbfb .Data [_dde +_gbcff ]);};_gcb +=_ecge .BytesPerLine ;_dde +=_dbfb .BytesPerLine ;};};if _dbaga {for _gddbf =0;
_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bee ]=_accbe (_ecge .Data [_bee ],^(_dbfb .Data [_fdecf ])|_ecge .Data [_bee ],_ffbb );_bee +=_ecge .BytesPerLine ;_fdecf +=_dbfb .BytesPerLine ;};};case PixNotSrcAndDst :for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bdca ]=_accbe (_ecge .Data [_bdca ],^(_dbfb .Data [_baee ])&_ecge .Data [_bdca ],_bbfg );
_bdca +=_ecge .BytesPerLine ;_baee +=_dbfb .BytesPerLine ;};if _edc {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{for _gbcff =0;_gbcff < _dbfe ;_gbcff ++{_ecge .Data [_gcb +_gbcff ]&=^_dbfb .Data [_dde +_gbcff ];};_gcb +=_ecge .BytesPerLine ;_dde +=_dbfb .BytesPerLine ;
};};if _dbaga {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bee ]=_accbe (_ecge .Data [_bee ],^(_dbfb .Data [_fdecf ])&_ecge .Data [_bee ],_ffbb );_bee +=_ecge .BytesPerLine ;_fdecf +=_dbfb .BytesPerLine ;};};case PixSrcOrNotDst :for _gddbf =0;
_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bdca ]=_accbe (_ecge .Data [_bdca ],_dbfb .Data [_baee ]|^(_ecge .Data [_bdca ]),_bbfg );_bdca +=_ecge .BytesPerLine ;_baee +=_dbfb .BytesPerLine ;};if _edc {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{for _gbcff =0;
_gbcff < _dbfe ;_gbcff ++{_ecge .Data [_gcb +_gbcff ]=_dbfb .Data [_dde +_gbcff ]|^(_ecge .Data [_gcb +_gbcff ]);};_gcb +=_ecge .BytesPerLine ;_dde +=_dbfb .BytesPerLine ;};};if _dbaga {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bee ]=_accbe (_ecge .Data [_bee ],_dbfb .Data [_fdecf ]|^(_ecge .Data [_bee ]),_ffbb );
_bee +=_ecge .BytesPerLine ;_fdecf +=_dbfb .BytesPerLine ;};};case PixSrcAndNotDst :for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bdca ]=_accbe (_ecge .Data [_bdca ],_dbfb .Data [_baee ]&^(_ecge .Data [_bdca ]),_bbfg );_bdca +=_ecge .BytesPerLine ;
_baee +=_dbfb .BytesPerLine ;};if _edc {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{for _gbcff =0;_gbcff < _dbfe ;_gbcff ++{_ecge .Data [_gcb +_gbcff ]=_dbfb .Data [_dde +_gbcff ]&^(_ecge .Data [_gcb +_gbcff ]);};_gcb +=_ecge .BytesPerLine ;_dde +=_dbfb .BytesPerLine ;
};};if _dbaga {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bee ]=_accbe (_ecge .Data [_bee ],_dbfb .Data [_fdecf ]&^(_ecge .Data [_bee ]),_ffbb );_bee +=_ecge .BytesPerLine ;_fdecf +=_dbfb .BytesPerLine ;};};case PixNotPixSrcOrDst :for _gddbf =0;
_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bdca ]=_accbe (_ecge .Data [_bdca ],^(_dbfb .Data [_baee ]|_ecge .Data [_bdca ]),_bbfg );_bdca +=_ecge .BytesPerLine ;_baee +=_dbfb .BytesPerLine ;};if _edc {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{for _gbcff =0;
_gbcff < _dbfe ;_gbcff ++{_ecge .Data [_gcb +_gbcff ]=^(_dbfb .Data [_dde +_gbcff ]|_ecge .Data [_gcb +_gbcff ]);};_gcb +=_ecge .BytesPerLine ;_dde +=_dbfb .BytesPerLine ;};};if _dbaga {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bee ]=_accbe (_ecge .Data [_bee ],^(_dbfb .Data [_fdecf ]|_ecge .Data [_bee ]),_ffbb );
_bee +=_ecge .BytesPerLine ;_fdecf +=_dbfb .BytesPerLine ;};};case PixNotPixSrcAndDst :for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bdca ]=_accbe (_ecge .Data [_bdca ],^(_dbfb .Data [_baee ]&_ecge .Data [_bdca ]),_bbfg );_bdca +=_ecge .BytesPerLine ;
_baee +=_dbfb .BytesPerLine ;};if _edc {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{for _gbcff =0;_gbcff < _dbfe ;_gbcff ++{_ecge .Data [_gcb +_gbcff ]=^(_dbfb .Data [_dde +_gbcff ]&_ecge .Data [_gcb +_gbcff ]);};_gcb +=_ecge .BytesPerLine ;_dde +=_dbfb .BytesPerLine ;
};};if _dbaga {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bee ]=_accbe (_ecge .Data [_bee ],^(_dbfb .Data [_fdecf ]&_ecge .Data [_bee ]),_ffbb );_bee +=_ecge .BytesPerLine ;_fdecf +=_dbfb .BytesPerLine ;};};case PixNotPixSrcXorDst :for _gddbf =0;
_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bdca ]=_accbe (_ecge .Data [_bdca ],^(_dbfb .Data [_baee ]^_ecge .Data [_bdca ]),_bbfg );_bdca +=_ecge .BytesPerLine ;_baee +=_dbfb .BytesPerLine ;};if _edc {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{for _gbcff =0;
_gbcff < _dbfe ;_gbcff ++{_ecge .Data [_gcb +_gbcff ]=^(_dbfb .Data [_dde +_gbcff ]^_ecge .Data [_gcb +_gbcff ]);};_gcb +=_ecge .BytesPerLine ;_dde +=_dbfb .BytesPerLine ;};};if _dbaga {for _gddbf =0;_gddbf < _feeb ;_gddbf ++{_ecge .Data [_bee ]=_accbe (_ecge .Data [_bee ],^(_dbfb .Data [_fdecf ]^_ecge .Data [_bee ]),_ffbb );
_bee +=_ecge .BytesPerLine ;_fdecf +=_dbfb .BytesPerLine ;};};default:_gbb .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",_gbfe );return _f .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 (_fgga *NRGBA32 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_fgga .Width ,Y :_fgga .Height }};};func (_gcaa *Gray16 )Copy ()Image {return &Gray16 {ImageBase :_gcaa .copy ()}};func (_bcc *CMYK32 )Base ()*ImageBase {return &_bcc .ImageBase };
func (_dbge *RGBA32 )Copy ()Image {return &RGBA32 {ImageBase :_dbge .copy ()}};func _bge (_dgf ,_beg CMYK ,_gce _e .Rectangle ){for _cbd :=0;_cbd < _gce .Max .X ;_cbd ++{for _dbeg :=0;_dbeg < _gce .Max .Y ;_dbeg ++{_beg .SetCMYK (_cbd ,_dbeg ,_dgf .CMYKAt (_cbd ,_dbeg ));
};};};func _aba (_cg *Monochrome ,_dcc int ,_cff []byte )(_ffd *Monochrome ,_ffa error ){const _afa ="\u0072\u0065d\u0075\u0063\u0065R\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079";if _cg ==nil {return nil ,_f .New ("\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _dcc < 1||_dcc > 4{return nil ,_f .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 _cg .Height <=1{return nil ,_f .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");
};_ffd =_dagf (_cg .Width /2,_cg .Height /2);if _cff ==nil {_cff =_bbb ();};_gedg :=_ebge (_cg .BytesPerLine ,2*_ffd .BytesPerLine );switch _dcc {case 1:_ffa =_bgf (_cg ,_ffd ,_cff ,_gedg );case 2:_ffa =_eag (_cg ,_ffd ,_cff ,_gedg );case 3:_ffa =_gfbd (_cg ,_ffd ,_cff ,_gedg );
case 4:_ffa =_agfa (_cg ,_ffd ,_cff ,_gedg );};if _ffa !=nil {return nil ,_ffa ;};return _ffd ,nil ;};func _afga (_baae Gray ,_bef CMYK ,_aebe _e .Rectangle ){for _ced :=0;_ced < _aebe .Max .X ;_ced ++{for _bdc :=0;_bdc < _aebe .Max .Y ;_bdc ++{_eaed :=_baae .GrayAt (_ced ,_bdc );
_bef .SetCMYK (_ced ,_bdc ,_gcc (_eaed ));};};};func (_dbgf *ImageBase )Pix ()[]byte {return _dbgf .Data };type SMasker interface{HasAlpha ()bool ;GetAlpha ()[]byte ;MakeAlpha ();};func (_fgag *Gray16 )SetGray (x ,y int ,g _gbg .Gray ){_ecac :=(y *_fgag .BytesPerLine /2+x )*2;
if _ecac +1>=len (_fgag .Data ){return ;};_fgag .Data [_ecac ]=g .Y ;_fgag .Data [_ecac +1]=g .Y ;};func (_efg *Gray4 )Copy ()Image {return &Gray4 {ImageBase :_efg .copy ()}};func _cgbc (_gdfff ,_cfbgf NRGBA ,_begf _e .Rectangle ){for _befd :=0;_befd < _begf .Max .X ;
_befd ++{for _eadbc :=0;_eadbc < _begf .Max .Y ;_eadbc ++{_cfbgf .SetNRGBA (_befd ,_eadbc ,_gdfff .NRGBAAt (_befd ,_eadbc ));};};};func _bceag (_agaa *_e .Gray16 ,_caea uint8 )*_e .Gray {_gefbb :=_agaa .Bounds ();_ggfc :=_e .NewGray (_gefbb );for _fddf :=0;
_fddf < _gefbb .Dx ();_fddf ++{for _acge :=0;_acge < _gefbb .Dy ();_acge ++{_adbgd :=_agaa .Gray16At (_fddf ,_acge );_ggfc .SetGray (_fddf ,_acge ,_gbg .Gray {Y :_abdcc (uint8 (_adbgd .Y /256),_caea )});};};return _ggfc ;};func _bebf (_cega _e .Image ,_abdd uint8 )*_e .Gray {_cfbd :=_cega .Bounds ();
_ccdfc :=_e .NewGray (_cfbd );var (_dceea _gbg .Color ;_dfef _gbg .Gray ;);for _abbf :=0;_abbf < _cfbd .Max .X ;_abbf ++{for _edaf :=0;_edaf < _cfbd .Max .Y ;_edaf ++{_dceea =_cega .At (_abbf ,_edaf );_ccdfc .Set (_abbf ,_edaf ,_dceea );_dfef =_ccdfc .GrayAt (_abbf ,_edaf );
_ccdfc .SetGray (_abbf ,_edaf ,_gbg .Gray {Y :_abdcc (_dfef .Y ,_abdd )});};};return _ccdfc ;};func FromGoImage (i _e .Image )(Image ,error ){switch _ggecg :=i .(type ){case Image :return _ggecg .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 );};};func _cacda (_fgedf RGBA ,_ebcc Gray ,_aaabc _e .Rectangle ){for _bgbf :=0;
_bgbf < _aaabc .Max .X ;_bgbf ++{for _febd :=0;_febd < _aaabc .Max .Y ;_febd ++{_dge :=_bfga (_fgedf .RGBAAt (_bgbf ,_febd ));_ebcc .SetGray (_bgbf ,_febd ,_dge );};};};type RGBA32 struct{ImageBase };func _gegf (_cbcb _gbg .Gray )_gbg .Gray {_ebab :=_cbcb .Y >>6;
_ebab |=_ebab <<2;_cbcb .Y =_ebab |_ebab <<4;return _cbcb ;};func _gdfd (_ccafc *Monochrome ,_daad ,_gccaf ,_bag ,_efe int ,_abbc RasterOperator ,_ccad *Monochrome ,_cagef ,_eacf int )error {var (_egdb bool ;_cfcd bool ;_beag byte ;_fcbc int ;_adfb int ;
_defa int ;_gebe int ;_adea bool ;_dacb int ;_eaga int ;_gbbbf int ;_ddde bool ;_dbfa byte ;_caba int ;_cdeba int ;_ecbb int ;_aace byte ;_gdaf int ;_aaf int ;_bbd uint ;_dfae uint ;_gfcg byte ;_ddbf shift ;_aeeb bool ;_ddcd bool ;_egcb ,_dcde int ;);if _cagef &7!=0{_aaf =8-(_cagef &7);
};if _daad &7!=0{_adfb =8-(_daad &7);};if _aaf ==0&&_adfb ==0{_gfcg =_ggeg [0];}else {if _adfb > _aaf {_bbd =uint (_adfb -_aaf );}else {_bbd =uint (8-(_aaf -_adfb ));};_dfae =8-_bbd ;_gfcg =_ggeg [_bbd ];};if (_daad &7)!=0{_egdb =true ;_fcbc =8-(_daad &7);
_beag =_ggeg [_fcbc ];_defa =_ccafc .BytesPerLine *_gccaf +(_daad >>3);_gebe =_ccad .BytesPerLine *_eacf +(_cagef >>3);_gdaf =8-(_cagef &7);if _fcbc > _gdaf {_ddbf =_cddb ;if _bag >=_aaf {_aeeb =true ;};}else {_ddbf =_gafe ;};};if _bag < _fcbc {_cfcd =true ;
_beag &=_gdac [8-_fcbc +_bag ];};if !_cfcd {_dacb =(_bag -_fcbc )>>3;if _dacb !=0{_adea =true ;_eaga =_ccafc .BytesPerLine *_gccaf +((_daad +_adfb )>>3);_gbbbf =_ccad .BytesPerLine *_eacf +((_cagef +_adfb )>>3);};};_caba =(_daad +_bag )&7;if !(_cfcd ||_caba ==0){_ddde =true ;
_dbfa =_gdac [_caba ];_cdeba =_ccafc .BytesPerLine *_gccaf +((_daad +_adfb )>>3)+_dacb ;_ecbb =_ccad .BytesPerLine *_eacf +((_cagef +_adfb )>>3)+_dacb ;if _caba > int (_dfae ){_ddcd =true ;};};switch _abbc {case PixSrc :if _egdb {for _egcb =0;_egcb < _efe ;
_egcb ++{if _ddbf ==_cddb {_aace =_ccad .Data [_gebe ]<<_bbd ;if _aeeb {_aace =_accbe (_aace ,_ccad .Data [_gebe +1]>>_dfae ,_gfcg );};}else {_aace =_ccad .Data [_gebe ]>>_dfae ;};_ccafc .Data [_defa ]=_accbe (_ccafc .Data [_defa ],_aace ,_beag );_defa +=_ccafc .BytesPerLine ;
_gebe +=_ccad .BytesPerLine ;};};if _adea {for _egcb =0;_egcb < _efe ;_egcb ++{for _dcde =0;_dcde < _dacb ;_dcde ++{_aace =_accbe (_ccad .Data [_gbbbf +_dcde ]<<_bbd ,_ccad .Data [_gbbbf +_dcde +1]>>_dfae ,_gfcg );_ccafc .Data [_eaga +_dcde ]=_aace ;};
_eaga +=_ccafc .BytesPerLine ;_gbbbf +=_ccad .BytesPerLine ;};};if _ddde {for _egcb =0;_egcb < _efe ;_egcb ++{_aace =_ccad .Data [_ecbb ]<<_bbd ;if _ddcd {_aace =_accbe (_aace ,_ccad .Data [_ecbb +1]>>_dfae ,_gfcg );};_ccafc .Data [_cdeba ]=_accbe (_ccafc .Data [_cdeba ],_aace ,_dbfa );
_cdeba +=_ccafc .BytesPerLine ;_ecbb +=_ccad .BytesPerLine ;};};case PixNotSrc :if _egdb {for _egcb =0;_egcb < _efe ;_egcb ++{if _ddbf ==_cddb {_aace =_ccad .Data [_gebe ]<<_bbd ;if _aeeb {_aace =_accbe (_aace ,_ccad .Data [_gebe +1]>>_dfae ,_gfcg );};
}else {_aace =_ccad .Data [_gebe ]>>_dfae ;};_ccafc .Data [_defa ]=_accbe (_ccafc .Data [_defa ],^_aace ,_beag );_defa +=_ccafc .BytesPerLine ;_gebe +=_ccad .BytesPerLine ;};};if _adea {for _egcb =0;_egcb < _efe ;_egcb ++{for _dcde =0;_dcde < _dacb ;_dcde ++{_aace =_accbe (_ccad .Data [_gbbbf +_dcde ]<<_bbd ,_ccad .Data [_gbbbf +_dcde +1]>>_dfae ,_gfcg );
_ccafc .Data [_eaga +_dcde ]=^_aace ;};_eaga +=_ccafc .BytesPerLine ;_gbbbf +=_ccad .BytesPerLine ;};};if _ddde {for _egcb =0;_egcb < _efe ;_egcb ++{_aace =_ccad .Data [_ecbb ]<<_bbd ;if _ddcd {_aace =_accbe (_aace ,_ccad .Data [_ecbb +1]>>_dfae ,_gfcg );
};_ccafc .Data [_cdeba ]=_accbe (_ccafc .Data [_cdeba ],^_aace ,_dbfa );_cdeba +=_ccafc .BytesPerLine ;_ecbb +=_ccad .BytesPerLine ;};};case PixSrcOrDst :if _egdb {for _egcb =0;_egcb < _efe ;_egcb ++{if _ddbf ==_cddb {_aace =_ccad .Data [_gebe ]<<_bbd ;
if _aeeb {_aace =_accbe (_aace ,_ccad .Data [_gebe +1]>>_dfae ,_gfcg );};}else {_aace =_ccad .Data [_gebe ]>>_dfae ;};_ccafc .Data [_defa ]=_accbe (_ccafc .Data [_defa ],_aace |_ccafc .Data [_defa ],_beag );_defa +=_ccafc .BytesPerLine ;_gebe +=_ccad .BytesPerLine ;
};};if _adea {for _egcb =0;_egcb < _efe ;_egcb ++{for _dcde =0;_dcde < _dacb ;_dcde ++{_aace =_accbe (_ccad .Data [_gbbbf +_dcde ]<<_bbd ,_ccad .Data [_gbbbf +_dcde +1]>>_dfae ,_gfcg );_ccafc .Data [_eaga +_dcde ]|=_aace ;};_eaga +=_ccafc .BytesPerLine ;
_gbbbf +=_ccad .BytesPerLine ;};};if _ddde {for _egcb =0;_egcb < _efe ;_egcb ++{_aace =_ccad .Data [_ecbb ]<<_bbd ;if _ddcd {_aace =_accbe (_aace ,_ccad .Data [_ecbb +1]>>_dfae ,_gfcg );};_ccafc .Data [_cdeba ]=_accbe (_ccafc .Data [_cdeba ],_aace |_ccafc .Data [_cdeba ],_dbfa );
_cdeba +=_ccafc .BytesPerLine ;_ecbb +=_ccad .BytesPerLine ;};};case PixSrcAndDst :if _egdb {for _egcb =0;_egcb < _efe ;_egcb ++{if _ddbf ==_cddb {_aace =_ccad .Data [_gebe ]<<_bbd ;if _aeeb {_aace =_accbe (_aace ,_ccad .Data [_gebe +1]>>_dfae ,_gfcg );
};}else {_aace =_ccad .Data [_gebe ]>>_dfae ;};_ccafc .Data [_defa ]=_accbe (_ccafc .Data [_defa ],_aace &_ccafc .Data [_defa ],_beag );_defa +=_ccafc .BytesPerLine ;_gebe +=_ccad .BytesPerLine ;};};if _adea {for _egcb =0;_egcb < _efe ;_egcb ++{for _dcde =0;
_dcde < _dacb ;_dcde ++{_aace =_accbe (_ccad .Data [_gbbbf +_dcde ]<<_bbd ,_ccad .Data [_gbbbf +_dcde +1]>>_dfae ,_gfcg );_ccafc .Data [_eaga +_dcde ]&=_aace ;};_eaga +=_ccafc .BytesPerLine ;_gbbbf +=_ccad .BytesPerLine ;};};if _ddde {for _egcb =0;_egcb < _efe ;
_egcb ++{_aace =_ccad .Data [_ecbb ]<<_bbd ;if _ddcd {_aace =_accbe (_aace ,_ccad .Data [_ecbb +1]>>_dfae ,_gfcg );};_ccafc .Data [_cdeba ]=_accbe (_ccafc .Data [_cdeba ],_aace &_ccafc .Data [_cdeba ],_dbfa );_cdeba +=_ccafc .BytesPerLine ;_ecbb +=_ccad .BytesPerLine ;
};};case PixSrcXorDst :if _egdb {for _egcb =0;_egcb < _efe ;_egcb ++{if _ddbf ==_cddb {_aace =_ccad .Data [_gebe ]<<_bbd ;if _aeeb {_aace =_accbe (_aace ,_ccad .Data [_gebe +1]>>_dfae ,_gfcg );};}else {_aace =_ccad .Data [_gebe ]>>_dfae ;};_ccafc .Data [_defa ]=_accbe (_ccafc .Data [_defa ],_aace ^_ccafc .Data [_defa ],_beag );
_defa +=_ccafc .BytesPerLine ;_gebe +=_ccad .BytesPerLine ;};};if _adea {for _egcb =0;_egcb < _efe ;_egcb ++{for _dcde =0;_dcde < _dacb ;_dcde ++{_aace =_accbe (_ccad .Data [_gbbbf +_dcde ]<<_bbd ,_ccad .Data [_gbbbf +_dcde +1]>>_dfae ,_gfcg );_ccafc .Data [_eaga +_dcde ]^=_aace ;
};_eaga +=_ccafc .BytesPerLine ;_gbbbf +=_ccad .BytesPerLine ;};};if _ddde {for _egcb =0;_egcb < _efe ;_egcb ++{_aace =_ccad .Data [_ecbb ]<<_bbd ;if _ddcd {_aace =_accbe (_aace ,_ccad .Data [_ecbb +1]>>_dfae ,_gfcg );};_ccafc .Data [_cdeba ]=_accbe (_ccafc .Data [_cdeba ],_aace ^_ccafc .Data [_cdeba ],_dbfa );
_cdeba +=_ccafc .BytesPerLine ;_ecbb +=_ccad .BytesPerLine ;};};case PixNotSrcOrDst :if _egdb {for _egcb =0;_egcb < _efe ;_egcb ++{if _ddbf ==_cddb {_aace =_ccad .Data [_gebe ]<<_bbd ;if _aeeb {_aace =_accbe (_aace ,_ccad .Data [_gebe +1]>>_dfae ,_gfcg );
};}else {_aace =_ccad .Data [_gebe ]>>_dfae ;};_ccafc .Data [_defa ]=_accbe (_ccafc .Data [_defa ],^_aace |_ccafc .Data [_defa ],_beag );_defa +=_ccafc .BytesPerLine ;_gebe +=_ccad .BytesPerLine ;};};if _adea {for _egcb =0;_egcb < _efe ;_egcb ++{for _dcde =0;
_dcde < _dacb ;_dcde ++{_aace =_accbe (_ccad .Data [_gbbbf +_dcde ]<<_bbd ,_ccad .Data [_gbbbf +_dcde +1]>>_dfae ,_gfcg );_ccafc .Data [_eaga +_dcde ]|=^_aace ;};_eaga +=_ccafc .BytesPerLine ;_gbbbf +=_ccad .BytesPerLine ;};};if _ddde {for _egcb =0;_egcb < _efe ;
_egcb ++{_aace =_ccad .Data [_ecbb ]<<_bbd ;if _ddcd {_aace =_accbe (_aace ,_ccad .Data [_ecbb +1]>>_dfae ,_gfcg );};_ccafc .Data [_cdeba ]=_accbe (_ccafc .Data [_cdeba ],^_aace |_ccafc .Data [_cdeba ],_dbfa );_cdeba +=_ccafc .BytesPerLine ;_ecbb +=_ccad .BytesPerLine ;
};};case PixNotSrcAndDst :if _egdb {for _egcb =0;_egcb < _efe ;_egcb ++{if _ddbf ==_cddb {_aace =_ccad .Data [_gebe ]<<_bbd ;if _aeeb {_aace =_accbe (_aace ,_ccad .Data [_gebe +1]>>_dfae ,_gfcg );};}else {_aace =_ccad .Data [_gebe ]>>_dfae ;};_ccafc .Data [_defa ]=_accbe (_ccafc .Data [_defa ],^_aace &_ccafc .Data [_defa ],_beag );
_defa +=_ccafc .BytesPerLine ;_gebe +=_ccad .BytesPerLine ;};};if _adea {for _egcb =0;_egcb < _efe ;_egcb ++{for _dcde =0;_dcde < _dacb ;_dcde ++{_aace =_accbe (_ccad .Data [_gbbbf +_dcde ]<<_bbd ,_ccad .Data [_gbbbf +_dcde +1]>>_dfae ,_gfcg );_ccafc .Data [_eaga +_dcde ]&=^_aace ;
};_eaga +=_ccafc .BytesPerLine ;_gbbbf +=_ccad .BytesPerLine ;};};if _ddde {for _egcb =0;_egcb < _efe ;_egcb ++{_aace =_ccad .Data [_ecbb ]<<_bbd ;if _ddcd {_aace =_accbe (_aace ,_ccad .Data [_ecbb +1]>>_dfae ,_gfcg );};_ccafc .Data [_cdeba ]=_accbe (_ccafc .Data [_cdeba ],^_aace &_ccafc .Data [_cdeba ],_dbfa );
_cdeba +=_ccafc .BytesPerLine ;_ecbb +=_ccad .BytesPerLine ;};};case PixSrcOrNotDst :if _egdb {for _egcb =0;_egcb < _efe ;_egcb ++{if _ddbf ==_cddb {_aace =_ccad .Data [_gebe ]<<_bbd ;if _aeeb {_aace =_accbe (_aace ,_ccad .Data [_gebe +1]>>_dfae ,_gfcg );
};}else {_aace =_ccad .Data [_gebe ]>>_dfae ;};_ccafc .Data [_defa ]=_accbe (_ccafc .Data [_defa ],_aace |^_ccafc .Data [_defa ],_beag );_defa +=_ccafc .BytesPerLine ;_gebe +=_ccad .BytesPerLine ;};};if _adea {for _egcb =0;_egcb < _efe ;_egcb ++{for _dcde =0;
_dcde < _dacb ;_dcde ++{_aace =_accbe (_ccad .Data [_gbbbf +_dcde ]<<_bbd ,_ccad .Data [_gbbbf +_dcde +1]>>_dfae ,_gfcg );_ccafc .Data [_eaga +_dcde ]=_aace |^_ccafc .Data [_eaga +_dcde ];};_eaga +=_ccafc .BytesPerLine ;_gbbbf +=_ccad .BytesPerLine ;};
};if _ddde {for _egcb =0;_egcb < _efe ;_egcb ++{_aace =_ccad .Data [_ecbb ]<<_bbd ;if _ddcd {_aace =_accbe (_aace ,_ccad .Data [_ecbb +1]>>_dfae ,_gfcg );};_ccafc .Data [_cdeba ]=_accbe (_ccafc .Data [_cdeba ],_aace |^_ccafc .Data [_cdeba ],_dbfa );_cdeba +=_ccafc .BytesPerLine ;
_ecbb +=_ccad .BytesPerLine ;};};case PixSrcAndNotDst :if _egdb {for _egcb =0;_egcb < _efe ;_egcb ++{if _ddbf ==_cddb {_aace =_ccad .Data [_gebe ]<<_bbd ;if _aeeb {_aace =_accbe (_aace ,_ccad .Data [_gebe +1]>>_dfae ,_gfcg );};}else {_aace =_ccad .Data [_gebe ]>>_dfae ;
};_ccafc .Data [_defa ]=_accbe (_ccafc .Data [_defa ],_aace &^_ccafc .Data [_defa ],_beag );_defa +=_ccafc .BytesPerLine ;_gebe +=_ccad .BytesPerLine ;};};if _adea {for _egcb =0;_egcb < _efe ;_egcb ++{for _dcde =0;_dcde < _dacb ;_dcde ++{_aace =_accbe (_ccad .Data [_gbbbf +_dcde ]<<_bbd ,_ccad .Data [_gbbbf +_dcde +1]>>_dfae ,_gfcg );
_ccafc .Data [_eaga +_dcde ]=_aace &^_ccafc .Data [_eaga +_dcde ];};_eaga +=_ccafc .BytesPerLine ;_gbbbf +=_ccad .BytesPerLine ;};};if _ddde {for _egcb =0;_egcb < _efe ;_egcb ++{_aace =_ccad .Data [_ecbb ]<<_bbd ;if _ddcd {_aace =_accbe (_aace ,_ccad .Data [_ecbb +1]>>_dfae ,_gfcg );
};_ccafc .Data [_cdeba ]=_accbe (_ccafc .Data [_cdeba ],_aace &^_ccafc .Data [_cdeba ],_dbfa );_cdeba +=_ccafc .BytesPerLine ;_ecbb +=_ccad .BytesPerLine ;};};case PixNotPixSrcOrDst :if _egdb {for _egcb =0;_egcb < _efe ;_egcb ++{if _ddbf ==_cddb {_aace =_ccad .Data [_gebe ]<<_bbd ;
if _aeeb {_aace =_accbe (_aace ,_ccad .Data [_gebe +1]>>_dfae ,_gfcg );};}else {_aace =_ccad .Data [_gebe ]>>_dfae ;};_ccafc .Data [_defa ]=_accbe (_ccafc .Data [_defa ],^(_aace |_ccafc .Data [_defa ]),_beag );_defa +=_ccafc .BytesPerLine ;_gebe +=_ccad .BytesPerLine ;
};};if _adea {for _egcb =0;_egcb < _efe ;_egcb ++{for _dcde =0;_dcde < _dacb ;_dcde ++{_aace =_accbe (_ccad .Data [_gbbbf +_dcde ]<<_bbd ,_ccad .Data [_gbbbf +_dcde +1]>>_dfae ,_gfcg );_ccafc .Data [_eaga +_dcde ]=^(_aace |_ccafc .Data [_eaga +_dcde ]);
};_eaga +=_ccafc .BytesPerLine ;_gbbbf +=_ccad .BytesPerLine ;};};if _ddde {for _egcb =0;_egcb < _efe ;_egcb ++{_aace =_ccad .Data [_ecbb ]<<_bbd ;if _ddcd {_aace =_accbe (_aace ,_ccad .Data [_ecbb +1]>>_dfae ,_gfcg );};_ccafc .Data [_cdeba ]=_accbe (_ccafc .Data [_cdeba ],^(_aace |_ccafc .Data [_cdeba ]),_dbfa );
_cdeba +=_ccafc .BytesPerLine ;_ecbb +=_ccad .BytesPerLine ;};};case PixNotPixSrcAndDst :if _egdb {for _egcb =0;_egcb < _efe ;_egcb ++{if _ddbf ==_cddb {_aace =_ccad .Data [_gebe ]<<_bbd ;if _aeeb {_aace =_accbe (_aace ,_ccad .Data [_gebe +1]>>_dfae ,_gfcg );
};}else {_aace =_ccad .Data [_gebe ]>>_dfae ;};_ccafc .Data [_defa ]=_accbe (_ccafc .Data [_defa ],^(_aace &_ccafc .Data [_defa ]),_beag );_defa +=_ccafc .BytesPerLine ;_gebe +=_ccad .BytesPerLine ;};};if _adea {for _egcb =0;_egcb < _efe ;_egcb ++{for _dcde =0;
_dcde < _dacb ;_dcde ++{_aace =_accbe (_ccad .Data [_gbbbf +_dcde ]<<_bbd ,_ccad .Data [_gbbbf +_dcde +1]>>_dfae ,_gfcg );_ccafc .Data [_eaga +_dcde ]=^(_aace &_ccafc .Data [_eaga +_dcde ]);};_eaga +=_ccafc .BytesPerLine ;_gbbbf +=_ccad .BytesPerLine ;
};};if _ddde {for _egcb =0;_egcb < _efe ;_egcb ++{_aace =_ccad .Data [_ecbb ]<<_bbd ;if _ddcd {_aace =_accbe (_aace ,_ccad .Data [_ecbb +1]>>_dfae ,_gfcg );};_ccafc .Data [_cdeba ]=_accbe (_ccafc .Data [_cdeba ],^(_aace &_ccafc .Data [_cdeba ]),_dbfa );
_cdeba +=_ccafc .BytesPerLine ;_ecbb +=_ccad .BytesPerLine ;};};case PixNotPixSrcXorDst :if _egdb {for _egcb =0;_egcb < _efe ;_egcb ++{if _ddbf ==_cddb {_aace =_ccad .Data [_gebe ]<<_bbd ;if _aeeb {_aace =_accbe (_aace ,_ccad .Data [_gebe +1]>>_dfae ,_gfcg );
};}else {_aace =_ccad .Data [_gebe ]>>_dfae ;};_ccafc .Data [_defa ]=_accbe (_ccafc .Data [_defa ],^(_aace ^_ccafc .Data [_defa ]),_beag );_defa +=_ccafc .BytesPerLine ;_gebe +=_ccad .BytesPerLine ;};};if _adea {for _egcb =0;_egcb < _efe ;_egcb ++{for _dcde =0;
_dcde < _dacb ;_dcde ++{_aace =_accbe (_ccad .Data [_gbbbf +_dcde ]<<_bbd ,_ccad .Data [_gbbbf +_dcde +1]>>_dfae ,_gfcg );_ccafc .Data [_eaga +_dcde ]=^(_aace ^_ccafc .Data [_eaga +_dcde ]);};_eaga +=_ccafc .BytesPerLine ;_gbbbf +=_ccad .BytesPerLine ;
};};if _ddde {for _egcb =0;_egcb < _efe ;_egcb ++{_aace =_ccad .Data [_ecbb ]<<_bbd ;if _ddcd {_aace =_accbe (_aace ,_ccad .Data [_ecbb +1]>>_dfae ,_gfcg );};_ccafc .Data [_cdeba ]=_accbe (_ccafc .Data [_cdeba ],^(_aace ^_ccafc .Data [_cdeba ]),_dbfa );
_cdeba +=_ccafc .BytesPerLine ;_ecbb +=_ccad .BytesPerLine ;};};default:_gbb .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",_abbc );
return _f .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 _dcg (_fgbb _gbg .Gray )_gbg .NRGBA {return _gbg .NRGBA {R :_fgbb .Y ,G :_fgbb .Y ,B :_fgbb .Y ,A :0xff}};
func _fgc (_dgg int )[]uint {var _ggd []uint ;_ddc :=_dgg ;_geg :=_ddc /8;if _geg !=0{for _gca :=0;_gca < _geg ;_gca ++{_ggd =append (_ggd ,8);};_bd :=_ddc %8;_ddc =0;if _bd !=0{_ddc =_bd ;};};_dce :=_ddc /4;if _dce !=0{for _cba :=0;_cba < _dce ;_cba ++{_ggd =append (_ggd ,4);
};_bg :=_ddc %4;_ddc =0;if _bg !=0{_ddc =_bg ;};};_dff :=_ddc /2;if _dff !=0{for _bcf :=0;_bcf < _dff ;_bcf ++{_ggd =append (_ggd ,2);};};return _ggd ;};type NRGBA32 struct{ImageBase };func MonochromeModel (threshold uint8 )_gbg .Model {return monochromeModel (threshold )};
func _bcdc (_dddg Gray ,_cgde nrgba64 ,_cbc _e .Rectangle ){for _eaa :=0;_eaa < _cbc .Max .X ;_eaa ++{for _bgfdd :=0;_bgfdd < _cbc .Max .Y ;_bgfdd ++{_eec :=_bfed (_cgde .NRGBA64At (_eaa ,_bgfdd ));_dddg .SetGray (_eaa ,_bgfdd ,_eec );};};};func (_feg monochromeModel )Convert (c _gbg .Color )_gbg .Color {_gcfa :=_gbg .GrayModel .Convert (c ).(_gbg .Gray );
return _ddbg (_gcfa ,_feg );};func (_ecfeb *NRGBA16 )Validate ()error {if len (_ecfeb .Data )!=3*_ecfeb .Width *_ecfeb .Height /2{return _f .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 )(_gbg .NRGBA64 ,error ){_bdde :=(y *width +x )*2;_bebc :=_bdde *3;if _bebc +5>=len (data ){return _gbg .NRGBA64 {},_ab .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 _baba =0xffff;_fada :=uint16 (_baba );if alpha !=nil &&len (alpha )> _bdde +1{_fada =uint16 (alpha [_bdde ])<<8|uint16 (alpha [_bdde +1]);};_fegb :=uint16 (data [_bebc ])<<8|uint16 (data [_bebc +1]);_edcb :=uint16 (data [_bebc +2])<<8|uint16 (data [_bebc +3]);
_ggbc :=uint16 (data [_bebc +4])<<8|uint16 (data [_bebc +5]);if len (decode )==6{_fegb =uint16 (uint64 (LinearInterpolate (float64 (_fegb ),0,65535,decode [0],decode [1]))&_baba );_edcb =uint16 (uint64 (LinearInterpolate (float64 (_edcb ),0,65535,decode [2],decode [3]))&_baba );
_ggbc =uint16 (uint64 (LinearInterpolate (float64 (_ggbc ),0,65535,decode [4],decode [5]))&_baba );};return _gbg .NRGBA64 {R :_fegb ,G :_edcb ,B :_ggbc ,A :_fada },nil ;};func (_cfdgc *RGBA32 )ColorAt (x ,y int )(_gbg .Color ,error ){return ColorAtRGBA32 (x ,y ,_cfdgc .Width ,_cfdgc .Data ,_cfdgc .Alpha ,_cfdgc .Decode );
};func _cdba (_aadba _e .Image ,_cgb Image ,_bgfa _e .Rectangle ){switch _fbge :=_aadba .(type ){case Gray :_ecb (_fbge ,_cgb .(Gray ),_bgfa );case NRGBA :_bgafa (_fbge ,_cgb .(Gray ),_bgfa );case CMYK :_dcba (_fbge ,_cgb .(Gray ),_bgfa );case RGBA :_cacda (_fbge ,_cgb .(Gray ),_bgfa );
default:_fdea (_aadba ,_cgb ,_bgfa );};};func (_bbgc *NRGBA64 )ColorModel ()_gbg .Model {return _gbg .NRGBA64Model };func (_beda *ImageBase )setByte (_agfaf int ,_fcdbg byte )error {if _agfaf > len (_beda .Data )-1{return _f .New ("\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_beda .Data [_agfaf ]=_fcdbg ;return nil ;};func _deg (_ebca _gbg .NRGBA )_gbg .RGBA {_fgab ,_bae ,_eea ,_cca :=_ebca .RGBA ();return _gbg .RGBA {R :uint8 (_fgab >>8),G :uint8 (_bae >>8),B :uint8 (_eea >>8),A :uint8 (_cca >>8)};};func _bdae (_abga Gray ,_geba RGBA ,_bbfge _e .Rectangle ){for _bbdb :=0;
_bbdb < _bbfge .Max .X ;_bbdb ++{for _dgc :=0;_dgc < _bbfge .Max .Y ;_dgc ++{_acgd :=_abga .GrayAt (_bbdb ,_dgc );_geba .SetRGBA (_bbdb ,_dgc ,_dac (_acgd ));};};};func (_efef *NRGBA32 )SetNRGBA (x ,y int ,c _gbg .NRGBA ){_bfbb :=y *_efef .Width +x ;_ggdde :=3*_bfbb ;
if _ggdde +2>=len (_efef .Data ){return ;};_efef .setRGBA (_bfbb ,c );};func (_afdg *NRGBA16 )Copy ()Image {return &NRGBA16 {ImageBase :_afdg .copy ()}};type NRGBA16 struct{ImageBase };type NRGBA interface{NRGBAAt (_ddbgc ,_ggb int )_gbg .NRGBA ;SetNRGBA (_dfdg ,_acef int ,_fbga _gbg .NRGBA );
};func (_edbc *NRGBA16 )Base ()*ImageBase {return &_edbc .ImageBase };func (_ccdf *NRGBA16 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_ccdf .Width ,Y :_ccdf .Height }};};func (_ebec *NRGBA32 )Base ()*ImageBase {return &_ebec .ImageBase };
type Histogramer interface{Histogram ()[256]int ;};func (_fbf *Monochrome )setGray (_aec int ,_aeed _gbg .Gray ,_aaab int ){if _aeed .Y ==0{_fbf .clearBit (_aaab ,_aec );}else {_fbf .setGrayBit (_aaab ,_aec );};};func (_ebaad *NRGBA16 )At (x ,y int )_gbg .Color {_bgeb ,_ :=_ebaad .ColorAt (x ,y );
return _bgeb };var _ Image =&Gray2 {};func (_debg *NRGBA64 )NRGBA64At (x ,y int )_gbg .NRGBA64 {_feef ,_ :=ColorAtNRGBA64 (x ,y ,_debg .Width ,_debg .Data ,_debg .Alpha ,_debg .Decode );return _feef ;};func (_cagd *Gray16 )Validate ()error {if len (_cagd .Data )!=_cagd .Height *_cagd .BytesPerLine {return ErrInvalidImage ;
};return nil ;};func _daf (_fbba _e .Image )(Image ,error ){if _dffde ,_afce :=_fbba .(*Monochrome );_afce {return _dffde ,nil ;};_gff :=_fbba .Bounds ();var _cgec Gray ;switch _dcbe :=_fbba .(type ){case Gray :_cgec =_dcbe ;case NRGBA :_cgec =&Gray8 {ImageBase :NewImageBase (_gff .Max .X ,_gff .Max .Y ,8,1,nil ,nil ,nil )};
_feac (_cgec ,_dcbe ,_gff );case nrgba64 :_cgec =&Gray8 {ImageBase :NewImageBase (_gff .Max .X ,_gff .Max .Y ,8,1,nil ,nil ,nil )};_bcdc (_cgec ,_dcbe ,_gff );default:_caec ,_ccd :=GrayConverter .Convert (_fbba );if _ccd !=nil {return nil ,_ccd ;};_cgec =_caec .(Gray );
};_eda ,_edgb :=NewImage (_gff .Max .X ,_gff .Max .Y ,1,1,nil ,nil ,nil );if _edgb !=nil {return nil ,_edgb ;};_aedb :=_eda .(*Monochrome );_eee :=AutoThresholdTriangle (GrayHistogram (_cgec ));for _ebbg :=0;_ebbg < _gff .Max .X ;_ebbg ++{for _afaf :=0;
_afaf < _gff .Max .Y ;_afaf ++{_agga :=_ddbg (_cgec .GrayAt (_ebbg ,_afaf ),monochromeModel (_eee ));_aedb .SetGray (_ebbg ,_afaf ,_agga );};};return _eda ,nil ;};func (_eeeg *Monochrome )Set (x ,y int ,c _gbg .Color ){_aggaa :=y *_eeeg .BytesPerLine +x >>3;
if _aggaa > len (_eeeg .Data )-1{return ;};_cdbb :=_eeeg .ColorModel ().Convert (c ).(_gbg .Gray );_eeeg .setGray (x ,_cdbb ,_aggaa );};func (_bccc *NRGBA64 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_bccc .Width ,Y :_bccc .Height }};
};func _dcdd (_bcaa _gbg .CMYK )_gbg .Gray {_fgfd ,_bad ,_fdead :=_gbg .CMYKToRGB (_bcaa .C ,_bcaa .M ,_bcaa .Y ,_bcaa .K );_fbda :=(19595*uint32 (_fgfd )+38470*uint32 (_bad )+7471*uint32 (_fdead )+1<<7)>>16;return _gbg .Gray {Y :uint8 (_fbda )};};func _ebeb (_egfa _e .Image )(Image ,error ){if _aadg ,_ffb :=_egfa .(*Gray16 );
_ffb {return _aadg .Copy (),nil ;};_gdbg :=_egfa .Bounds ();_cedf ,_eeca :=NewImage (_gdbg .Max .X ,_gdbg .Max .Y ,16,1,nil ,nil ,nil );if _eeca !=nil {return nil ,_eeca ;};_cdba (_egfa ,_cedf ,_gdbg );return _cedf ,nil ;};func (_dedf *CMYK32 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_dedf .Width ,Y :_dedf .Height }};
};func (_bbbb *NRGBA16 )NRGBAAt (x ,y int )_gbg .NRGBA {_egcc ,_ :=ColorAtNRGBA16 (x ,y ,_bbbb .Width ,_bbbb .BytesPerLine ,_bbbb .Data ,_bbbb .Alpha ,_bbbb .Decode );return _egcc ;};func _gdf (_dbc ,_fbe int ,_gbd []byte )*Monochrome {_ead :=_dagf (_dbc ,_fbe );
_ead .Data =_gbd ;return _ead ;};func _aeg ()(_cef [256]uint64 ){for _ccg :=0;_ccg < 256;_ccg ++{if _ccg &0x01!=0{_cef [_ccg ]|=0xff;};if _ccg &0x02!=0{_cef [_ccg ]|=0xff00;};if _ccg &0x04!=0{_cef [_ccg ]|=0xff0000;};if _ccg &0x08!=0{_cef [_ccg ]|=0xff000000;
};if _ccg &0x10!=0{_cef [_ccg ]|=0xff00000000;};if _ccg &0x20!=0{_cef [_ccg ]|=0xff0000000000;};if _ccg &0x40!=0{_cef [_ccg ]|=0xff000000000000;};if _ccg &0x80!=0{_cef [_ccg ]|=0xff00000000000000;};};return _cef ;};func (_ddbb *NRGBA16 )SetNRGBA (x ,y int ,c _gbg .NRGBA ){_eebd :=y *_ddbb .BytesPerLine +x *3/2;
if _eebd +1>=len (_ddbb .Data ){return ;};c =_bbcbea (c );_ddbb .setNRGBA (x ,y ,_eebd ,c );};func (_caafg *ImageBase )GetAlpha ()[]byte {return _caafg .Alpha };var _ NRGBA =&NRGBA32 {};func (_efgg *NRGBA32 )ColorAt (x ,y int )(_gbg .Color ,error ){return ColorAtNRGBA32 (x ,y ,_efgg .Width ,_efgg .Data ,_efgg .Alpha ,_efgg .Decode );
};var _ Image =&NRGBA16 {};func (_cadcg *Gray4 )SetGray (x ,y int ,g _gbg .Gray ){if x >=_cadcg .Width ||y >=_cadcg .Height {return ;};g =_ddfc (g );_cadcg .setGray (x ,y ,g );};func (_bfg colorConverter )Convert (src _e .Image )(Image ,error ){return _bfg ._ggc (src )};
var (Gray2Model =_gbg .ModelFunc (_gded );Gray4Model =_gbg .ModelFunc (_aaag );NRGBA16Model =_gbg .ModelFunc (_cgge ););func _gg (_db *Monochrome ,_ge int ,_ff []uint )(*Monochrome ,error ){_ea :=_ge *_db .Width ;_ef :=_ge *_db .Height ;_fd :=_dagf (_ea ,_ef );
for _b ,_ag :=range _ff {var _de error ;switch _ag {case 2:_de =_ba (_fd ,_db );case 4:_de =_eab (_fd ,_db );case 8:_de =_fcg (_fd ,_db );};if _de !=nil {return nil ,_de ;};if _b !=len (_ff )-1{_db =_fd .copy ();};};return _fd ,nil ;};var _ Image =&CMYK32 {};
func (_cbdd *Monochrome )Histogram ()(_ebae [256]int ){for _ ,_fcee :=range _cbdd .Data {_ebae [0xff]+=int (_edb [_cbdd .Data [_fcee ]]);};return _ebae ;};func (_gdfab *NRGBA64 )ColorAt (x ,y int )(_gbg .Color ,error ){return ColorAtNRGBA64 (x ,y ,_gdfab .Width ,_gdfab .Data ,_gdfab .Alpha ,_gdfab .Decode );
};func (_eccf *Gray4 )ColorAt (x ,y int )(_gbg .Color ,error ){return ColorAtGray4BPC (x ,y ,_eccf .BytesPerLine ,_eccf .Data ,_eccf .Decode );};func _bgafa (_afbcd NRGBA ,_cada Gray ,_dcgg _e .Rectangle ){for _cfg :=0;_cfg < _dcgg .Max .X ;_cfg ++{for _cgff :=0;
_cgff < _dcgg .Max .Y ;_cgff ++{_bcfe :=_faf (_afbcd .NRGBAAt (_cfg ,_cgff ));_cada .SetGray (_cfg ,_cgff ,_bcfe );};};};type monochromeModel uint8 ;func _ecb (_bbcbf ,_dafc Gray ,_bede _e .Rectangle ){for _aegg :=0;_aegg < _bede .Max .X ;_aegg ++{for _eccb :=0;
_eccb < _bede .Max .Y ;_eccb ++{_dafc .SetGray (_aegg ,_eccb ,_bbcbf .GrayAt (_aegg ,_eccb ));};};};func (_acc *Monochrome )IsUnpadded ()bool {return (_acc .Width *_acc .Height )==len (_acc .Data )};func (_dcga *Gray4 )Set (x ,y int ,c _gbg .Color ){if x >=_dcga .Width ||y >=_dcga .Height {return ;
};_fdgaa :=Gray4Model .Convert (c ).(_gbg .Gray );_dcga .setGray (x ,y ,_fdgaa );};func (_afcc *Gray8 )ColorAt (x ,y int )(_gbg .Color ,error ){return ColorAtGray8BPC (x ,y ,_afcc .BytesPerLine ,_afcc .Data ,_afcc .Decode );};func _gfbd (_edf ,_add *Monochrome ,_cbg []byte ,_fbg int )(_fccg error ){var (_ded ,_dea ,_aadb ,_dgd ,_cag ,_fgf ,_dca ,_gabc int ;
_gbbb ,_agf ,_aae ,_bff uint32 ;_ecd ,_cad byte ;_dgb uint16 ;);_cdg :=make ([]byte ,4);_fee :=make ([]byte ,4);for _aadb =0;_aadb < _edf .Height -1;_aadb ,_dgd =_aadb +2,_dgd +1{_ded =_aadb *_edf .BytesPerLine ;_dea =_dgd *_add .BytesPerLine ;for _cag ,_fgf =0,0;
_cag < _fbg ;_cag ,_fgf =_cag +4,_fgf +1{for _dca =0;_dca < 4;_dca ++{_gabc =_ded +_cag +_dca ;if _gabc <=len (_edf .Data )-1&&_gabc < _ded +_edf .BytesPerLine {_cdg [_dca ]=_edf .Data [_gabc ];}else {_cdg [_dca ]=0x00;};_gabc =_ded +_edf .BytesPerLine +_cag +_dca ;
if _gabc <=len (_edf .Data )-1&&_gabc < _ded +(2*_edf .BytesPerLine ){_fee [_dca ]=_edf .Data [_gabc ];}else {_fee [_dca ]=0x00;};};_gbbb =_a .BigEndian .Uint32 (_cdg );_agf =_a .BigEndian .Uint32 (_fee );_aae =_gbbb &_agf ;_aae |=_aae <<1;_bff =_gbbb |_agf ;
_bff &=_bff <<1;_agf =_aae &_bff ;_agf &=0xaaaaaaaa;_gbbb =_agf |(_agf <<7);_ecd =byte (_gbbb >>24);_cad =byte ((_gbbb >>8)&0xff);_gabc =_dea +_fgf ;if _gabc +1==len (_add .Data )-1||_gabc +1>=_dea +_add .BytesPerLine {if _fccg =_add .setByte (_gabc ,_cbg [_ecd ]);
_fccg !=nil {return _ab .Errorf ("\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gabc );};}else {_dgb =(uint16 (_cbg [_ecd ])<<8)|uint16 (_cbg [_cad ]);if _fccg =_add .setTwoBytes (_gabc ,_dgb );_fccg !=nil {return _ab .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",_gabc );
};_fgf ++;};};};return nil ;};func _eege (_cdbd int ,_afefa int )error {return _ab .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",_cdbd ,_afefa );
};func (_cefe *CMYK32 )ColorAt (x ,y int )(_gbg .Color ,error ){return ColorAtCMYK (x ,y ,_cefe .Width ,_cefe .Data ,_cefe .Decode );};func MonochromeThresholdConverter (threshold uint8 )ColorConverter {return &monochromeThresholdConverter {Threshold :threshold };
};func _bfed (_fbdc _gbg .NRGBA64 )_gbg .Gray {var _deac _gbg .NRGBA64 ;if _fbdc ==_deac {return _gbg .Gray {Y :0xff};};_fcga ,_acd ,_acdb ,_ :=_fbdc .RGBA ();_baag :=(19595*_fcga +38470*_acd +7471*_acdb +1<<15)>>24;return _gbg .Gray {Y :uint8 (_baag )};
};func _fbcb (){for _eaabf :=0;_eaabf < 256;_eaabf ++{_edb [_eaabf ]=uint8 (_eaabf &0x1)+(uint8 (_eaabf >>1)&0x1)+(uint8 (_eaabf >>2)&0x1)+(uint8 (_eaabf >>3)&0x1)+(uint8 (_eaabf >>4)&0x1)+(uint8 (_eaabf >>5)&0x1)+(uint8 (_eaabf >>6)&0x1)+(uint8 (_eaabf >>7)&0x1);
};};func (_ccff *Gray4 )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_ccff .Width ,Y :_ccff .Height }};};func (_gdc *Monochrome )Base ()*ImageBase {return &_gdc .ImageBase };func _abdcc (_bcgc ,_fecg uint8 )uint8 {if _bcgc < _fecg {return 255;
};return 0;};func AutoThresholdTriangle (histogram [256]int )uint8 {var _agfb ,_fede ,_cdfg ,_gaed int ;for _fgcfb :=0;_fgcfb < len (histogram );_fgcfb ++{if histogram [_fgcfb ]> 0{_agfb =_fgcfb ;break ;};};if _agfb > 0{_agfb --;};for _bbda :=255;_bbda > 0;
_bbda --{if histogram [_bbda ]> 0{_gaed =_bbda ;break ;};};if _gaed < 255{_gaed ++;};for _eggf :=0;_eggf < 256;_eggf ++{if histogram [_eggf ]> _fede {_cdfg =_eggf ;_fede =histogram [_eggf ];};};var _bcbbc bool ;if (_cdfg -_agfb )< (_gaed -_cdfg ){_bcbbc =true ;
var _bfc int ;_bbeg :=255;for _bfc < _bbeg {_afbcg :=histogram [_bfc ];histogram [_bfc ]=histogram [_bbeg ];histogram [_bbeg ]=_afbcg ;_bfc ++;_bbeg --;};_agfb =255-_gaed ;_cdfg =255-_cdfg ;};if _agfb ==_cdfg {return uint8 (_agfb );};_bdaf :=float64 (histogram [_cdfg ]);
_dgbc :=float64 (_agfb -_cdfg );_bebdb :=_gb .Sqrt (_bdaf *_bdaf +_dgbc *_dgbc );_bdaf /=_bebdb ;_dgbc /=_bebdb ;_bebdb =_bdaf *float64 (_agfb )+_dgbc *float64 (histogram [_agfb ]);_affd :=_agfb ;var _abc float64 ;for _edfa :=_agfb +1;_edfa <=_cdfg ;_edfa ++{_eagg :=_bdaf *float64 (_edfa )+_dgbc *float64 (histogram [_edfa ])-_bebdb ;
if _eagg > _abc {_affd =_edfa ;_abc =_eagg ;};};_affd --;if _bcbbc {var _ccef int ;_dccbe :=255;for _ccef < _dccbe {_cgdg :=histogram [_ccef ];histogram [_ccef ]=histogram [_dccbe ];histogram [_dccbe ]=_cgdg ;_ccef ++;_dccbe --;};return uint8 (255-_affd );
};return uint8 (_affd );};func (_gcae *NRGBA32 )Validate ()error {if len (_gcae .Data )!=3*_gcae .Width *_gcae .Height {return _f .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 ;};var (MonochromeConverter =ConverterFunc (_daf );Gray2Converter =ConverterFunc (_dedc );Gray4Converter =ConverterFunc (_bffa );GrayConverter =ConverterFunc (_dcfd );Gray16Converter =ConverterFunc (_ebeb );NRGBA16Converter =ConverterFunc (_ggadf );
NRGBAConverter =ConverterFunc (_befg );NRGBA64Converter =ConverterFunc (_bgde );RGBAConverter =ConverterFunc (_cefd );CMYKConverter =ConverterFunc (_bgfd ););var _ Image =&RGBA32 {};var _ _e .Image =&NRGBA16 {};func (_cacc *ImageBase )setEightBytes (_gdag int ,_fgcg uint64 )error {_dcgag :=_cacc .BytesPerLine -(_gdag %_cacc .BytesPerLine );
if _cacc .BytesPerLine !=_cacc .Width >>3{_dcgag --;};if _dcgag >=8{return _cacc .setEightFullBytes (_gdag ,_fgcg );};return _cacc .setEightPartlyBytes (_gdag ,_dcgag ,_fgcg );};func _bfe (_eadb _gbg .NRGBA )_gbg .Gray {var _geb _gbg .NRGBA ;if _eadb ==_geb {return _gbg .Gray {Y :0xff};
};_fcb ,_fdd ,_aed ,_ :=_eadb .RGBA ();_ffg :=(19595*_fcb +38470*_fdd +7471*_aed +1<<15)>>24;return _gbg .Gray {Y :uint8 (_ffg )};};func _eeag (_agcg _e .Image ,_caeee Image ,_cdbf _e .Rectangle ){if _gfgfc ,_eded :=_agcg .(SMasker );_eded &&_gfgfc .HasAlpha (){_caeee .(SMasker ).MakeAlpha ();
};switch _cfee :=_agcg .(type ){case Gray :_bbcf (_cfee ,_caeee .(NRGBA ),_cdbf );case NRGBA :_cgbc (_cfee ,_caeee .(NRGBA ),_cdbf );case *_e .NYCbCrA :_aacc (_cfee ,_caeee .(NRGBA ),_cdbf );case CMYK :_eebe (_cfee ,_caeee .(NRGBA ),_cdbf );case RGBA :_fead (_cfee ,_caeee .(NRGBA ),_cdbf );
case nrgba64 :_dgda (_cfee ,_caeee .(NRGBA ),_cdbf );default:_fdea (_agcg ,_caeee ,_cdbf );};};func (_bgdfg *RGBA32 )RGBAAt (x ,y int )_gbg .RGBA {_abfd ,_ :=ColorAtRGBA32 (x ,y ,_bgdfg .Width ,_bgdfg .Data ,_bgdfg .Alpha ,_bgdfg .Decode );return _abfd ;
};func (_fdaeb *NRGBA64 )At (x ,y int )_gbg .Color {_dbbd ,_ :=_fdaeb .ColorAt (x ,y );return _dbbd };func (_cebc *Gray4 )Base ()*ImageBase {return &_cebc .ImageBase };func (_dgba *CMYK32 )Set (x ,y int ,c _gbg .Color ){_eeg :=4*(y *_dgba .Width +x );if _eeg +3>=len (_dgba .Data ){return ;
};_gea :=_gbg .CMYKModel .Convert (c ).(_gbg .CMYK );_dgba .Data [_eeg ]=_gea .C ;_dgba .Data [_eeg +1]=_gea .M ;_dgba .Data [_eeg +2]=_gea .Y ;_dgba .Data [_eeg +3]=_gea .K ;};func GrayHistogram (g Gray )(_fgae [256]int ){switch _gccfb :=g .(type ){case Histogramer :return _gccfb .Histogram ();
case _e .Image :_geac :=_gccfb .Bounds ();for _caeef :=0;_caeef < _geac .Max .X ;_caeef ++{for _cadce :=0;_cadce < _geac .Max .Y ;_cadce ++{_fgae [g .GrayAt (_caeef ,_cadce ).Y ]++;};};return _fgae ;default:return [256]int {};};};func _agea (_gdcf uint )uint {var _addg uint ;
for _gdcf !=0{_gdcf >>=1;_addg ++;};return _addg -1;};func (_gdb *Gray2 )Copy ()Image {return &Gray2 {ImageBase :_gdb .copy ()}};func ColorAt (x ,y ,width ,bitsPerColor ,colorComponents ,bytesPerLine int ,data ,alpha []byte ,decode []float64 )(_gbg .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 ,_ab .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 );
};};type Gray8 struct{ImageBase };func (_ceb *Gray2 )SetGray (x ,y int ,gray _gbg .Gray ){_egdf :=_gegf (gray );_fcfe :=y *_ceb .BytesPerLine ;_baabb :=_fcfe +(x >>2);if _baabb >=len (_ceb .Data ){return ;};_dcbg :=_egdf .Y >>6;_ceb .Data [_baabb ]=(_ceb .Data [_baabb ]&(^(0xc0>>uint (2*((x )&3)))))|(_dcbg <<uint (6-2*(x &3)));
};func _ggadf (_eceg _e .Image )(Image ,error ){if _cbab ,_fedf :=_eceg .(*NRGBA16 );_fedf {return _cbab .Copy (),nil ;};_gadc :=_eceg .Bounds ();_cbcf ,_ecdb :=NewImage (_gadc .Max .X ,_gadc .Max .Y ,4,3,nil ,nil ,nil );if _ecdb !=nil {return nil ,_ecdb ;
};_eeag (_eceg ,_cbcf ,_gadc );return _cbcf ,nil ;};type nrgba64 interface{NRGBA64At (_ecdgd ,_accce int )_gbg .NRGBA64 ;SetNRGBA64 (_bfgc ,_dafe int ,_cdfc _gbg .NRGBA64 );};func (_fdfc *RGBA32 )Validate ()error {if len (_fdfc .Data )!=3*_fdfc .Width *_fdfc .Height {return _f .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 (_ddae *RGBA32 )Base ()*ImageBase {return &_ddae .ImageBase };func _bbb ()(_cac []byte ){_cac =make ([]byte ,256);for _bdd :=0;_bdd < 256;_bdd ++{_fbc :=byte (_bdd );_cac [_fbc ]=(_fbc &0x01)|((_fbc &0x04)>>1)|((_fbc &0x10)>>2)|((_fbc &0x40)>>3)|((_fbc &0x02)<<3)|((_fbc &0x08)<<2)|((_fbc &0x20)<<1)|(_fbc &0x80);
};return _cac ;};func _cefd (_ccafb _e .Image )(Image ,error ){if _feebg ,_gefb :=_ccafb .(*RGBA32 );_gefb {return _feebg .Copy (),nil ;};_fagf ,_fdfgc ,_adbg :=_aceg (_ccafb ,1);_ecff :=&RGBA32 {ImageBase :NewImageBase (_fagf .Max .X ,_fagf .Max .Y ,8,3,nil ,_adbg ,nil )};
_agcb (_ccafb ,_ecff ,_fagf );if len (_adbg )!=0&&!_fdfgc {if _gabd :=_dbege (_adbg ,_ecff );_gabd !=nil {return nil ,_gabd ;};};return _ecff ,nil ;};var _ Image =&Gray8 {};func _cbda (_bffg *Monochrome ,_bebg ,_cgbb ,_dbcbe ,_agebd int ,_egg RasterOperator ,_bcb *Monochrome ,_gfda ,_gddb int )error {if _bffg ==nil {return _f .New ("\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");
};if _egg ==PixDst {return nil ;};switch _egg {case PixClr ,PixSet ,PixNotDst :_fbbf (_bffg ,_bebg ,_cgbb ,_dbcbe ,_agebd ,_egg );return nil ;};if _bcb ==nil {_gbb .Log .Debug ("\u0052a\u0073\u0074e\u0072\u004f\u0070\u0065r\u0061\u0074\u0069o\u006e\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020bi\u0074\u006d\u0061p\u0020\u0069s\u0020\u006e\u006f\u0074\u0020\u0064e\u0066\u0069n\u0065\u0064");
return _f .New ("\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _dafce :=_cgga (_bffg ,_bebg ,_cgbb ,_dbcbe ,_agebd ,_egg ,_bcb ,_gfda ,_gddb );_dafce !=nil {return _dafce ;};return nil ;};func _fdea (_bdf _e .Image ,_bca Image ,_dcb _e .Rectangle ){for _cade :=0;
_cade < _dcb .Max .X ;_cade ++{for _bfae :=0;_bfae < _dcb .Max .Y ;_bfae ++{_cda :=_bdf .At (_cade ,_bfae );_bca .Set (_cade ,_bfae ,_cda );};};};type ImageBase struct{Width ,Height int ;BitsPerComponent ,ColorComponents int ;Data ,Alpha []byte ;Decode []float64 ;
BytesPerLine int ;};func _dag ()(_gbgb [256]uint16 ){for _bb :=0;_bb < 256;_bb ++{if _bb &0x01!=0{_gbgb [_bb ]|=0x3;};if _bb &0x02!=0{_gbgb [_bb ]|=0xc;};if _bb &0x04!=0{_gbgb [_bb ]|=0x30;};if _bb &0x08!=0{_gbgb [_bb ]|=0xc0;};if _bb &0x10!=0{_gbgb [_bb ]|=0x300;
};if _bb &0x20!=0{_gbgb [_bb ]|=0xc00;};if _bb &0x40!=0{_gbgb [_bb ]|=0x3000;};if _bb &0x80!=0{_gbgb [_bb ]|=0xc000;};};return _gbgb ;};func (_eagbfg *NRGBA64 )Set (x ,y int ,c _gbg .Color ){_bda :=(y *_eagbfg .Width +x )*2;_cgc :=_bda *3;if _cgc +5>=len (_eagbfg .Data ){return ;
};_efeb :=_gbg .NRGBA64Model .Convert (c ).(_gbg .NRGBA64 );_eagbfg .setNRGBA64 (_cgc ,_efeb ,_bda );};var ErrInvalidImage =_f .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");
type Image interface{_c .Image ;Base ()*ImageBase ;Copy ()Image ;Pix ()[]byte ;ColorAt (_fbfd ,_fba int )(_gbg .Color ,error );Validate ()error ;};func (_dbaba *NRGBA64 )setNRGBA64 (_agab int ,_bfgg _gbg .NRGBA64 ,_ffab int ){_dbaba .Data [_agab ]=uint8 (_bfgg .R >>8);
_dbaba .Data [_agab +1]=uint8 (_bfgg .R &0xff);_dbaba .Data [_agab +2]=uint8 (_bfgg .G >>8);_dbaba .Data [_agab +3]=uint8 (_bfgg .G &0xff);_dbaba .Data [_agab +4]=uint8 (_bfgg .B >>8);_dbaba .Data [_agab +5]=uint8 (_bfgg .B &0xff);if _ffab +1< len (_dbaba .Alpha ){_dbaba .Alpha [_ffab ]=uint8 (_bfgg .A >>8);
_dbaba .Alpha [_ffab +1]=uint8 (_bfgg .A &0xff);};};func _ecfe (_cdgf *Monochrome ,_egcf ,_eagc ,_fdab ,_ccffc int ,_bcaac RasterOperator ,_abbb *Monochrome ,_ccaf ,_gbgga int )error {var (_bceaf byte ;_ebbe int ;_fgfa int ;_dae ,_dfdf int ;_fggg ,_eeef int ;
);_bcbc :=_fdab >>3;_gfgf :=_fdab &7;if _gfgf > 0{_bceaf =_gdac [_gfgf ];};_ebbe =_abbb .BytesPerLine *_gbgga +(_ccaf >>3);_fgfa =_cdgf .BytesPerLine *_eagc +(_egcf >>3);switch _bcaac {case PixSrc :for _fggg =0;_fggg < _ccffc ;_fggg ++{_dae =_ebbe +_fggg *_abbb .BytesPerLine ;
_dfdf =_fgfa +_fggg *_cdgf .BytesPerLine ;for _eeef =0;_eeef < _bcbc ;_eeef ++{_cdgf .Data [_dfdf ]=_abbb .Data [_dae ];_dfdf ++;_dae ++;};if _gfgf > 0{_cdgf .Data [_dfdf ]=_accbe (_cdgf .Data [_dfdf ],_abbb .Data [_dae ],_bceaf );};};case PixNotSrc :for _fggg =0;
_fggg < _ccffc ;_fggg ++{_dae =_ebbe +_fggg *_abbb .BytesPerLine ;_dfdf =_fgfa +_fggg *_cdgf .BytesPerLine ;for _eeef =0;_eeef < _bcbc ;_eeef ++{_cdgf .Data [_dfdf ]=^(_abbb .Data [_dae ]);_dfdf ++;_dae ++;};if _gfgf > 0{_cdgf .Data [_dfdf ]=_accbe (_cdgf .Data [_dfdf ],^_abbb .Data [_dae ],_bceaf );
};};case PixSrcOrDst :for _fggg =0;_fggg < _ccffc ;_fggg ++{_dae =_ebbe +_fggg *_abbb .BytesPerLine ;_dfdf =_fgfa +_fggg *_cdgf .BytesPerLine ;for _eeef =0;_eeef < _bcbc ;_eeef ++{_cdgf .Data [_dfdf ]|=_abbb .Data [_dae ];_dfdf ++;_dae ++;};if _gfgf > 0{_cdgf .Data [_dfdf ]=_accbe (_cdgf .Data [_dfdf ],_abbb .Data [_dae ]|_cdgf .Data [_dfdf ],_bceaf );
};};case PixSrcAndDst :for _fggg =0;_fggg < _ccffc ;_fggg ++{_dae =_ebbe +_fggg *_abbb .BytesPerLine ;_dfdf =_fgfa +_fggg *_cdgf .BytesPerLine ;for _eeef =0;_eeef < _bcbc ;_eeef ++{_cdgf .Data [_dfdf ]&=_abbb .Data [_dae ];_dfdf ++;_dae ++;};if _gfgf > 0{_cdgf .Data [_dfdf ]=_accbe (_cdgf .Data [_dfdf ],_abbb .Data [_dae ]&_cdgf .Data [_dfdf ],_bceaf );
};};case PixSrcXorDst :for _fggg =0;_fggg < _ccffc ;_fggg ++{_dae =_ebbe +_fggg *_abbb .BytesPerLine ;_dfdf =_fgfa +_fggg *_cdgf .BytesPerLine ;for _eeef =0;_eeef < _bcbc ;_eeef ++{_cdgf .Data [_dfdf ]^=_abbb .Data [_dae ];_dfdf ++;_dae ++;};if _gfgf > 0{_cdgf .Data [_dfdf ]=_accbe (_cdgf .Data [_dfdf ],_abbb .Data [_dae ]^_cdgf .Data [_dfdf ],_bceaf );
};};case PixNotSrcOrDst :for _fggg =0;_fggg < _ccffc ;_fggg ++{_dae =_ebbe +_fggg *_abbb .BytesPerLine ;_dfdf =_fgfa +_fggg *_cdgf .BytesPerLine ;for _eeef =0;_eeef < _bcbc ;_eeef ++{_cdgf .Data [_dfdf ]|=^(_abbb .Data [_dae ]);_dfdf ++;_dae ++;};if _gfgf > 0{_cdgf .Data [_dfdf ]=_accbe (_cdgf .Data [_dfdf ],^(_abbb .Data [_dae ])|_cdgf .Data [_dfdf ],_bceaf );
};};case PixNotSrcAndDst :for _fggg =0;_fggg < _ccffc ;_fggg ++{_dae =_ebbe +_fggg *_abbb .BytesPerLine ;_dfdf =_fgfa +_fggg *_cdgf .BytesPerLine ;for _eeef =0;_eeef < _bcbc ;_eeef ++{_cdgf .Data [_dfdf ]&=^(_abbb .Data [_dae ]);_dfdf ++;_dae ++;};if _gfgf > 0{_cdgf .Data [_dfdf ]=_accbe (_cdgf .Data [_dfdf ],^(_abbb .Data [_dae ])&_cdgf .Data [_dfdf ],_bceaf );
};};case PixSrcOrNotDst :for _fggg =0;_fggg < _ccffc ;_fggg ++{_dae =_ebbe +_fggg *_abbb .BytesPerLine ;_dfdf =_fgfa +_fggg *_cdgf .BytesPerLine ;for _eeef =0;_eeef < _bcbc ;_eeef ++{_cdgf .Data [_dfdf ]=_abbb .Data [_dae ]|^(_cdgf .Data [_dfdf ]);_dfdf ++;
_dae ++;};if _gfgf > 0{_cdgf .Data [_dfdf ]=_accbe (_cdgf .Data [_dfdf ],_abbb .Data [_dae ]|^(_cdgf .Data [_dfdf ]),_bceaf );};};case PixSrcAndNotDst :for _fggg =0;_fggg < _ccffc ;_fggg ++{_dae =_ebbe +_fggg *_abbb .BytesPerLine ;_dfdf =_fgfa +_fggg *_cdgf .BytesPerLine ;
for _eeef =0;_eeef < _bcbc ;_eeef ++{_cdgf .Data [_dfdf ]=_abbb .Data [_dae ]&^(_cdgf .Data [_dfdf ]);_dfdf ++;_dae ++;};if _gfgf > 0{_cdgf .Data [_dfdf ]=_accbe (_cdgf .Data [_dfdf ],_abbb .Data [_dae ]&^(_cdgf .Data [_dfdf ]),_bceaf );};};case PixNotPixSrcOrDst :for _fggg =0;
_fggg < _ccffc ;_fggg ++{_dae =_ebbe +_fggg *_abbb .BytesPerLine ;_dfdf =_fgfa +_fggg *_cdgf .BytesPerLine ;for _eeef =0;_eeef < _bcbc ;_eeef ++{_cdgf .Data [_dfdf ]=^(_abbb .Data [_dae ]|_cdgf .Data [_dfdf ]);_dfdf ++;_dae ++;};if _gfgf > 0{_cdgf .Data [_dfdf ]=_accbe (_cdgf .Data [_dfdf ],^(_abbb .Data [_dae ]|_cdgf .Data [_dfdf ]),_bceaf );
};};case PixNotPixSrcAndDst :for _fggg =0;_fggg < _ccffc ;_fggg ++{_dae =_ebbe +_fggg *_abbb .BytesPerLine ;_dfdf =_fgfa +_fggg *_cdgf .BytesPerLine ;for _eeef =0;_eeef < _bcbc ;_eeef ++{_cdgf .Data [_dfdf ]=^(_abbb .Data [_dae ]&_cdgf .Data [_dfdf ]);
_dfdf ++;_dae ++;};if _gfgf > 0{_cdgf .Data [_dfdf ]=_accbe (_cdgf .Data [_dfdf ],^(_abbb .Data [_dae ]&_cdgf .Data [_dfdf ]),_bceaf );};};case PixNotPixSrcXorDst :for _fggg =0;_fggg < _ccffc ;_fggg ++{_dae =_ebbe +_fggg *_abbb .BytesPerLine ;_dfdf =_fgfa +_fggg *_cdgf .BytesPerLine ;
for _eeef =0;_eeef < _bcbc ;_eeef ++{_cdgf .Data [_dfdf ]=^(_abbb .Data [_dae ]^_cdgf .Data [_dfdf ]);_dfdf ++;_dae ++;};if _gfgf > 0{_cdgf .Data [_dfdf ]=_accbe (_cdgf .Data [_dfdf ],^(_abbb .Data [_dae ]^_cdgf .Data [_dfdf ]),_bceaf );};};default:_gbb .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",_bcaac );
return _f .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 (_cce *NRGBA32 )NRGBAAt (x ,y int )_gbg .NRGBA {_gada ,_ :=ColorAtNRGBA32 (x ,y ,_cce .Width ,_cce .Data ,_cce .Alpha ,_cce .Decode );
return _gada ;};func ScaleAlphaToMonochrome (data []byte ,width ,height int )([]byte ,error ){_ad :=BytesPerLine (width ,8,1);if len (data )< _ad *height {return nil ,nil ;};_df :=&Gray8 {NewImageBase (width ,height ,8,1,data ,nil ,nil )};_cf ,_fe :=MonochromeConverter .Convert (_df );
if _fe !=nil {return nil ,_fe ;};return _cf .Base ().Data ,nil ;};func (_dbcc *Monochrome )getBitAt (_egdgb ,_fadf int )bool {_fgaa :=_fadf *_dbcc .BytesPerLine +(_egdgb >>3);_bgab :=_egdgb &0x07;_degb :=uint (7-_bgab );if _fgaa > len (_dbcc .Data )-1{return false ;
};if (_dbcc .Data [_fgaa ]>>_degb )&0x01>=1{return true ;};return false ;};func (_abfc *Monochrome )Scale (scale float64 )(*Monochrome ,error ){var _agfg bool ;_gdfc :=scale ;if scale < 1{_gdfc =1/scale ;_agfg =true ;};_fdf :=NextPowerOf2 (uint (_gdfc ));
if InDelta (float64 (_fdf ),_gdfc ,0.001){if _agfg {return _abfc .ReduceBinary (_gdfc );};return _abfc .ExpandBinary (int (_fdf ));};_dagc :=int (_gb .RoundToEven (float64 (_abfc .Width )*scale ));_deacb :=int (_gb .RoundToEven (float64 (_abfc .Height )*scale ));
return _abfc .ScaleLow (_dagc ,_deacb );};var (_gdac =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_ggeg =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func _befg (_ebcf _e .Image )(Image ,error ){if _bafe ,_fgaaa :=_ebcf .(*NRGBA32 );
_fgaaa {return _bafe .Copy (),nil ;};_cbfd ,_aeec ,_feea :=_aceg (_ebcf ,1);_deef ,_bagd :=NewImage (_cbfd .Max .X ,_cbfd .Max .Y ,8,3,nil ,_feea ,nil );if _bagd !=nil {return nil ,_bagd ;};_eeag (_ebcf ,_deef ,_cbfd );if len (_feea )!=0&&!_aeec {if _cfcfc :=_dbege (_feea ,_deef );
_cfcfc !=nil {return nil ,_cfcfc ;};};return _deef ,nil ;};func IsPowerOf2 (n uint )bool {return n > 0&&(n &(n -1))==0};func (_fdbf *Monochrome )setIndexedBit (_fdcd int ){_fdbf .Data [(_fdcd >>3)]|=0x80>>uint (_fdcd &7)};func _dedc (_cdee _e .Image )(Image ,error ){if _cacd ,_edfd :=_cdee .(*Gray2 );
_edfd {return _cacd .Copy (),nil ;};_baabbf :=_cdee .Bounds ();_dcf ,_bfff :=NewImage (_baabbf .Max .X ,_baabbf .Max .Y ,2,1,nil ,nil ,nil );if _bfff !=nil {return nil ,_bfff ;};_cdba (_cdee ,_dcf ,_baabbf );return _dcf ,nil ;};func _aacc (_dgee *_e .NYCbCrA ,_efcf NRGBA ,_gdbc _e .Rectangle ){for _bfab :=0;
_bfab < _gdbc .Max .X ;_bfab ++{for _afdcf :=0;_afdcf < _gdbc .Max .Y ;_afdcf ++{_affe :=_dgee .NYCbCrAAt (_bfab ,_afdcf );_efcf .SetNRGBA (_bfab ,_afdcf ,_dace (_affe ));};};};func ConverterFunc (converterFunc func (_dfg _e .Image )(Image ,error ))ColorConverter {return colorConverter {_ggc :converterFunc };
};func AddDataPadding (width ,height ,bitsPerComponent ,colorComponents int ,data []byte )([]byte ,error ){_eac :=BytesPerLine (width ,bitsPerComponent ,colorComponents );if _eac ==width *colorComponents *bitsPerComponent /8{return data ,nil ;};_bcfa :=width *colorComponents *bitsPerComponent ;
_dbb :=_eac *8;_ebdd :=8-(_dbb -_bcfa );_fbad :=_d .NewReader (data );_aaec :=_eac -1;_facc :=make ([]byte ,_aaec );_afafe :=make ([]byte ,height *_eac );_gac :=_d .NewWriterMSB (_afafe );var _fdgf uint64 ;var _bdeg error ;for _dcef :=0;_dcef < height ;
_dcef ++{_ ,_bdeg =_fbad .Read (_facc );if _bdeg !=nil {return nil ,_bdeg ;};_ ,_bdeg =_gac .Write (_facc );if _bdeg !=nil {return nil ,_bdeg ;};_fdgf ,_bdeg =_fbad .ReadBits (byte (_ebdd ));if _bdeg !=nil {return nil ,_bdeg ;};_ ,_bdeg =_gac .WriteBits (_fdgf ,_ebdd );
if _bdeg !=nil {return nil ,_bdeg ;};_gac .FinishByte ();};return _afafe ,nil ;};func _cdgcc (_faef *_e .Gray ,_bdbb uint8 )*_e .Gray {_bdfba :=_faef .Bounds ();_cdgcf :=_e .NewGray (_bdfba );for _eeab :=0;_eeab < _bdfba .Dx ();_eeab ++{for _bece :=0;_bece < _bdfba .Dy ();
_bece ++{_egeb :=_faef .GrayAt (_eeab ,_bece );_cdgcf .SetGray (_eeab ,_bece ,_gbg .Gray {Y :_abdcc (_egeb .Y ,_bdbb )});};};return _cdgcf ;};func (_bbcb *CMYK32 )At (x ,y int )_gbg .Color {_dceb ,_ :=_bbcb .ColorAt (x ,y );return _dceb };func _cdb (_cae NRGBA ,_fbb CMYK ,_cdc _e .Rectangle ){for _efaa :=0;
_efaa < _cdc .Max .X ;_efaa ++{for _cbaa :=0;_cbaa < _cdc .Max .Y ;_cbaa ++{_bce :=_cae .NRGBAAt (_efaa ,_cbaa );_fbb .SetCMYK (_efaa ,_cbaa ,_dfe (_bce ));};};};var _ Gray =&Gray16 {};func _bbgf (_gdcd NRGBA ,_cbcc RGBA ,_bedg _e .Rectangle ){for _daag :=0;
_daag < _bedg .Max .X ;_daag ++{for _ebed :=0;_ebed < _bedg .Max .Y ;_ebed ++{_defc :=_gdcd .NRGBAAt (_daag ,_ebed );_cbcc .SetRGBA (_daag ,_ebed ,_deg (_defc ));};};};func _dagf (_dda ,_fcc int )*Monochrome {return &Monochrome {ImageBase :NewImageBase (_dda ,_fcc ,1,1,nil ,nil ,nil ),ModelThreshold :0x0f};
};func _bgbg (_bffc uint8 )bool {if _bffc ==0||_bffc ==255{return true ;};return false ;};func ColorAtGray4BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_gbg .Gray ,error ){_gfab :=y *bytesPerLine +x >>1;if _gfab >=len (data ){return _gbg .Gray {},_ab .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 );
};_dbcg :=data [_gfab ]>>uint (4-(x &1)*4)&0xf;if len (decode )==2{_dbcg =uint8 (uint32 (LinearInterpolate (float64 (_dbcg ),0,15,decode [0],decode [1]))&0xf);};return _gbg .Gray {Y :_dbcg *17&0xff},nil ;};func _bgde (_fbgc _e .Image )(Image ,error ){if _cbgg ,_cgee :=_fbgc .(*NRGBA64 );
_cgee {return _cbgg .Copy (),nil ;};_afcag ,_gffg ,_cdag :=_aceg (_fbgc ,2);_fgbe ,_egb :=NewImage (_afcag .Max .X ,_afcag .Max .Y ,16,3,nil ,_cdag ,nil );if _egb !=nil {return nil ,_egb ;};_bdge (_fbgc ,_fgbe ,_afcag );if len (_cdag )!=0&&!_gffg {if _dedcc :=_dbege (_cdag ,_fgbe );
_dedcc !=nil {return nil ,_dedcc ;};};return _fgbe ,nil ;};var _ Image =&Monochrome {};func _dcba (_ebd CMYK ,_ecbd Gray ,_ceab _e .Rectangle ){for _ccfe :=0;_ccfe < _ceab .Max .X ;_ccfe ++{for _cfgg :=0;_cfgg < _ceab .Max .Y ;_cfgg ++{_bdfb :=_dcdd (_ebd .CMYKAt (_ccfe ,_cfgg ));
_ecbd .SetGray (_ccfe ,_cfgg ,_bdfb );};};};type Monochrome struct{ImageBase ;ModelThreshold uint8 ;};func _bfga (_gbbg _gbg .RGBA )_gbg .Gray {_aada :=(19595*uint32 (_gbbg .R )+38470*uint32 (_gbbg .G )+7471*uint32 (_gbbg .B )+1<<7)>>16;return _gbg .Gray {Y :uint8 (_aada )};
};func (_bdfa *Monochrome )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Monochrome ,sx ,sy int )error {return _cbda (_bdfa ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};type Gray4 struct{ImageBase };type Gray2 struct{ImageBase };func (_gefa *RGBA32 )ColorModel ()_gbg .Model {return _gbg .NRGBAModel };
func _dac (_afc _gbg .Gray )_gbg .RGBA {return _gbg .RGBA {R :_afc .Y ,G :_afc .Y ,B :_afc .Y ,A :0xff}};var _ _e .Image =&Gray16 {};var _ Gray =&Gray8 {};func _feac (_gfbdg Gray ,_dedg NRGBA ,_ade _e .Rectangle ){for _geaf :=0;_geaf < _ade .Max .X ;_geaf ++{for _efd :=0;
_efd < _ade .Max .Y ;_efd ++{_fcf :=_bfe (_dedg .NRGBAAt (_geaf ,_efd ));_gfbdg .SetGray (_geaf ,_efd ,_fcf );};};};func ColorAtGray1BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_gbg .Gray ,error ){_egab :=y *bytesPerLine +x >>3;if _egab >=len (data ){return _gbg .Gray {},_ab .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 );
};_ebcg :=data [_egab ]>>uint (7-(x &7))&1;if len (decode )==2{_ebcg =uint8 (LinearInterpolate (float64 (_ebcg ),0.0,1.0,decode [0],decode [1]))&1;};return _gbg .Gray {Y :_ebcg *255},nil ;};func (_degc *ImageBase )HasAlpha ()bool {if _degc .Alpha ==nil {return false ;
};for _bddd :=range _degc .Alpha {if _degc .Alpha [_bddd ]!=0xff{return true ;};};return false ;};func _fgbf (_bffac *_e .Gray )bool {for _bbed :=0;_bbed < len (_bffac .Pix );_bbed ++{if !_bgbg (_bffac .Pix [_bbed ]){return false ;};};return true ;};func ColorAtNRGBA16 (x ,y ,width ,bytesPerLine int ,data ,alpha []byte ,decode []float64 )(_gbg .NRGBA ,error ){_accc :=y *bytesPerLine +x *3/2;
if _accc +1>=len (data ){return _gbg .NRGBA {},_eege (x ,y );};const (_cgdbg =0xf;_bfeef =uint8 (0xff););_afea :=_bfeef ;if alpha !=nil {_geee :=y *BytesPerLine (width ,4,1);if _geee < len (alpha ){if x %2==0{_afea =(alpha [_geee ]>>uint (4))&_cgdbg ;}else {_afea =alpha [_geee ]&_cgdbg ;
};_afea |=_afea <<4;};};var _gdff ,_dacc ,_bcgf uint8 ;if x *3%2==0{_gdff =(data [_accc ]>>uint (4))&_cgdbg ;_dacc =data [_accc ]&_cgdbg ;_bcgf =(data [_accc +1]>>uint (4))&_cgdbg ;}else {_gdff =data [_accc ]&_cgdbg ;_dacc =(data [_accc +1]>>uint (4))&_cgdbg ;
_bcgf =data [_accc +1]&_cgdbg ;};if len (decode )==6{_gdff =uint8 (uint32 (LinearInterpolate (float64 (_gdff ),0,15,decode [0],decode [1]))&0xf);_dacc =uint8 (uint32 (LinearInterpolate (float64 (_dacc ),0,15,decode [2],decode [3]))&0xf);_bcgf =uint8 (uint32 (LinearInterpolate (float64 (_bcgf ),0,15,decode [4],decode [5]))&0xf);
};return _gbg .NRGBA {R :(_gdff <<4)|(_gdff &0xf),G :(_dacc <<4)|(_dacc &0xf),B :(_bcgf <<4)|(_bcgf &0xf),A :_afea },nil ;};func (_eecad *ImageBase )setEightFullBytes (_cdec int ,_bdg uint64 )error {if _cdec +7> len (_eecad .Data )-1{return _f .New ("\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_eecad .Data [_cdec ]=byte ((_bdg &0xff00000000000000)>>56);_eecad .Data [_cdec +1]=byte ((_bdg &0xff000000000000)>>48);_eecad .Data [_cdec +2]=byte ((_bdg &0xff0000000000)>>40);_eecad .Data [_cdec +3]=byte ((_bdg &0xff00000000)>>32);_eecad .Data [_cdec +4]=byte ((_bdg &0xff000000)>>24);
_eecad .Data [_cdec +5]=byte ((_bdg &0xff0000)>>16);_eecad .Data [_cdec +6]=byte ((_bdg &0xff00)>>8);_eecad .Data [_cdec +7]=byte (_bdg &0xff);return nil ;};func (_fde *CMYK32 )Validate ()error {if len (_fde .Data )!=4*_fde .Width *_fde .Height {return _f .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 (_dcge *RGBA32 )At (x ,y int )_gbg .Color {_fdff ,_ :=_dcge .ColorAt (x ,y );return _fdff };func (_agecd *NRGBA32 )Set (x ,y int ,c _gbg .Color ){_aedba :=y *_agecd .Width +x ;_eacb :=3*_aedba ;if _eacb +2>=len (_agecd .Data ){return ;
};_gbggac :=_gbg .NRGBAModel .Convert (c ).(_gbg .NRGBA );_agecd .setRGBA (_aedba ,_gbggac );};var _ Gray =&Gray2 {};func (_egdg *CMYK32 )Copy ()Image {return &CMYK32 {ImageBase :_egdg .copy ()}};func _cgge (_bffgd _gbg .Color )_gbg .Color {_gbbfa :=_gbg .NRGBAModel .Convert (_bffgd ).(_gbg .NRGBA );
return _bbcbea (_gbbfa );};func (_fed *Monochrome )ColorAt (x ,y int )(_gbg .Color ,error ){return ColorAtGray1BPC (x ,y ,_fed .BytesPerLine ,_fed .Data ,_fed .Decode );};var _ RGBA =&RGBA32 {};func (_fagb *ImageBase )getByte (_fecb int )(byte ,error ){if _fecb > len (_fagb .Data )-1||_fecb < 0{return 0,_ab .Errorf ("\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",_fecb );
};return _fagb .Data [_fecb ],nil ;};func (_dcfdd *Gray16 )GrayAt (x ,y int )_gbg .Gray {_bdec ,_ :=_dcfdd .ColorAt (x ,y );return _gbg .Gray {Y :uint8 (_bdec .(_gbg .Gray16 ).Y >>8)};};func (_badf *Monochrome )Copy ()Image {return &Monochrome {ImageBase :_badf .ImageBase .copy (),ModelThreshold :_badf .ModelThreshold };
};func (_gffd *Monochrome )Validate ()error {if len (_gffd .Data )!=_gffd .Height *_gffd .BytesPerLine {return ErrInvalidImage ;};return nil ;};var _ _e .Image =&Gray4 {};func ColorAtNRGBA32 (x ,y ,width int ,data ,alpha []byte ,decode []float64 )(_gbg .NRGBA ,error ){_fcff :=y *width +x ;
_gbae :=3*_fcff ;if _gbae +2>=len (data ){return _gbg .NRGBA {},_ab .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 );
};_cedd :=uint8 (0xff);if alpha !=nil &&len (alpha )> _fcff {_cedd =alpha [_fcff ];};_fbdg ,_eebf ,_gade :=data [_gbae ],data [_gbae +1],data [_gbae +2];if len (decode )==6{_fbdg =uint8 (uint32 (LinearInterpolate (float64 (_fbdg ),0,255,decode [0],decode [1]))&0xff);
_eebf =uint8 (uint32 (LinearInterpolate (float64 (_eebf ),0,255,decode [2],decode [3]))&0xff);_gade =uint8 (uint32 (LinearInterpolate (float64 (_gade ),0,255,decode [4],decode [5]))&0xff);};return _gbg .NRGBA {R :_fbdg ,G :_eebf ,B :_gade ,A :_cedd },nil ;
};func (_aab *Gray4 )Validate ()error {if len (_aab .Data )!=_aab .Height *_aab .BytesPerLine {return ErrInvalidImage ;};return nil ;};func (_gda *Gray8 )SetGray (x ,y int ,g _gbg .Gray ){_bege :=y *_gda .BytesPerLine +x ;if _bege > len (_gda .Data )-1{return ;
};_gda .Data [_bege ]=g .Y ;};func (_bafd *ImageBase )MakeAlpha (){_bafd .newAlpha ()};func _abg (_ggad _gbg .RGBA )_gbg .CMYK {_bbee ,_abea ,_cge ,_ageb :=_gbg .RGBToCMYK (_ggad .R ,_ggad .G ,_ggad .B );return _gbg .CMYK {C :_bbee ,M :_abea ,Y :_cge ,K :_ageb };
};func (_bbgg *Monochrome )InverseData ()error {return _bbgg .RasterOperation (0,0,_bbgg .Width ,_bbgg .Height ,PixNotDst ,nil ,0,0);};func _ddbg (_eadbg _gbg .Gray ,_gbea monochromeModel )_gbg .Gray {if _eadbg .Y > uint8 (_gbea ){return _gbg .Gray {Y :_gb .MaxUint8 };
};return _gbg .Gray {};};func (_gcab *ImageBase )setFourBytes (_baacd int ,_aadbc uint32 )error {if _baacd +3> len (_gcab .Data )-1{return _ab .Errorf ("\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_baacd );
};_gcab .Data [_baacd ]=byte ((_aadbc &0xff000000)>>24);_gcab .Data [_baacd +1]=byte ((_aadbc &0xff0000)>>16);_gcab .Data [_baacd +2]=byte ((_aadbc &0xff00)>>8);_gcab .Data [_baacd +3]=byte (_aadbc &0xff);return nil ;};func _fgcf (_faaa nrgba64 ,_gdcc RGBA ,_efag _e .Rectangle ){for _agae :=0;
_agae < _efag .Max .X ;_agae ++{for _ebgf :=0;_ebgf < _efag .Max .Y ;_ebgf ++{_agdf :=_faaa .NRGBA64At (_agae ,_ebgf );_gdcc .SetRGBA (_agae ,_ebgf ,_afge (_agdf ));};};};func LinearInterpolate (x ,xmin ,xmax ,ymin ,ymax float64 )float64 {if _gb .Abs (xmax -xmin )< 0.000001{return ymin ;
};_fbab :=ymin +(x -xmin )*(ymax -ymin )/(xmax -xmin );return _fbab ;};type monochromeThresholdConverter struct{Threshold uint8 ;};var _ _e .Image =&NRGBA64 {};var _ Image =&NRGBA32 {};func (_dfgg *Monochrome )AddPadding ()(_cgg error ){if _gfgd :=((_dfgg .Width *_dfgg .Height )+7)>>3;
len (_dfgg .Data )< _gfgd {return _ab .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 (_dfgg .Data ),_gfgd );
};_gfgda :=_dfgg .Width %8;if _gfgda ==0{return nil ;};_befc :=_dfgg .Width /8;_eaec :=_d .NewReader (_dfgg .Data );_cfdg :=make ([]byte ,_dfgg .Height *_dfgg .BytesPerLine );_cggd :=_d .NewWriterMSB (_cfdg );_bfag :=make ([]byte ,_befc );var (_cfcg int ;
_eadbd uint64 ;);for _cfcg =0;_cfcg < _dfgg .Height ;_cfcg ++{if _ ,_cgg =_eaec .Read (_bfag );_cgg !=nil {return _cgg ;};if _ ,_cgg =_cggd .Write (_bfag );_cgg !=nil {return _cgg ;};if _eadbd ,_cgg =_eaec .ReadBits (byte (_gfgda ));_cgg !=nil {return _cgg ;
};if _cgg =_cggd .WriteByte (byte (_eadbd )<<uint (8-_gfgda ));_cgg !=nil {return _cgg ;};};_dfgg .Data =_cggd .Data ();return nil ;};func (_eddc *Monochrome )ExpandBinary (factor int )(*Monochrome ,error ){if !IsPowerOf2 (uint (factor )){return nil ,_ab .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 _fea (_eddc ,factor );};func _adab (_egccd ,_bdba RGBA ,_bafg _e .Rectangle ){for _gage :=0;_gage < _bafg .Max .X ;_gage ++{for _cedff :=0;_cedff < _bafg .Max .Y ;_cedff ++{_bdba .SetRGBA (_gage ,_cedff ,_egccd .RGBAAt (_gage ,_cedff ));};};};
func RasterOperation (dest *Monochrome ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Monochrome ,sx ,sy int )error {return _cbda (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _fad (_gfc _gbg .RGBA )_gbg .NRGBA {switch _gfc .A {case 0xff:return _gbg .NRGBA {R :_gfc .R ,G :_gfc .G ,B :_gfc .B ,A :0xff};
case 0x00:return _gbg .NRGBA {};default:_ggfa ,_dfb ,_ggec ,_fdag :=_gfc .RGBA ();_ggfa =(_ggfa *0xffff)/_fdag ;_dfb =(_dfb *0xffff)/_fdag ;_ggec =(_ggec *0xffff)/_fdag ;return _gbg .NRGBA {R :uint8 (_ggfa >>8),G :uint8 (_dfb >>8),B :uint8 (_ggec >>8),A :uint8 (_fdag >>8)};
};};func _ggca (_gdfdg CMYK ,_cdfb RGBA ,_ceabb _e .Rectangle ){for _gaga :=0;_gaga < _ceabb .Max .X ;_gaga ++{for _fffb :=0;_fffb < _ceabb .Max .Y ;_fffb ++{_bbce :=_gdfdg .CMYKAt (_gaga ,_fffb );_cdfb .SetRGBA (_gaga ,_fffb ,_dadg (_bbce ));};};};func (_effd *Monochrome )Bounds ()_e .Rectangle {return _e .Rectangle {Max :_e .Point {X :_effd .Width ,Y :_effd .Height }};
};func (_cbdg *Gray2 )ColorAt (x ,y int )(_gbg .Color ,error ){return ColorAtGray2BPC (x ,y ,_cbdg .BytesPerLine ,_cbdg .Data ,_cbdg .Decode );};func (_befce *ImageBase )newAlpha (){_cbddb :=BytesPerLine (_befce .Width ,_befce .BitsPerComponent ,1);_befce .Alpha =make ([]byte ,_befce .Height *_cbddb );
};func (_becc *NRGBA16 )setNRGBA (_bbaa ,_eccg ,_acgf int ,_gbed _gbg .NRGBA ){if _bbaa *3%2==0{_becc .Data [_acgf ]=(_gbed .R >>4)<<4|(_gbed .G >>4);_becc .Data [_acgf +1]=(_gbed .B >>4)<<4|(_becc .Data [_acgf +1]&0xf);}else {_becc .Data [_acgf ]=(_becc .Data [_acgf ]&0xf0)|(_gbed .R >>4);
_becc .Data [_acgf +1]=(_gbed .G >>4)<<4|(_gbed .B >>4);};if _becc .Alpha !=nil {_cdgfg :=_eccg *BytesPerLine (_becc .Width ,4,1);if _cdgfg < len (_becc .Alpha ){if _bbaa %2==0{_becc .Alpha [_cdgfg ]=(_gbed .A >>uint (4))<<uint (4)|(_becc .Alpha [_acgf ]&0xf);
}else {_becc .Alpha [_cdgfg ]=(_becc .Alpha [_cdgfg ]&0xf0)|(_gbed .A >>uint (4));};};};};func (_bbcbe *Monochrome )getBit (_baac ,_defd int )uint8 {return _bbcbe .Data [_baac +(_defd >>3)]>>uint (7-(_defd &7))&1;};func _bgf (_bga ,_bgb *Monochrome ,_eaf []byte ,_egf int )(_fcgg error ){var (_bfa ,_egd ,_gaa ,_adgc ,_fac ,_eaff ,_bbc ,_ggdd int ;
_cfeg ,_eae uint32 ;_def ,_ebc byte ;_age uint16 ;);_ed :=make ([]byte ,4);_cde :=make ([]byte ,4);for _gaa =0;_gaa < _bga .Height -1;_gaa ,_adgc =_gaa +2,_adgc +1{_bfa =_gaa *_bga .BytesPerLine ;_egd =_adgc *_bgb .BytesPerLine ;for _fac ,_eaff =0,0;_fac < _egf ;
_fac ,_eaff =_fac +4,_eaff +1{for _bbc =0;_bbc < 4;_bbc ++{_ggdd =_bfa +_fac +_bbc ;if _ggdd <=len (_bga .Data )-1&&_ggdd < _bfa +_bga .BytesPerLine {_ed [_bbc ]=_bga .Data [_ggdd ];}else {_ed [_bbc ]=0x00;};_ggdd =_bfa +_bga .BytesPerLine +_fac +_bbc ;
if _ggdd <=len (_bga .Data )-1&&_ggdd < _bfa +(2*_bga .BytesPerLine ){_cde [_bbc ]=_bga .Data [_ggdd ];}else {_cde [_bbc ]=0x00;};};_cfeg =_a .BigEndian .Uint32 (_ed );_eae =_a .BigEndian .Uint32 (_cde );_eae |=_cfeg ;_eae |=_eae <<1;_eae &=0xaaaaaaaa;
_cfeg =_eae |(_eae <<7);_def =byte (_cfeg >>24);_ebc =byte ((_cfeg >>8)&0xff);_ggdd =_egd +_eaff ;if _ggdd +1==len (_bgb .Data )-1||_ggdd +1>=_egd +_bgb .BytesPerLine {_bgb .Data [_ggdd ]=_eaf [_def ];}else {_age =(uint16 (_eaf [_def ])<<8)|uint16 (_eaf [_ebc ]);
if _fcgg =_bgb .setTwoBytes (_ggdd ,_age );_fcgg !=nil {return _ab .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",_ggdd );
};_eaff ++;};};};return nil ;};func ImgToBinary (i _e .Image ,threshold uint8 )*_e .Gray {switch _defe :=i .(type ){case *_e .Gray :if _fgbf (_defe ){return _defe ;};return _cdgcc (_defe ,threshold );case *_e .Gray16 :return _bceag (_defe ,threshold );
default:return _bebf (_defe ,threshold );};};func (_gfaa *ImageBase )copy ()ImageBase {_gabcc :=*_gfaa ;_gabcc .Data =make ([]byte ,len (_gfaa .Data ));copy (_gabcc .Data ,_gfaa .Data );return _gabcc ;};