unipdf/internal/imageutil/imageutil.go
2021-03-23 23:12:52 +00:00

378 lines
109 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";_c "errors";_gc "fmt";_dg "github.com/unidoc/unipdf/v3/common";_d "github.com/unidoc/unipdf/v3/internal/bitwise";_fd "image";_cc "image/color";_e "image/draw";_g "math";);func (_abff *Monochrome )ColorModel ()_cc .Model {return MonochromeModel (_abff .ModelThreshold )};
func (_cefa *NRGBA32 )Validate ()error {if len (_cefa .Data )!=3*_cefa .Width *_cefa .Height {return _c .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 (_ggb *Monochrome )Scale (scale float64 )(*Monochrome ,error ){var _bbbc bool ;_dbaa :=scale ;if scale < 1{_dbaa =1/scale ;_bbbc =true ;};_fbdd :=NextPowerOf2 (uint (_dbaa ));if InDelta (float64 (_fbdd ),_dbaa ,0.001){if _bbbc {return _ggb .ReduceBinary (_dbaa );
};return _ggb .ExpandBinary (int (_fbdd ));};_gcgaf :=int (_g .RoundToEven (float64 (_ggb .Width )*scale ));_cgad :=int (_g .RoundToEven (float64 (_ggb .Height )*scale ));return _ggb .ScaleLow (_gcgaf ,_cgad );};func (_fdea *NRGBA16 )Validate ()error {if len (_fdea .Data )!=3*_fdea .Width *_fdea .Height /2{return _c .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 (_bdb *NRGBA16 )Copy ()Image {return &NRGBA16 {ImageBase :_bdb .copy ()}};func _gggc (_cbdc _fd .Image )(Image ,error ){if _acde ,_agdfd :=_cbdc .(*Gray2 );_agdfd {return _acde .Copy (),nil ;};_dgge :=_cbdc .Bounds ();_eagc ,_ggee :=NewImage (_dgge .Max .X ,_dgge .Max .Y ,2,1,nil ,nil ,nil );
if _ggee !=nil {return nil ,_ggee ;};_accd (_cbdc ,_eagc ,_dgge );return _eagc ,nil ;};var _ _fd .Image =&NRGBA64 {};func (_cacd *ImageBase )setEightFullBytes (_fbbg int ,_dedd uint64 )error {if _fbbg +7> len (_cacd .Data )-1{return _c .New ("\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_cacd .Data [_fbbg ]=byte ((_dedd &0xff00000000000000)>>56);_cacd .Data [_fbbg +1]=byte ((_dedd &0xff000000000000)>>48);_cacd .Data [_fbbg +2]=byte ((_dedd &0xff0000000000)>>40);_cacd .Data [_fbbg +3]=byte ((_dedd &0xff00000000)>>32);_cacd .Data [_fbbg +4]=byte ((_dedd &0xff000000)>>24);
_cacd .Data [_fbbg +5]=byte ((_dedd &0xff0000)>>16);_cacd .Data [_fbbg +6]=byte ((_dedd &0xff00)>>8);_cacd .Data [_fbbg +7]=byte (_dedd &0xff);return nil ;};func (_abf *Monochrome )AddPadding ()(_cfc error ){if _fac :=((_abf .Width *_abf .Height )+7)>>3;
len (_abf .Data )< _fac {return _gc .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 (_abf .Data ),_fac );
};_ccdf :=_abf .Width %8;if _ccdf ==0{return nil ;};_dee :=_abf .Width /8;_bbca :=_d .NewReader (_abf .Data );_febg :=make ([]byte ,_abf .Height *_abf .BytesPerLine );_cfe :=_d .NewWriterMSB (_febg );_agbe :=make ([]byte ,_dee );var (_egda int ;_cagd uint64 ;
);for _egda =0;_egda < _abf .Height ;_egda ++{if _ ,_cfc =_bbca .Read (_agbe );_cfc !=nil {return _cfc ;};if _ ,_cfc =_cfe .Write (_agbe );_cfc !=nil {return _cfc ;};if _cagd ,_cfc =_bbca .ReadBits (byte (_ccdf ));_cfc !=nil {return _cfc ;};if _cfc =_cfe .WriteByte (byte (_cagd )<<uint (8-_ccdf ));
_cfc !=nil {return _cfc ;};};_abf .Data =_cfe .Data ();return nil ;};func (_dfg *Monochrome )At (x ,y int )_cc .Color {_bbeg ,_ :=_dfg .ColorAt (x ,y );return _bbeg };type ImageBase struct{Width ,Height int ;BitsPerComponent ,ColorComponents int ;Data ,Alpha []byte ;
Decode []float64 ;BytesPerLine int ;};var _ NRGBA =&NRGBA16 {};func (_adac *ImageBase )Pix ()[]byte {return _adac .Data };func MonochromeThresholdConverter (threshold uint8 )ColorConverter {return &monochromeThresholdConverter {Threshold :threshold };};
func ColorAtNRGBA16 (x ,y ,width ,bytesPerLine int ,data ,alpha []byte ,decode []float64 )(_cc .NRGBA ,error ){_dgec :=y *bytesPerLine +x *3/2;if _dgec +1>=len (data ){return _cc .NRGBA {},_fdba (x ,y );};const (_cccc =0xf;_ecaf =uint8 (0xff););_dgggb :=_ecaf ;
if alpha !=nil {_egea :=y *BytesPerLine (width ,4,1);if _egea < len (alpha ){if x %2==0{_dgggb =(alpha [_egea ]>>uint (4))&_cccc ;}else {_dgggb =alpha [_egea ]&_cccc ;};_dgggb |=_dgggb <<4;};};var _fbdgc ,_acca ,_gegb uint8 ;if x *3%2==0{_fbdgc =(data [_dgec ]>>uint (4))&_cccc ;
_acca =data [_dgec ]&_cccc ;_gegb =(data [_dgec +1]>>uint (4))&_cccc ;}else {_fbdgc =data [_dgec ]&_cccc ;_acca =(data [_dgec +1]>>uint (4))&_cccc ;_gegb =data [_dgec +1]&_cccc ;};if len (decode )==6{_fbdgc =uint8 (uint32 (LinearInterpolate (float64 (_fbdgc ),0,15,decode [0],decode [1]))&0xf);
_acca =uint8 (uint32 (LinearInterpolate (float64 (_acca ),0,15,decode [2],decode [3]))&0xf);_gegb =uint8 (uint32 (LinearInterpolate (float64 (_gegb ),0,15,decode [4],decode [5]))&0xf);};return _cc .NRGBA {R :(_fbdgc <<4)|(_fbdgc &0xf),G :(_acca <<4)|(_acca &0xf),B :(_gegb <<4)|(_gegb &0xf),A :_dgggb },nil ;
};func _fbda (_fbf _fd .Image )(Image ,error ){if _agdb ,_edg :=_fbf .(*Monochrome );_edg {return _agdb ,nil ;};_dfdaa :=_fbf .Bounds ();var _dddd Gray ;switch _beff :=_fbf .(type ){case Gray :_dddd =_beff ;case NRGBA :_dddd =&Gray8 {ImageBase :NewImageBase (_dfdaa .Max .X ,_dfdaa .Max .Y ,8,1,nil ,nil ,nil )};
_bfg (_dddd ,_beff ,_dfdaa );case nrgba64 :_dddd =&Gray8 {ImageBase :NewImageBase (_dfdaa .Max .X ,_dfdaa .Max .Y ,8,1,nil ,nil ,nil )};_bfga (_dddd ,_beff ,_dfdaa );default:_acg ,_gdb :=GrayConverter .Convert (_fbf );if _gdb !=nil {return nil ,_gdb ;};
_dddd =_acg .(Gray );};_baef ,_eafg :=NewImage (_dfdaa .Max .X ,_dfdaa .Max .Y ,1,1,nil ,nil ,nil );if _eafg !=nil {return nil ,_eafg ;};_gbf :=_baef .(*Monochrome );_age :=AutoThresholdTriangle (GrayHistogram (_dddd ));for _fgc :=0;_fgc < _dfdaa .Max .X ;
_fgc ++{for _ddda :=0;_ddda < _dfdaa .Max .Y ;_ddda ++{_dgaf :=_gbff (_dddd .GrayAt (_fgc ,_ddda ),monochromeModel (_age ));_gbf .SetGray (_fgc ,_ddda ,_dgaf );};};return _baef ,nil ;};func _bfg (_ecc Gray ,_afa NRGBA ,_edefb _fd .Rectangle ){for _bfe :=0;
_bfe < _edefb .Max .X ;_bfe ++{for _cgb :=0;_cgb < _edefb .Max .Y ;_cgb ++{_cgfg :=_afg (_afa .NRGBAAt (_bfe ,_cgb ));_ecc .SetGray (_bfe ,_cgb ,_cgfg );};};};func (_aed *Gray8 )SetGray (x ,y int ,g _cc .Gray ){_ebae :=y *_aed .BytesPerLine +x ;if _ebae > len (_aed .Data )-1{return ;
};_aed .Data [_ebae ]=g .Y ;};func _agdc (_agdf _cc .NRGBA )_cc .CMYK {_cgdf ,_ccgd ,_edbg ,_ :=_agdf .RGBA ();_dddec ,_feb ,_dba ,_efe :=_cc .RGBToCMYK (uint8 (_cgdf >>8),uint8 (_ccgd >>8),uint8 (_edbg >>8));return _cc .CMYK {C :_dddec ,M :_feb ,Y :_dba ,K :_efe };
};func (_aeae *Gray16 )Bounds ()_fd .Rectangle {return _fd .Rectangle {Max :_fd .Point {X :_aeae .Width ,Y :_aeae .Height }};};type CMYK32 struct{ImageBase };func (_gdgd monochromeModel )Convert (c _cc .Color )_cc .Color {_fage :=_cc .GrayModel .Convert (c ).(_cc .Gray );
return _gbff (_fage ,_gdgd );};func (_gadfc *NRGBA16 )setNRGBA (_bccfd ,_eeag ,_fffa int ,_gadd _cc .NRGBA ){if _bccfd *3%2==0{_gadfc .Data [_fffa ]=(_gadd .R >>4)<<4|(_gadd .G >>4);_gadfc .Data [_fffa +1]=(_gadd .B >>4)<<4|(_gadfc .Data [_fffa +1]&0xf);
}else {_gadfc .Data [_fffa ]=(_gadfc .Data [_fffa ]&0xf0)|(_gadd .R >>4);_gadfc .Data [_fffa +1]=(_gadd .G >>4)<<4|(_gadd .B >>4);};if _gadfc .Alpha !=nil {_fbcd :=_eeag *BytesPerLine (_gadfc .Width ,4,1);if _fbcd < len (_gadfc .Alpha ){if _bccfd %2==0{_gadfc .Alpha [_fbcd ]=(_gadd .A >>uint (4))<<uint (4)|(_gadfc .Alpha [_fffa ]&0xf);
}else {_gadfc .Alpha [_fbcd ]=(_gadfc .Alpha [_fbcd ]&0xf0)|(_gadd .A >>uint (4));};};};};func ColorAtCMYK (x ,y ,width int ,data []byte ,decode []float64 )(_cc .CMYK ,error ){_cef :=4*(y *width +x );if _cef +3>=len (data ){return _cc .CMYK {},_gc .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 [_cef ]&0xff;M :=data [_cef +1]&0xff;Y :=data [_cef +2]&0xff;K :=data [_cef +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 _cc .CMYK {C :C ,M :M ,Y :Y ,K :K },nil ;};type Monochrome struct{ImageBase ;
ModelThreshold uint8 ;};func _dddg (_aeg *Monochrome ,_bbe int ,_fec []byte )(_adf *Monochrome ,_fa error ){const _aca ="\u0072\u0065d\u0075\u0063\u0065R\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079";if _aeg ==nil {return nil ,_c .New ("\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _bbe < 1||_bbe > 4{return nil ,_c .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 _aeg .Height <=1{return nil ,_c .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");
};_adf =_ddde (_aeg .Width /2,_aeg .Height /2);if _fec ==nil {_fec =_caae ();};_eaf :=_baaf (_aeg .BytesPerLine ,2*_adf .BytesPerLine );switch _bbe {case 1:_fa =_eefd (_aeg ,_adf ,_fec ,_eaf );case 2:_fa =_egc (_aeg ,_adf ,_fec ,_eaf );case 3:_fa =_cfb (_aeg ,_adf ,_fec ,_eaf );
case 4:_fa =_dff (_aeg ,_adf ,_fec ,_eaf );};if _fa !=nil {return nil ,_fa ;};return _adf ,nil ;};func (_ceff *Monochrome )setIndexedBit (_ddea int ){_ceff .Data [(_ddea >>3)]|=0x80>>uint (_ddea &7)};func (_agbc *Gray4 )ColorAt (x ,y int )(_cc .Color ,error ){return ColorAtGray4BPC (x ,y ,_agbc .BytesPerLine ,_agbc .Data ,_agbc .Decode );
};func _caeeg (_cdca NRGBA ,_acbb Gray ,_aba _fd .Rectangle ){for _aeee :=0;_aeee < _aba .Max .X ;_aeee ++{for _adca :=0;_adca < _aba .Max .Y ;_adca ++{_feg :=_fea (_cdca .NRGBAAt (_aeee ,_adca ));_acbb .SetGray (_aeee ,_adca ,_feg );};};};var _ Gray =&Gray2 {};
func _adgf (_fbg _cc .Gray )_cc .Gray {_fbg .Y >>=4;_fbg .Y |=_fbg .Y <<4;return _fbg };func (_afcg *Monochrome )Histogram ()(_cce [256]int ){for _ ,_ebfd :=range _afcg .Data {_cce [0xff]+=int (_gdgf [_afcg .Data [_ebfd ]]);};return _cce ;};func (_beag *Gray2 )ColorAt (x ,y int )(_cc .Color ,error ){return ColorAtGray2BPC (x ,y ,_beag .BytesPerLine ,_beag .Data ,_beag .Decode );
};func _fea (_gcc _cc .NRGBA )_cc .Gray {_adb ,_fbb ,_daa ,_ :=_gcc .RGBA ();_gec :=(19595*_adb +38470*_fbb +7471*_daa +1<<15)>>24;return _cc .Gray {Y :uint8 (_gec )};};func (_bgfd *Gray16 )ColorModel ()_cc .Model {return _cc .Gray16Model };var _ Gray =&Gray16 {};
func (_acaf *Gray4 )setGray (_bec int ,_cgff int ,_dadg _cc .Gray ){_gebb :=_cgff *_acaf .BytesPerLine ;_cebe :=_gebb +(_bec >>1);if _cebe >=len (_acaf .Data ){return ;};_gcgd :=_dadg .Y >>4;_acaf .Data [_cebe ]=(_acaf .Data [_cebe ]&(^(0xf0>>uint (4*(_bec &1)))))|(_gcgd <<uint (4-4*(_bec &1)));
};type RasterOperator int ;func (_gdbd *Gray16 )Validate ()error {if len (_gdbd .Data )!=_gdbd .Height *_gdbd .BytesPerLine {return ErrInvalidImage ;};return nil ;};func AddDataPadding (width ,height ,bitsPerComponent ,colorComponents int ,data []byte )([]byte ,error ){_abcg :=BytesPerLine (width ,bitsPerComponent ,colorComponents );
if _abcg ==width *colorComponents *bitsPerComponent /8{return data ,nil ;};_egee :=width *colorComponents *bitsPerComponent ;_dabd :=_abcg *8;_dbede :=8-(_dabd -_egee );_cda :=_d .NewReader (data );_bfdbb :=_abcg -1;_gfcd :=make ([]byte ,_bfdbb );_aaefb :=make ([]byte ,height *_abcg );
_aeca :=_d .NewWriterMSB (_aaefb );var _facb uint64 ;var _fada error ;for _dag :=0;_dag < height ;_dag ++{_ ,_fada =_cda .Read (_gfcd );if _fada !=nil {return nil ,_fada ;};_ ,_fada =_aeca .Write (_gfcd );if _fada !=nil {return nil ,_fada ;};_facb ,_fada =_cda .ReadBits (byte (_dbede ));
if _fada !=nil {return nil ,_fada ;};_ ,_fada =_aeca .WriteBits (_facb ,_dbede );if _fada !=nil {return nil ,_fada ;};_aeca .FinishByte ();};return _aaefb ,nil ;};func _gfgf (_gead CMYK ,_fddc Gray ,_bcd _fd .Rectangle ){for _aaad :=0;_aaad < _bcd .Max .X ;
_aaad ++{for _bbd :=0;_bbd < _bcd .Max .Y ;_bbd ++{_egfa :=_ceb (_gead .CMYKAt (_aaad ,_bbd ));_fddc .SetGray (_aaad ,_bbd ,_egfa );};};};var ErrInvalidImage =_c .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006da\u0067\u0065\u0020\u0064\u0061\u0074\u0061 s\u0069\u007a\u0065\u0020f\u006f\u0072\u0020\u0070\u0072\u006f\u0076\u0069\u0064ed\u0020\u0064i\u006d\u0065\u006e\u0073\u0069\u006f\u006e\u0073");
func ColorAtGray1BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_cc .Gray ,error ){_dgaa :=y *bytesPerLine +x >>3;if _dgaa >=len (data ){return _cc .Gray {},_gc .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 );
};_gff :=data [_dgaa ]>>uint (7-(x &7))&1;if len (decode )==2{_gff =uint8 (LinearInterpolate (float64 (_gff ),0.0,1.0,decode [0],decode [1]))&1;};return _cc .Gray {Y :_gff *255},nil ;};func (_fcff *Monochrome )Base ()*ImageBase {return &_fcff .ImageBase };
func LinearInterpolate (x ,xmin ,xmax ,ymin ,ymax float64 )float64 {if _g .Abs (xmax -xmin )< 0.000001{return ymin ;};_dfb :=ymin +(x -xmin )*(ymax -ymin )/(xmax -xmin );return _dfb ;};func (_cace *NRGBA32 )SetNRGBA (x ,y int ,c _cc .NRGBA ){_eeeg :=y *_cace .Width +x ;
_cead :=3*_eeeg ;if _cead +2>=len (_cace .Data ){return ;};_cace .setRGBA (_eeeg ,c );};func (_cgcd *Gray4 )Histogram ()(_fbcc [256]int ){for _cee :=0;_cee < _cgcd .Width ;_cee ++{for _gfef :=0;_gfef < _cgcd .Height ;_gfef ++{_fbcc [_cgcd .GrayAt (_cee ,_gfef ).Y ]++;
};};return _fbcc ;};func _aeef (_ebe *Monochrome ,_dbac ,_dbee ,_cdfc ,_eac int ,_eaeb RasterOperator ,_bfgab *Monochrome ,_gdab ,_aecf int )error {var (_fdagg bool ;_gcce bool ;_eegb int ;_fef int ;_fbdg int ;_bad bool ;_bfca byte ;_cddbe int ;_cadaa int ;
_aagb int ;_bbfb ,_dade int ;);_gabb :=8-(_dbac &7);_gfed :=_gagde [_gabb ];_acec :=_ebe .BytesPerLine *_dbee +(_dbac >>3);_fccg :=_bfgab .BytesPerLine *_aecf +(_gdab >>3);if _cdfc < _gabb {_fdagg =true ;_gfed &=_acab [8-_gabb +_cdfc ];};if !_fdagg {_eegb =(_cdfc -_gabb )>>3;
if _eegb > 0{_gcce =true ;_fef =_acec +1;_fbdg =_fccg +1;};};_cddbe =(_dbac +_cdfc )&7;if !(_fdagg ||_cddbe ==0){_bad =true ;_bfca =_acab [_cddbe ];_cadaa =_acec +1+_eegb ;_aagb =_fccg +1+_eegb ;};switch _eaeb {case PixSrc :for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_acec ]=_egdb (_ebe .Data [_acec ],_bfgab .Data [_fccg ],_gfed );
_acec +=_ebe .BytesPerLine ;_fccg +=_bfgab .BytesPerLine ;};if _gcce {for _bbfb =0;_bbfb < _eac ;_bbfb ++{for _dade =0;_dade < _eegb ;_dade ++{_ebe .Data [_fef +_dade ]=_bfgab .Data [_fbdg +_dade ];};_fef +=_ebe .BytesPerLine ;_fbdg +=_bfgab .BytesPerLine ;
};};if _bad {for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_cadaa ]=_egdb (_ebe .Data [_cadaa ],_bfgab .Data [_aagb ],_bfca );_cadaa +=_ebe .BytesPerLine ;_aagb +=_bfgab .BytesPerLine ;};};case PixNotSrc :for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_acec ]=_egdb (_ebe .Data [_acec ],^_bfgab .Data [_fccg ],_gfed );
_acec +=_ebe .BytesPerLine ;_fccg +=_bfgab .BytesPerLine ;};if _gcce {for _bbfb =0;_bbfb < _eac ;_bbfb ++{for _dade =0;_dade < _eegb ;_dade ++{_ebe .Data [_fef +_dade ]=^_bfgab .Data [_fbdg +_dade ];};_fef +=_ebe .BytesPerLine ;_fbdg +=_bfgab .BytesPerLine ;
};};if _bad {for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_cadaa ]=_egdb (_ebe .Data [_cadaa ],^_bfgab .Data [_aagb ],_bfca );_cadaa +=_ebe .BytesPerLine ;_aagb +=_bfgab .BytesPerLine ;};};case PixSrcOrDst :for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_acec ]=_egdb (_ebe .Data [_acec ],_bfgab .Data [_fccg ]|_ebe .Data [_acec ],_gfed );
_acec +=_ebe .BytesPerLine ;_fccg +=_bfgab .BytesPerLine ;};if _gcce {for _bbfb =0;_bbfb < _eac ;_bbfb ++{for _dade =0;_dade < _eegb ;_dade ++{_ebe .Data [_fef +_dade ]|=_bfgab .Data [_fbdg +_dade ];};_fef +=_ebe .BytesPerLine ;_fbdg +=_bfgab .BytesPerLine ;
};};if _bad {for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_cadaa ]=_egdb (_ebe .Data [_cadaa ],_bfgab .Data [_aagb ]|_ebe .Data [_cadaa ],_bfca );_cadaa +=_ebe .BytesPerLine ;_aagb +=_bfgab .BytesPerLine ;};};case PixSrcAndDst :for _bbfb =0;_bbfb < _eac ;
_bbfb ++{_ebe .Data [_acec ]=_egdb (_ebe .Data [_acec ],_bfgab .Data [_fccg ]&_ebe .Data [_acec ],_gfed );_acec +=_ebe .BytesPerLine ;_fccg +=_bfgab .BytesPerLine ;};if _gcce {for _bbfb =0;_bbfb < _eac ;_bbfb ++{for _dade =0;_dade < _eegb ;_dade ++{_ebe .Data [_fef +_dade ]&=_bfgab .Data [_fbdg +_dade ];
};_fef +=_ebe .BytesPerLine ;_fbdg +=_bfgab .BytesPerLine ;};};if _bad {for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_cadaa ]=_egdb (_ebe .Data [_cadaa ],_bfgab .Data [_aagb ]&_ebe .Data [_cadaa ],_bfca );_cadaa +=_ebe .BytesPerLine ;_aagb +=_bfgab .BytesPerLine ;
};};case PixSrcXorDst :for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_acec ]=_egdb (_ebe .Data [_acec ],_bfgab .Data [_fccg ]^_ebe .Data [_acec ],_gfed );_acec +=_ebe .BytesPerLine ;_fccg +=_bfgab .BytesPerLine ;};if _gcce {for _bbfb =0;_bbfb < _eac ;
_bbfb ++{for _dade =0;_dade < _eegb ;_dade ++{_ebe .Data [_fef +_dade ]^=_bfgab .Data [_fbdg +_dade ];};_fef +=_ebe .BytesPerLine ;_fbdg +=_bfgab .BytesPerLine ;};};if _bad {for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_cadaa ]=_egdb (_ebe .Data [_cadaa ],_bfgab .Data [_aagb ]^_ebe .Data [_cadaa ],_bfca );
_cadaa +=_ebe .BytesPerLine ;_aagb +=_bfgab .BytesPerLine ;};};case PixNotSrcOrDst :for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_acec ]=_egdb (_ebe .Data [_acec ],^(_bfgab .Data [_fccg ])|_ebe .Data [_acec ],_gfed );_acec +=_ebe .BytesPerLine ;_fccg +=_bfgab .BytesPerLine ;
};if _gcce {for _bbfb =0;_bbfb < _eac ;_bbfb ++{for _dade =0;_dade < _eegb ;_dade ++{_ebe .Data [_fef +_dade ]|=^(_bfgab .Data [_fbdg +_dade ]);};_fef +=_ebe .BytesPerLine ;_fbdg +=_bfgab .BytesPerLine ;};};if _bad {for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_cadaa ]=_egdb (_ebe .Data [_cadaa ],^(_bfgab .Data [_aagb ])|_ebe .Data [_cadaa ],_bfca );
_cadaa +=_ebe .BytesPerLine ;_aagb +=_bfgab .BytesPerLine ;};};case PixNotSrcAndDst :for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_acec ]=_egdb (_ebe .Data [_acec ],^(_bfgab .Data [_fccg ])&_ebe .Data [_acec ],_gfed );_acec +=_ebe .BytesPerLine ;_fccg +=_bfgab .BytesPerLine ;
};if _gcce {for _bbfb =0;_bbfb < _eac ;_bbfb ++{for _dade =0;_dade < _eegb ;_dade ++{_ebe .Data [_fef +_dade ]&=^_bfgab .Data [_fbdg +_dade ];};_fef +=_ebe .BytesPerLine ;_fbdg +=_bfgab .BytesPerLine ;};};if _bad {for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_cadaa ]=_egdb (_ebe .Data [_cadaa ],^(_bfgab .Data [_aagb ])&_ebe .Data [_cadaa ],_bfca );
_cadaa +=_ebe .BytesPerLine ;_aagb +=_bfgab .BytesPerLine ;};};case PixSrcOrNotDst :for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_acec ]=_egdb (_ebe .Data [_acec ],_bfgab .Data [_fccg ]|^(_ebe .Data [_acec ]),_gfed );_acec +=_ebe .BytesPerLine ;_fccg +=_bfgab .BytesPerLine ;
};if _gcce {for _bbfb =0;_bbfb < _eac ;_bbfb ++{for _dade =0;_dade < _eegb ;_dade ++{_ebe .Data [_fef +_dade ]=_bfgab .Data [_fbdg +_dade ]|^(_ebe .Data [_fef +_dade ]);};_fef +=_ebe .BytesPerLine ;_fbdg +=_bfgab .BytesPerLine ;};};if _bad {for _bbfb =0;
_bbfb < _eac ;_bbfb ++{_ebe .Data [_cadaa ]=_egdb (_ebe .Data [_cadaa ],_bfgab .Data [_aagb ]|^(_ebe .Data [_cadaa ]),_bfca );_cadaa +=_ebe .BytesPerLine ;_aagb +=_bfgab .BytesPerLine ;};};case PixSrcAndNotDst :for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_acec ]=_egdb (_ebe .Data [_acec ],_bfgab .Data [_fccg ]&^(_ebe .Data [_acec ]),_gfed );
_acec +=_ebe .BytesPerLine ;_fccg +=_bfgab .BytesPerLine ;};if _gcce {for _bbfb =0;_bbfb < _eac ;_bbfb ++{for _dade =0;_dade < _eegb ;_dade ++{_ebe .Data [_fef +_dade ]=_bfgab .Data [_fbdg +_dade ]&^(_ebe .Data [_fef +_dade ]);};_fef +=_ebe .BytesPerLine ;
_fbdg +=_bfgab .BytesPerLine ;};};if _bad {for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_cadaa ]=_egdb (_ebe .Data [_cadaa ],_bfgab .Data [_aagb ]&^(_ebe .Data [_cadaa ]),_bfca );_cadaa +=_ebe .BytesPerLine ;_aagb +=_bfgab .BytesPerLine ;};};case PixNotPixSrcOrDst :for _bbfb =0;
_bbfb < _eac ;_bbfb ++{_ebe .Data [_acec ]=_egdb (_ebe .Data [_acec ],^(_bfgab .Data [_fccg ]|_ebe .Data [_acec ]),_gfed );_acec +=_ebe .BytesPerLine ;_fccg +=_bfgab .BytesPerLine ;};if _gcce {for _bbfb =0;_bbfb < _eac ;_bbfb ++{for _dade =0;_dade < _eegb ;
_dade ++{_ebe .Data [_fef +_dade ]=^(_bfgab .Data [_fbdg +_dade ]|_ebe .Data [_fef +_dade ]);};_fef +=_ebe .BytesPerLine ;_fbdg +=_bfgab .BytesPerLine ;};};if _bad {for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_cadaa ]=_egdb (_ebe .Data [_cadaa ],^(_bfgab .Data [_aagb ]|_ebe .Data [_cadaa ]),_bfca );
_cadaa +=_ebe .BytesPerLine ;_aagb +=_bfgab .BytesPerLine ;};};case PixNotPixSrcAndDst :for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_acec ]=_egdb (_ebe .Data [_acec ],^(_bfgab .Data [_fccg ]&_ebe .Data [_acec ]),_gfed );_acec +=_ebe .BytesPerLine ;
_fccg +=_bfgab .BytesPerLine ;};if _gcce {for _bbfb =0;_bbfb < _eac ;_bbfb ++{for _dade =0;_dade < _eegb ;_dade ++{_ebe .Data [_fef +_dade ]=^(_bfgab .Data [_fbdg +_dade ]&_ebe .Data [_fef +_dade ]);};_fef +=_ebe .BytesPerLine ;_fbdg +=_bfgab .BytesPerLine ;
};};if _bad {for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_cadaa ]=_egdb (_ebe .Data [_cadaa ],^(_bfgab .Data [_aagb ]&_ebe .Data [_cadaa ]),_bfca );_cadaa +=_ebe .BytesPerLine ;_aagb +=_bfgab .BytesPerLine ;};};case PixNotPixSrcXorDst :for _bbfb =0;
_bbfb < _eac ;_bbfb ++{_ebe .Data [_acec ]=_egdb (_ebe .Data [_acec ],^(_bfgab .Data [_fccg ]^_ebe .Data [_acec ]),_gfed );_acec +=_ebe .BytesPerLine ;_fccg +=_bfgab .BytesPerLine ;};if _gcce {for _bbfb =0;_bbfb < _eac ;_bbfb ++{for _dade =0;_dade < _eegb ;
_dade ++{_ebe .Data [_fef +_dade ]=^(_bfgab .Data [_fbdg +_dade ]^_ebe .Data [_fef +_dade ]);};_fef +=_ebe .BytesPerLine ;_fbdg +=_bfgab .BytesPerLine ;};};if _bad {for _bbfb =0;_bbfb < _eac ;_bbfb ++{_ebe .Data [_cadaa ]=_egdb (_ebe .Data [_cadaa ],^(_bfgab .Data [_aagb ]^_ebe .Data [_cadaa ]),_bfca );
_cadaa +=_ebe .BytesPerLine ;_aagb +=_bfgab .BytesPerLine ;};};default:_dg .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",_eaeb );return _c .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 (_babc *ImageBase )getByte (_bfdc int )(byte ,error ){if _bfdc > len (_babc .Data )-1||_bfdc < 0{return 0,_gc .Errorf ("\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",_bfdc );
};return _babc .Data [_bfdc ],nil ;};func (_fdgc *Monochrome )setBit (_gaa ,_gcgcg int ){_fdgc .Data [_gaa +(_gcgcg >>3)]|=0x80>>uint (_gcgcg &7);};func (_acd *Gray2 )Validate ()error {if len (_acd .Data )!=_acd .Height *_acd .BytesPerLine {return ErrInvalidImage ;
};return nil ;};func InDelta (expected ,current ,delta float64 )bool {_cegg :=expected -current ;if _cegg <=-delta ||_cegg >=delta {return false ;};return true ;};func (_gcbg *Monochrome )InverseData ()error {return _gcbg .RasterOperation (0,0,_gcbg .Width ,_gcbg .Height ,PixNotDst ,nil ,0,0);
};func _ab ()(_gfe [256]uint16 ){for _df :=0;_df < 256;_df ++{if _df &0x01!=0{_gfe [_df ]|=0x3;};if _df &0x02!=0{_gfe [_df ]|=0xc;};if _df &0x04!=0{_gfe [_df ]|=0x30;};if _df &0x08!=0{_gfe [_df ]|=0xc0;};if _df &0x10!=0{_gfe [_df ]|=0x300;};if _df &0x20!=0{_gfe [_df ]|=0xc00;
};if _df &0x40!=0{_gfe [_df ]|=0x3000;};if _df &0x80!=0{_gfe [_df ]|=0xc000;};};return _gfe ;};func (_fge *Monochrome )copy ()*Monochrome {_defg :=_ddde (_fge .Width ,_fge .Height );_defg .ModelThreshold =_fge .ModelThreshold ;_defg .Data =make ([]byte ,len (_fge .Data ));
copy (_defg .Data ,_fge .Data );if len (_fge .Decode )!=0{_defg .Decode =make ([]float64 ,len (_fge .Decode ));copy (_defg .Decode ,_fge .Decode );};if len (_fge .Alpha )!=0{_defg .Alpha =make ([]byte ,len (_fge .Alpha ));copy (_defg .Alpha ,_fge .Alpha );
};return _defg ;};var _ Image =&Monochrome {};var _ Image =&Gray8 {};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 ,_gc .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 (_ged *CMYK32 )ColorAt (x ,y int )(_cc .Color ,error ){return ColorAtCMYK (x ,y ,_ged .Width ,_ged .Data ,_ged .Decode );};func IsPowerOf2 (n uint )bool {return n > 0&&(n &(n -1))==0};func (_aabg *NRGBA32 )Copy ()Image {return &NRGBA32 {ImageBase :_aabg .copy ()}};
func (_ebge *Monochrome )getBit (_dbed ,_gdda int )uint8 {return _ebge .Data [_dbed +(_gdda >>3)]>>uint (7-(_gdda &7))&1;};func _deeba (_ccdg _fd .Image ,_bgdg Image ,_feba _fd .Rectangle ){if _gfggb ,_cffed :=_ccdg .(SMasker );_cffed &&_gfggb .HasAlpha (){_bgdg .(SMasker ).MakeAlpha ();
};_aaf (_ccdg ,_bgdg ,_feba );};func (_dge *CMYK32 )Set (x ,y int ,c _cc .Color ){_bcc :=4*(y *_dge .Width +x );if _bcc +3>=len (_dge .Data ){return ;};_cfd :=_cc .CMYKModel .Convert (c ).(_cc .CMYK );_dge .Data [_bcc ]=_cfd .C ;_dge .Data [_bcc +1]=_cfd .M ;
_dge .Data [_bcc +2]=_cfd .Y ;_dge .Data [_bcc +3]=_cfd .K ;};func init (){_fdgg ()};func _ageb (_adggc *_fd .Gray ,_becac uint8 )*_fd .Gray {_ceef :=_adggc .Bounds ();_fceg :=_fd .NewGray (_ceef );for _eead :=0;_eead < _ceef .Dx ();_eead ++{for _dadef :=0;
_dadef < _ceef .Dy ();_dadef ++{_dbege :=_adggc .GrayAt (_eead ,_dadef );_fceg .SetGray (_eead ,_dadef ,_cc .Gray {Y :_agag (_dbege .Y ,_becac )});};};return _fceg ;};type SMasker interface{HasAlpha ()bool ;GetAlpha ()[]byte ;MakeAlpha ();};func _fbdgb (_fdcb *Monochrome ,_fagd ,_eadg ,_gfga ,_fdb int ,_fcbe RasterOperator ){if _fagd < 0{_gfga +=_fagd ;
_fagd =0;};_gagc :=_fagd +_gfga -_fdcb .Width ;if _gagc > 0{_gfga -=_gagc ;};if _eadg < 0{_fdb +=_eadg ;_eadg =0;};_fccba :=_eadg +_fdb -_fdcb .Height ;if _fccba > 0{_fdb -=_fccba ;};if _gfga <=0||_fdb <=0{return ;};if (_fagd &7)==0{_abae (_fdcb ,_fagd ,_eadg ,_gfga ,_fdb ,_fcbe );
}else {_aaefba (_fdcb ,_fagd ,_eadg ,_gfga ,_fdb ,_fcbe );};};var _ Image =&Gray16 {};func _aaefba (_efgg *Monochrome ,_gadfe ,_gagf int ,_bgcc ,_abecb int ,_gaff RasterOperator ){var (_fbccf bool ;_ffbb bool ;_bcef int ;_abbae int ;_gaaae int ;_fddd int ;
_dfga bool ;_fbac byte ;);_bacf :=8-(_gadfe &7);_bbea :=_gagde [_bacf ];_bgad :=_efgg .BytesPerLine *_gagf +(_gadfe >>3);if _bgcc < _bacf {_fbccf =true ;_bbea &=_acab [8-_bacf +_bgcc ];};if !_fbccf {_bcef =(_bgcc -_bacf )>>3;if _bcef !=0{_ffbb =true ;_abbae =_bgad +1;
};};_gaaae =(_gadfe +_bgcc )&7;if !(_fbccf ||_gaaae ==0){_dfga =true ;_fbac =_acab [_gaaae ];_fddd =_bgad +1+_bcef ;};var _dbgd ,_deeb int ;switch _gaff {case PixClr :for _dbgd =0;_dbgd < _abecb ;_dbgd ++{_efgg .Data [_bgad ]=_egdb (_efgg .Data [_bgad ],0x0,_bbea );
_bgad +=_efgg .BytesPerLine ;};if _ffbb {for _dbgd =0;_dbgd < _abecb ;_dbgd ++{for _deeb =0;_deeb < _bcef ;_deeb ++{_efgg .Data [_abbae +_deeb ]=0x0;};_abbae +=_efgg .BytesPerLine ;};};if _dfga {for _dbgd =0;_dbgd < _abecb ;_dbgd ++{_efgg .Data [_fddd ]=_egdb (_efgg .Data [_fddd ],0x0,_fbac );
_fddd +=_efgg .BytesPerLine ;};};case PixSet :for _dbgd =0;_dbgd < _abecb ;_dbgd ++{_efgg .Data [_bgad ]=_egdb (_efgg .Data [_bgad ],0xff,_bbea );_bgad +=_efgg .BytesPerLine ;};if _ffbb {for _dbgd =0;_dbgd < _abecb ;_dbgd ++{for _deeb =0;_deeb < _bcef ;
_deeb ++{_efgg .Data [_abbae +_deeb ]=0xff;};_abbae +=_efgg .BytesPerLine ;};};if _dfga {for _dbgd =0;_dbgd < _abecb ;_dbgd ++{_efgg .Data [_fddd ]=_egdb (_efgg .Data [_fddd ],0xff,_fbac );_fddd +=_efgg .BytesPerLine ;};};case PixNotDst :for _dbgd =0;_dbgd < _abecb ;
_dbgd ++{_efgg .Data [_bgad ]=_egdb (_efgg .Data [_bgad ],^_efgg .Data [_bgad ],_bbea );_bgad +=_efgg .BytesPerLine ;};if _ffbb {for _dbgd =0;_dbgd < _abecb ;_dbgd ++{for _deeb =0;_deeb < _bcef ;_deeb ++{_efgg .Data [_abbae +_deeb ]=^(_efgg .Data [_abbae +_deeb ]);
};_abbae +=_efgg .BytesPerLine ;};};if _dfga {for _dbgd =0;_dbgd < _abecb ;_dbgd ++{_efgg .Data [_fddd ]=_egdb (_efgg .Data [_fddd ],^_efgg .Data [_fddd ],_fbac );_fddd +=_efgg .BytesPerLine ;};};};};func _ddac (_bge _cc .NRGBA64 )_cc .Gray {var _bgdec _cc .NRGBA64 ;
if _bge ==_bgdec {return _cc .Gray {Y :0xff};};_bbb ,_dfda ,_adfa ,_ :=_bge .RGBA ();_bgea :=(19595*_bbb +38470*_dfda +7471*_adfa +1<<15)>>24;return _cc .Gray {Y :uint8 (_bgea )};};type colorConverter struct{_efd func (_fcf _fd .Image )(Image ,error );
};func (_dfa *Gray2 )ColorModel ()_cc .Model {return Gray2Model };func MonochromeModel (threshold uint8 )_cc .Model {return monochromeModel (threshold )};func _abe (_bac _cc .Color )_cc .Color {_daff :=_cc .GrayModel .Convert (_bac ).(_cc .Gray );return _ccbf (_daff );
};func (_debb *Gray4 )ColorModel ()_cc .Model {return Gray4Model };var _ Image =&NRGBA16 {};func (_fcbg *Gray16 )Base ()*ImageBase {return &_fcbg .ImageBase };func (_cadc *Gray2 )At (x ,y int )_cc .Color {_bbff ,_ :=_cadc .ColorAt (x ,y );return _bbff };
func (_cgc *CMYK32 )Base ()*ImageBase {return &_cgc .ImageBase };func (_afea *Gray16 )At (x ,y int )_cc .Color {_ggga ,_ :=_afea .ColorAt (x ,y );return _ggga };type NRGBA16 struct{ImageBase };func (_dcgf *Gray8 )GrayAt (x ,y int )_cc .Gray {_gbgd ,_ :=ColorAtGray8BPC (x ,y ,_dcgf .BytesPerLine ,_dcgf .Data ,_dcgf .Decode );
return _gbgd ;};func (_dfdfc *NRGBA64 )Set (x ,y int ,c _cc .Color ){_cacb :=(y *_dfdfc .Width +x )*2;_daae :=_cacb *3;if _daae +5>=len (_dfdfc .Data ){return ;};_dacb :=_cc .NRGBA64Model .Convert (c ).(_cc .NRGBA64 );_dfdfc .setNRGBA64 (_daae ,_dacb ,_cacb );
};func _da (_gf *Monochrome ,_ada ,_eba int )(*Monochrome ,error ){if _gf ==nil {return nil ,_c .New ("\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _ada <=0||_eba <=0{return nil ,_c .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 _ada ==_eba {if _ada ==1{return _gf .copy (),nil ;};if _ada ==2||_ada ==4||_ada ==8{_gdg ,_gfg :=_cb (_gf ,_ada );if _gfg !=nil {return nil ,_gfg ;};return _gdg ,nil ;};};_ddd :=_ada *_gf .Width ;_fb :=_eba *_gf .Height ;_cac :=_ddde (_ddd ,_fb );
_fdc :=_cac .BytesPerLine ;var (_ce ,_cbb ,_bb ,_addd ,_bda int ;_gfd byte ;_eagg error ;);for _cbb =0;_cbb < _gf .Height ;_cbb ++{_ce =_eba *_cbb *_fdc ;for _bb =0;_bb < _gf .Width ;_bb ++{if _af :=_gf .getBitAt (_bb ,_cbb );_af {_bda =_ada *_bb ;for _addd =0;
_addd < _ada ;_addd ++{_cac .setIndexedBit (_ce *8+_bda +_addd );};};};for _addd =1;_addd < _eba ;_addd ++{_gbg :=_ce +_addd *_fdc ;for _adda :=0;_adda < _fdc ;_adda ++{if _gfd ,_eagg =_cac .getByte (_ce +_adda );_eagg !=nil {return nil ,_eagg ;};if _eagg =_cac .setByte (_gbg +_adda ,_gfd );
_eagg !=nil {return nil ,_eagg ;};};};};return _cac ,nil ;};func (_gce *Monochrome )ExpandBinary (factor int )(*Monochrome ,error ){if !IsPowerOf2 (uint (factor )){return nil ,_gc .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 _cb (_gce ,factor );};type Gray8 struct{ImageBase };func _bdab (_debec uint8 )bool {if _debec ==0||_debec ==255{return true ;};return false ;};func ColorAtGray16BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_cc .Gray16 ,error ){_edddg :=(y *bytesPerLine /2+x )*2;
if _edddg +1>=len (data ){return _cc .Gray16 {},_gc .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 );
};_gagd :=uint16 (data [_edddg ])<<8|uint16 (data [_edddg +1]);if len (decode )==2{_gagd =uint16 (uint64 (LinearInterpolate (float64 (_gagd ),0,65535,decode [0],decode [1])));};return _cc .Gray16 {Y :_gagd },nil ;};func (_bdac *Gray8 )Copy ()Image {return &Gray8 {ImageBase :_bdac .copy ()}};
func _cb (_de *Monochrome ,_eef int )(*Monochrome ,error ){if _de ==nil {return nil ,_c .New ("\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _eef ==1{return _de .copy (),nil ;};if !IsPowerOf2 (uint (_eef )){return nil ,_gc .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",_eef );
};_aa :=_geg (_eef );return _b (_de ,_eef ,_aa );};var (_acab =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_gagde =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func _gggf (_aeegf Gray ,_efdd NRGBA ,_ggcdd _fd .Rectangle ){for _afde :=0;
_afde < _ggcdd .Max .X ;_afde ++{for _fgedd :=0;_fgedd < _ggcdd .Max .Y ;_fgedd ++{_abfb :=_aeegf .GrayAt (_afde ,_fgedd );_efdd .SetNRGBA (_afde ,_fgedd ,_fecc (_abfb ));};};};func _cagc (_gfcf *Monochrome ,_ggeg ,_ccgdc ,_aad ,_cfbf int ,_aead RasterOperator ,_bega *Monochrome ,_eeee ,_fgfa int )error {var (_dbga byte ;
_cbaf int ;_ffca int ;_bdgge ,_accde int ;_effd ,_caea int ;);_ccegb :=_aad >>3;_bafd :=_aad &7;if _bafd > 0{_dbga =_acab [_bafd ];};_cbaf =_bega .BytesPerLine *_fgfa +(_eeee >>3);_ffca =_gfcf .BytesPerLine *_ccgdc +(_ggeg >>3);switch _aead {case PixSrc :for _effd =0;
_effd < _cfbf ;_effd ++{_bdgge =_cbaf +_effd *_bega .BytesPerLine ;_accde =_ffca +_effd *_gfcf .BytesPerLine ;for _caea =0;_caea < _ccegb ;_caea ++{_gfcf .Data [_accde ]=_bega .Data [_bdgge ];_accde ++;_bdgge ++;};if _bafd > 0{_gfcf .Data [_accde ]=_egdb (_gfcf .Data [_accde ],_bega .Data [_bdgge ],_dbga );
};};case PixNotSrc :for _effd =0;_effd < _cfbf ;_effd ++{_bdgge =_cbaf +_effd *_bega .BytesPerLine ;_accde =_ffca +_effd *_gfcf .BytesPerLine ;for _caea =0;_caea < _ccegb ;_caea ++{_gfcf .Data [_accde ]=^(_bega .Data [_bdgge ]);_accde ++;_bdgge ++;};if _bafd > 0{_gfcf .Data [_accde ]=_egdb (_gfcf .Data [_accde ],^_bega .Data [_bdgge ],_dbga );
};};case PixSrcOrDst :for _effd =0;_effd < _cfbf ;_effd ++{_bdgge =_cbaf +_effd *_bega .BytesPerLine ;_accde =_ffca +_effd *_gfcf .BytesPerLine ;for _caea =0;_caea < _ccegb ;_caea ++{_gfcf .Data [_accde ]|=_bega .Data [_bdgge ];_accde ++;_bdgge ++;};if _bafd > 0{_gfcf .Data [_accde ]=_egdb (_gfcf .Data [_accde ],_bega .Data [_bdgge ]|_gfcf .Data [_accde ],_dbga );
};};case PixSrcAndDst :for _effd =0;_effd < _cfbf ;_effd ++{_bdgge =_cbaf +_effd *_bega .BytesPerLine ;_accde =_ffca +_effd *_gfcf .BytesPerLine ;for _caea =0;_caea < _ccegb ;_caea ++{_gfcf .Data [_accde ]&=_bega .Data [_bdgge ];_accde ++;_bdgge ++;};if _bafd > 0{_gfcf .Data [_accde ]=_egdb (_gfcf .Data [_accde ],_bega .Data [_bdgge ]&_gfcf .Data [_accde ],_dbga );
};};case PixSrcXorDst :for _effd =0;_effd < _cfbf ;_effd ++{_bdgge =_cbaf +_effd *_bega .BytesPerLine ;_accde =_ffca +_effd *_gfcf .BytesPerLine ;for _caea =0;_caea < _ccegb ;_caea ++{_gfcf .Data [_accde ]^=_bega .Data [_bdgge ];_accde ++;_bdgge ++;};if _bafd > 0{_gfcf .Data [_accde ]=_egdb (_gfcf .Data [_accde ],_bega .Data [_bdgge ]^_gfcf .Data [_accde ],_dbga );
};};case PixNotSrcOrDst :for _effd =0;_effd < _cfbf ;_effd ++{_bdgge =_cbaf +_effd *_bega .BytesPerLine ;_accde =_ffca +_effd *_gfcf .BytesPerLine ;for _caea =0;_caea < _ccegb ;_caea ++{_gfcf .Data [_accde ]|=^(_bega .Data [_bdgge ]);_accde ++;_bdgge ++;
};if _bafd > 0{_gfcf .Data [_accde ]=_egdb (_gfcf .Data [_accde ],^(_bega .Data [_bdgge ])|_gfcf .Data [_accde ],_dbga );};};case PixNotSrcAndDst :for _effd =0;_effd < _cfbf ;_effd ++{_bdgge =_cbaf +_effd *_bega .BytesPerLine ;_accde =_ffca +_effd *_gfcf .BytesPerLine ;
for _caea =0;_caea < _ccegb ;_caea ++{_gfcf .Data [_accde ]&=^(_bega .Data [_bdgge ]);_accde ++;_bdgge ++;};if _bafd > 0{_gfcf .Data [_accde ]=_egdb (_gfcf .Data [_accde ],^(_bega .Data [_bdgge ])&_gfcf .Data [_accde ],_dbga );};};case PixSrcOrNotDst :for _effd =0;
_effd < _cfbf ;_effd ++{_bdgge =_cbaf +_effd *_bega .BytesPerLine ;_accde =_ffca +_effd *_gfcf .BytesPerLine ;for _caea =0;_caea < _ccegb ;_caea ++{_gfcf .Data [_accde ]=_bega .Data [_bdgge ]|^(_gfcf .Data [_accde ]);_accde ++;_bdgge ++;};if _bafd > 0{_gfcf .Data [_accde ]=_egdb (_gfcf .Data [_accde ],_bega .Data [_bdgge ]|^(_gfcf .Data [_accde ]),_dbga );
};};case PixSrcAndNotDst :for _effd =0;_effd < _cfbf ;_effd ++{_bdgge =_cbaf +_effd *_bega .BytesPerLine ;_accde =_ffca +_effd *_gfcf .BytesPerLine ;for _caea =0;_caea < _ccegb ;_caea ++{_gfcf .Data [_accde ]=_bega .Data [_bdgge ]&^(_gfcf .Data [_accde ]);
_accde ++;_bdgge ++;};if _bafd > 0{_gfcf .Data [_accde ]=_egdb (_gfcf .Data [_accde ],_bega .Data [_bdgge ]&^(_gfcf .Data [_accde ]),_dbga );};};case PixNotPixSrcOrDst :for _effd =0;_effd < _cfbf ;_effd ++{_bdgge =_cbaf +_effd *_bega .BytesPerLine ;_accde =_ffca +_effd *_gfcf .BytesPerLine ;
for _caea =0;_caea < _ccegb ;_caea ++{_gfcf .Data [_accde ]=^(_bega .Data [_bdgge ]|_gfcf .Data [_accde ]);_accde ++;_bdgge ++;};if _bafd > 0{_gfcf .Data [_accde ]=_egdb (_gfcf .Data [_accde ],^(_bega .Data [_bdgge ]|_gfcf .Data [_accde ]),_dbga );};};
case PixNotPixSrcAndDst :for _effd =0;_effd < _cfbf ;_effd ++{_bdgge =_cbaf +_effd *_bega .BytesPerLine ;_accde =_ffca +_effd *_gfcf .BytesPerLine ;for _caea =0;_caea < _ccegb ;_caea ++{_gfcf .Data [_accde ]=^(_bega .Data [_bdgge ]&_gfcf .Data [_accde ]);
_accde ++;_bdgge ++;};if _bafd > 0{_gfcf .Data [_accde ]=_egdb (_gfcf .Data [_accde ],^(_bega .Data [_bdgge ]&_gfcf .Data [_accde ]),_dbga );};};case PixNotPixSrcXorDst :for _effd =0;_effd < _cfbf ;_effd ++{_bdgge =_cbaf +_effd *_bega .BytesPerLine ;_accde =_ffca +_effd *_gfcf .BytesPerLine ;
for _caea =0;_caea < _ccegb ;_caea ++{_gfcf .Data [_accde ]=^(_bega .Data [_bdgge ]^_gfcf .Data [_accde ]);_accde ++;_bdgge ++;};if _bafd > 0{_gfcf .Data [_accde ]=_egdb (_gfcf .Data [_accde ],^(_bega .Data [_bdgge ]^_gfcf .Data [_accde ]),_dbga );};};
default:_dg .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",_aead );return _c .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 (_gcbd *NRGBA16 )Set (x ,y int ,c _cc .Color ){_gfdd :=y *_gcbd .BytesPerLine +x *3/2;if _gfdd +1>=len (_gcbd .Data ){return ;};_ddfe :=NRGBA16Model .Convert (c ).(_cc .NRGBA );_gcbd .setNRGBA (x ,y ,_gfdd ,_ddfe );};func (_gca *Gray8 )At (x ,y int )_cc .Color {_beee ,_ :=_gca .ColorAt (x ,y );
return _beee };func IsGrayImgBlackAndWhite (i *_fd .Gray )bool {return _bgggg (i )};func _dff (_dcb ,_cba *Monochrome ,_eaag []byte ,_cde int )(_agg error ){var (_cag ,_gab ,_faga ,_acc ,_gda ,_ffa ,_gaf ,_cafd int ;_ggd ,_dga uint32 ;_debf ,_ddff byte ;
_gdfd uint16 ;);_gfc :=make ([]byte ,4);_efg :=make ([]byte ,4);for _faga =0;_faga < _dcb .Height -1;_faga ,_acc =_faga +2,_acc +1{_cag =_faga *_dcb .BytesPerLine ;_gab =_acc *_cba .BytesPerLine ;for _gda ,_ffa =0,0;_gda < _cde ;_gda ,_ffa =_gda +4,_ffa +1{for _gaf =0;
_gaf < 4;_gaf ++{_cafd =_cag +_gda +_gaf ;if _cafd <=len (_dcb .Data )-1&&_cafd < _cag +_dcb .BytesPerLine {_gfc [_gaf ]=_dcb .Data [_cafd ];}else {_gfc [_gaf ]=0x00;};_cafd =_cag +_dcb .BytesPerLine +_gda +_gaf ;if _cafd <=len (_dcb .Data )-1&&_cafd < _cag +(2*_dcb .BytesPerLine ){_efg [_gaf ]=_dcb .Data [_cafd ];
}else {_efg [_gaf ]=0x00;};};_ggd =_a .BigEndian .Uint32 (_gfc );_dga =_a .BigEndian .Uint32 (_efg );_dga &=_ggd ;_dga &=_dga <<1;_dga &=0xaaaaaaaa;_ggd =_dga |(_dga <<7);_debf =byte (_ggd >>24);_ddff =byte ((_ggd >>8)&0xff);_cafd =_gab +_ffa ;if _cafd +1==len (_cba .Data )-1||_cafd +1>=_gab +_cba .BytesPerLine {_cba .Data [_cafd ]=_eaag [_debf ];
if _agg =_cba .setByte (_cafd ,_eaag [_debf ]);_agg !=nil {return _gc .Errorf ("\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_cafd );};}else {_gdfd =(uint16 (_eaag [_debf ])<<8)|uint16 (_eaag [_ddff ]);if _agg =_cba .setTwoBytes (_cafd ,_gdfd );_agg !=nil {return _gc .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",_cafd );
};_ffa ++;};};};return nil ;};func (_gadg *Gray16 )Set (x ,y int ,c _cc .Color ){_fca :=(y *_gadg .BytesPerLine /2+x )*2;if _fca +1>=len (_gadg .Data ){return ;};_ffd :=_cc .Gray16Model .Convert (c ).(_cc .Gray16 );_gadg .Data [_fca ],_gadg .Data [_fca +1]=uint8 (_ffd .Y >>8),uint8 (_ffd .Y &0xff);
};func (_gcgbg *NRGBA32 )Bounds ()_fd .Rectangle {return _fd .Rectangle {Max :_fd .Point {X :_gcgbg .Width ,Y :_gcgbg .Height }};};func _bgd (_eegd ,_fdd int ,_caf []byte )*Monochrome {_cg :=_ddde (_eegd ,_fdd );_cg .Data =_caf ;return _cg ;};func ImgToBinary (i _fd .Image ,threshold uint8 )*_fd .Gray {switch _eaee :=i .(type ){case *_fd .Gray :if _bgggg (_eaee ){return _eaee ;
};return _ageb (_eaee ,threshold );case *_fd .Gray16 :return _agdca (_eaee ,threshold );default:return _ecdd (_eaee ,threshold );};};func RasterOperation (dest *Monochrome ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Monochrome ,sx ,sy int )error {return _afad (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};type NRGBA32 struct{ImageBase };func ColorAtGrayscale (x ,y ,bitsPerColor ,bytesPerLine int ,data []byte ,decode []float64 )(_cc .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 ,_gc .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 _bdga (_bbbd RGBA ,_abdb Gray ,_fged _fd .Rectangle ){for _agfce :=0;_agfce < _fged .Max .X ;_agfce ++{for _bfdb :=0;_bfdb < _fged .Max .Y ;_bfdb ++{_babg :=_debe (_bbbd .RGBAAt (_agfce ,_bfdb ));_abdb .SetGray (_agfce ,_bfdb ,_babg );};};};func FromGoImage (i _fd .Image )(Image ,error ){switch _cgaf :=i .(type ){case Image :return _cgaf .Copy (),nil ;
case Gray :return GrayConverter .Convert (i );case *_fd .Gray16 :return Gray16Converter .Convert (i );case CMYK :return CMYKConverter .Convert (i );case *_fd .NRGBA64 :return NRGBA64Converter .Convert (i );default:return NRGBAConverter .Convert (i );};
};var _gdgf [256]uint8 ;func (_fgaf *NRGBA32 )At (x ,y int )_cc .Color {_afaa ,_ :=_fgaf .ColorAt (x ,y );return _afaa };func (_cdgb *Gray8 )ColorModel ()_cc .Model {return _cc .GrayModel };type Gray interface{GrayAt (_dfc ,_eaef int )_cc .Gray ;SetGray (_gcga ,_aaeb int ,_fcd _cc .Gray );
};var _ Image =&Gray2 {};var _ Image =&NRGBA64 {};func (_cbbc *NRGBA16 )SetNRGBA (x ,y int ,c _cc .NRGBA ){_abfc :=y *_cbbc .BytesPerLine +x *3/2;if _abfc +1>=len (_cbbc .Data ){return ;};c =_edde (c );_cbbc .setNRGBA (x ,y ,_abfc ,c );};func _bgb ()(_dca [256]uint32 ){for _bdag :=0;
_bdag < 256;_bdag ++{if _bdag &0x01!=0{_dca [_bdag ]|=0xf;};if _bdag &0x02!=0{_dca [_bdag ]|=0xf0;};if _bdag &0x04!=0{_dca [_bdag ]|=0xf00;};if _bdag &0x08!=0{_dca [_bdag ]|=0xf000;};if _bdag &0x10!=0{_dca [_bdag ]|=0xf0000;};if _bdag &0x20!=0{_dca [_bdag ]|=0xf00000;
};if _bdag &0x40!=0{_dca [_bdag ]|=0xf000000;};if _bdag &0x80!=0{_dca [_bdag ]|=0xf0000000;};};return _dca ;};func _agdca (_bagf *_fd .Gray16 ,_gdcbc uint8 )*_fd .Gray {_efgb :=_bagf .Bounds ();_fcdf :=_fd .NewGray (_efgb );for _egfe :=0;_egfe < _efgb .Dx ();
_egfe ++{for _fcdg :=0;_fcdg < _efgb .Dy ();_fcdg ++{_geec :=_bagf .Gray16At (_egfe ,_fcdg );_fcdf .SetGray (_egfe ,_fcdg ,_cc .Gray {Y :_agag (uint8 (_geec .Y /256),_gdcbc )});};};return _fcdf ;};func (_cfca *Monochrome )ReduceBinary (factor float64 )(*Monochrome ,error ){_ggdd :=_aagf (uint (factor ));
if !IsPowerOf2 (uint (factor )){_ggdd ++;};_dgdg :=make ([]int ,_ggdd );for _ade :=range _dgdg {_dgdg [_ade ]=4;};_beffc ,_fagg :=_aae (_cfca ,_dgdg ...);if _fagg !=nil {return nil ,_fagg ;};return _beffc ,nil ;};var _ Image =&CMYK32 {};func (_cbcd *NRGBA64 )NRGBA64At (x ,y int )_cc .NRGBA64 {_gdcb ,_ :=ColorAtNRGBA64 (x ,y ,_cbcd .Width ,_cbcd .Data ,_cbcd .Alpha ,_cbcd .Decode );
return _gdcb ;};func _cgf (_eecf _cc .NRGBA64 )_cc .NRGBA {return _cc .NRGBA {R :uint8 (_eecf .R >>8),G :uint8 (_eecf .G >>8),B :uint8 (_eecf .B >>8),A :uint8 (_eecf .A >>8)};};func (_dccg *ImageBase )setTwoBytes (_cdde int ,_dbaee uint16 )error {if _cdde +1> len (_dccg .Data )-1{return _c .New ("\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_dccg .Data [_cdde ]=byte ((_dbaee &0xff00)>>8);_dccg .Data [_cdde +1]=byte (_dbaee &0xff);return nil ;};func (_dcgd *Gray8 )Validate ()error {if len (_dcgd .Data )!=_dcgd .Height *_dcgd .BytesPerLine {return ErrInvalidImage ;};return nil ;};func _egc (_egf ,_cgd *Monochrome ,_cdc []byte ,_dggf int )(_ecg error ){var (_fad ,_gge ,_fbd ,_egd ,_ccgc ,_abd ,_cbc ,_edd int ;
_ece ,_dgd ,_cbbe ,_eddd uint32 ;_adg ,_efc byte ;_afd uint16 ;);_ebf :=make ([]byte ,4);_gga :=make ([]byte ,4);for _fbd =0;_fbd < _egf .Height -1;_fbd ,_egd =_fbd +2,_egd +1{_fad =_fbd *_egf .BytesPerLine ;_gge =_egd *_cgd .BytesPerLine ;for _ccgc ,_abd =0,0;
_ccgc < _dggf ;_ccgc ,_abd =_ccgc +4,_abd +1{for _cbc =0;_cbc < 4;_cbc ++{_edd =_fad +_ccgc +_cbc ;if _edd <=len (_egf .Data )-1&&_edd < _fad +_egf .BytesPerLine {_ebf [_cbc ]=_egf .Data [_edd ];}else {_ebf [_cbc ]=0x00;};_edd =_fad +_egf .BytesPerLine +_ccgc +_cbc ;
if _edd <=len (_egf .Data )-1&&_edd < _fad +(2*_egf .BytesPerLine ){_gga [_cbc ]=_egf .Data [_edd ];}else {_gga [_cbc ]=0x00;};};_ece =_a .BigEndian .Uint32 (_ebf );_dgd =_a .BigEndian .Uint32 (_gga );_cbbe =_ece &_dgd ;_cbbe |=_cbbe <<1;_eddd =_ece |_dgd ;
_eddd &=_eddd <<1;_dgd =_cbbe |_eddd ;_dgd &=0xaaaaaaaa;_ece =_dgd |(_dgd <<7);_adg =byte (_ece >>24);_efc =byte ((_ece >>8)&0xff);_edd =_gge +_abd ;if _edd +1==len (_cgd .Data )-1||_edd +1>=_gge +_cgd .BytesPerLine {if _ecg =_cgd .setByte (_edd ,_cdc [_adg ]);
_ecg !=nil {return _gc .Errorf ("\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_edd );};}else {_afd =(uint16 (_cdc [_adg ])<<8)|uint16 (_cdc [_efc ]);if _ecg =_cgd .setTwoBytes (_edd ,_afd );_ecg !=nil {return _gc .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",_edd );
};_abd ++;};};};return nil ;};type ColorConverter interface{Convert (_aggf _fd .Image )(Image ,error );};func _edde (_ccff _cc .NRGBA )_cc .NRGBA {_ccff .R =_ccff .R >>4|(_ccff .R >>4)<<4;_ccff .G =_ccff .G >>4|(_ccff .G >>4)<<4;_ccff .B =_ccff .B >>4|(_ccff .B >>4)<<4;
return _ccff ;};func _be (_bca ,_beg *Monochrome )(_bg error ){_fed :=_beg .BytesPerLine ;_add :=_bca .BytesPerLine ;var (_aeb byte ;_gb uint16 ;_cdf ,_aec ,_cdd ,_ecb ,_gbb int ;);for _cdd =0;_cdd < _beg .Height ;_cdd ++{_cdf =_cdd *_fed ;_aec =2*_cdd *_add ;
for _ecb =0;_ecb < _fed ;_ecb ++{_aeb =_beg .Data [_cdf +_ecb ];_gb =_dgg [_aeb ];_gbb =_aec +_ecb *2;if _bca .BytesPerLine !=_beg .BytesPerLine *2&&(_ecb +1)*2> _bca .BytesPerLine {_bg =_bca .setByte (_gbb ,byte (_gb >>8));}else {_bg =_bca .setTwoBytes (_gbb ,_gb );
};if _bg !=nil {return _bg ;};};for _ecb =0;_ecb < _add ;_ecb ++{_gbb =_aec +_add +_ecb ;_aeb =_bca .Data [_aec +_ecb ];if _bg =_bca .setByte (_gbb ,_aeb );_bg !=nil {return _bg ;};};};return nil ;};func (_dafa *Monochrome )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Monochrome ,sx ,sy int )error {return _afad (_dafa ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func (_abbe *NRGBA16 )Base ()*ImageBase {return &_abbe .ImageBase };func (_adee *NRGBA16 )ColorAt (x ,y int )(_cc .Color ,error ){return ColorAtNRGBA16 (x ,y ,_adee .Width ,_adee .BytesPerLine ,_adee .Data ,_adee .Alpha ,_adee .Decode );};func (_eaae *Monochrome )Copy ()Image {return &Monochrome {ImageBase :_eaae .ImageBase .copy (),ModelThreshold :_eaae .ModelThreshold };
};func (_bbdb *NRGBA64 )Copy ()Image {return &NRGBA64 {ImageBase :_bbdb .copy ()}};func (_bccb *NRGBA64 )Base ()*ImageBase {return &_bccb .ImageBase };func (_bgec *Monochrome )clearBit (_daaa ,_dgae int ){_bgec .Data [_daaa ]&=^(0x80>>uint (_dgae &7))};
func _aagf (_dbbe uint )uint {var _fdeg uint ;for _dbbe !=0{_dbbe >>=1;_fdeg ++;};return _fdeg -1;};func (_bccf *CMYK32 )CMYKAt (x ,y int )_cc .CMYK {_cbgb ,_ :=ColorAtCMYK (x ,y ,_bccf .Width ,_bccf .Data ,_bccf .Decode );return _cbgb ;};type Histogramer interface{Histogram ()[256]int ;
};func (_gadf *Monochrome )ColorAt (x ,y int )(_cc .Color ,error ){return ColorAtGray1BPC (x ,y ,_gadf .BytesPerLine ,_gadf .Data ,_gadf .Decode );};func (_gddb *NRGBA64 )At (x ,y int )_cc .Color {_cecd ,_ :=_gddb .ColorAt (x ,y );return _cecd };func (_bga *ImageBase )HasAlpha ()bool {if _bga .Alpha ==nil {return false ;
};for _fbea :=range _bga .Alpha {if _bga .Alpha [_fbea ]!=0xff{return true ;};};return false ;};func _afad (_aeaa *Monochrome ,_dgef ,_ffdb ,_cdfd ,_gccc int ,_dfdg RasterOperator ,_edae *Monochrome ,_dbd ,_aaea int )error {if _aeaa ==nil {return _c .New ("\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");
};if _dfdg ==PixDst {return nil ;};switch _dfdg {case PixClr ,PixSet ,PixNotDst :_fbdgb (_aeaa ,_dgef ,_ffdb ,_cdfd ,_gccc ,_dfdg );return nil ;};if _edae ==nil {_dg .Log .Debug ("\u0052a\u0073\u0074e\u0072\u004f\u0070\u0065r\u0061\u0074\u0069o\u006e\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020bi\u0074\u006d\u0061p\u0020\u0069s\u0020\u006e\u006f\u0074\u0020\u0064e\u0066\u0069n\u0065\u0064");
return _c .New ("\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _cbe :=_cbfe (_aeaa ,_dgef ,_ffdb ,_cdfd ,_gccc ,_dfdg ,_edae ,_dbd ,_aaea );_cbe !=nil {return _cbe ;};return nil ;};func _baaf (_dgee int ,_bgfe int )int {if _dgee < _bgfe {return _dgee ;
};return _bgfe ;};func (_edc *Monochrome )setGray (_cff int ,_fffb _cc .Gray ,_ggg int ){if _fffb .Y ==0{_edc .clearBit (_ggg ,_cff );}else {_edc .setGrayBit (_ggg ,_cff );};};func (_cece *Gray4 )Copy ()Image {return &Gray4 {ImageBase :_cece .copy ()}};
func (_egca *monochromeThresholdConverter )Convert (img _fd .Image )(Image ,error ){if _fafa ,_eaaf :=img .(*Monochrome );_eaaf {return _fafa .Copy (),nil ;};_abb :=img .Bounds ();_bgge ,_fccb :=NewImage (_abb .Max .X ,_abb .Max .Y ,1,1,nil ,nil ,nil );
if _fccb !=nil {return nil ,_fccb ;};_bgge .(*Monochrome ).ModelThreshold =_egca .Threshold ;for _daf :=0;_daf < _abb .Max .X ;_daf ++{for _fabb :=0;_fabb < _abb .Max .Y ;_fabb ++{_aeeg :=img .At (_daf ,_fabb );_bgge .Set (_daf ,_fabb ,_aeeg );};};return _bgge ,nil ;
};func _accd (_gbbf _fd .Image ,_dafb Image ,_gddc _fd .Rectangle ){switch _gdba :=_gbbf .(type ){case Gray :_ebdf (_gdba ,_dafb .(Gray ),_gddc );case NRGBA :_caeeg (_gdba ,_dafb .(Gray ),_gddc );case CMYK :_gfgf (_gdba ,_dafb .(Gray ),_gddc );case RGBA :_bdga (_gdba ,_dafb .(Gray ),_gddc );
default:_aaf (_gbbf ,_dafb .(Image ),_gddc );};};func (_aeefc *NRGBA64 )ColorAt (x ,y int )(_cc .Color ,error ){return ColorAtNRGBA64 (x ,y ,_aeefc .Width ,_aeefc .Data ,_aeefc .Alpha ,_aeefc .Decode );};func (_abdg *CMYK32 )ColorModel ()_cc .Model {return _cc .CMYKModel };
func (_cfcc *Gray16 )Histogram ()(_dcbd [256]int ){for _dggd :=0;_dggd < _cfcc .Width ;_dggd ++{for _ggad :=0;_ggad < _cfcc .Height ;_ggad ++{_dcbd [_cfcc .GrayAt (_dggd ,_ggad ).Y ]++;};};return _dcbd ;};func _efdg (_abec _cc .Color )_cc .Color {_accg :=_cc .GrayModel .Convert (_abec ).(_cc .Gray );
return _adgf (_accg );};func (_bdd *Monochrome )getBitAt (_bbcf ,_efde int )bool {_ccfb :=_efde *_bdd .BytesPerLine +(_bbcf >>3);_bbf :=_bbcf &0x07;_cec :=uint (7-_bbf );if _ccfb > len (_bdd .Data )-1{return false ;};if (_bdd .Data [_ccfb ]>>_cec )&0x01>=1{return true ;
};return false ;};func (_gdfa *NRGBA16 )ColorModel ()_cc .Model {return NRGBA16Model };func (_cbfd *Gray8 )Bounds ()_fd .Rectangle {return _fd .Rectangle {Max :_fd .Point {X :_cbfd .Width ,Y :_cbfd .Height }};};func _fdgg (){for _bcbg :=0;_bcbg < 256;_bcbg ++{_gdgf [_bcbg ]=uint8 (_bcbg &0x1)+(uint8 (_bcbg >>1)&0x1)+(uint8 (_bcbg >>2)&0x1)+(uint8 (_bcbg >>3)&0x1)+(uint8 (_bcbg >>4)&0x1)+(uint8 (_bcbg >>5)&0x1)+(uint8 (_bcbg >>6)&0x1)+(uint8 (_bcbg >>7)&0x1);
};};var _ _fd .Image =&Monochrome {};func ColorAtNRGBA32 (x ,y ,width int ,data ,alpha []byte ,decode []float64 )(_cc .NRGBA ,error ){_aga :=y *width +x ;_fbcdc :=3*_aga ;if _fbcdc +2>=len (data ){return _cc .NRGBA {},_gc .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 );
};_gcceg :=uint8 (0xff);if alpha !=nil &&len (alpha )> _aga {_gcceg =alpha [_aga ];};_acbf ,_gdae ,_egec :=data [_fbcdc ],data [_fbcdc +1],data [_fbcdc +2];if len (decode )==6{_acbf =uint8 (uint32 (LinearInterpolate (float64 (_acbf ),0,255,decode [0],decode [1]))&0xff);
_gdae =uint8 (uint32 (LinearInterpolate (float64 (_gdae ),0,255,decode [2],decode [3]))&0xff);_egec =uint8 (uint32 (LinearInterpolate (float64 (_egec ),0,255,decode [4],decode [5]))&0xff);};return _cc .NRGBA {R :_acbf ,G :_gdae ,B :_egec ,A :_gcceg },nil ;
};func _aafd (_ggge nrgba64 ,_fcbgd NRGBA ,_ccbc _fd .Rectangle ){for _bcag :=0;_bcag < _ccbc .Max .X ;_bcag ++{for _feeed :=0;_feeed < _ccbc .Max .Y ;_feeed ++{_bcgg :=_ggge .NRGBA64At (_bcag ,_feeed );_fcbgd .SetNRGBA (_bcag ,_feeed ,_cgf (_bcgg ));};
};};func _gd (_ff ,_eeg *Monochrome )(_aee error ){_fda :=_eeg .BytesPerLine ;_eb :=_ff .BytesPerLine ;var _ebc ,_bae ,_cbg ,_bfc ,_dcg int ;for _cbg =0;_cbg < _eeg .Height ;_cbg ++{_ebc =_cbg *_fda ;_bae =8*_cbg *_eb ;for _bfc =0;_bfc < _fda ;_bfc ++{if _aee =_ff .setEightBytes (_bae +_bfc *8,_cf [_eeg .Data [_ebc +_bfc ]]);
_aee !=nil {return _aee ;};};for _dcg =1;_dcg < 8;_dcg ++{for _bfc =0;_bfc < _eb ;_bfc ++{if _aee =_ff .setByte (_bae +_dcg *_eb +_bfc ,_ff .Data [_bae +_bfc ]);_aee !=nil {return _aee ;};};};};return nil ;};func (_abef *ImageBase )GetAlpha ()[]byte {return _abef .Alpha };
func (_bgc *Gray16 )GrayAt (x ,y int )_cc .Gray {_dbae ,_ :=_bgc .ColorAt (x ,y );return _cc .Gray {Y :uint8 (_dbae .(_cc .Gray16 ).Y >>8)};};var (MonochromeConverter =ConverterFunc (_fbda );Gray2Converter =ConverterFunc (_gggc );Gray4Converter =ConverterFunc (_ffcf );
GrayConverter =ConverterFunc (_bbbf );Gray16Converter =ConverterFunc (_cgcc );NRGBA16Converter =ConverterFunc (_fgdb );NRGBAConverter =ConverterFunc (_agcf );NRGBA64Converter =ConverterFunc (_ebfdd );CMYKConverter =ConverterFunc (_gfb ););func (_gbffb *Gray4 )Base ()*ImageBase {return &_gbffb .ImageBase };
func (_eafe *NRGBA64 )Bounds ()_fd .Rectangle {return _fd .Rectangle {Max :_fd .Point {X :_eafe .Width ,Y :_eafe .Height }};};func (_dbeg *Gray8 )Histogram ()(_bfdd [256]int ){for _ffb :=0;_ffb < len (_dbeg .Data );_ffb ++{_bfdd [_dbeg .Data [_ffb ]]++;
};return _bfdd ;};func NextPowerOf2 (n uint )uint {if IsPowerOf2 (n ){return n ;};return 1<<(_aagf (n )+1);};func (_agfg *Gray4 )Set (x ,y int ,c _cc .Color ){if x >=_agfg .Width ||y >=_agfg .Height {return ;};_dfae :=Gray4Model .Convert (c ).(_cc .Gray );
_agfg .setGray (x ,y ,_dfae );};func _eaac (_efab []byte ,_dddee Image )error {_abac :=true ;for _bdae :=0;_bdae < len (_efab );_bdae ++{if _efab [_bdae ]!=0xff{_abac =false ;break ;};};if _abac {switch _fdfb :=_dddee .(type ){case *NRGBA32 :_fdfb .Alpha =nil ;
case *NRGBA64 :_fdfb .Alpha =nil ;default:return _gc .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",_dddee );
};};return nil ;};func _cdg (_fecd _cc .Gray )_cc .CMYK {return _cc .CMYK {K :0xff-_fecd .Y }};func _geg (_ccd int )[]uint {var _ccg []uint ;_cea :=_ccd ;_eagf :=_cea /8;if _eagf !=0{for _agd :=0;_agd < _eagf ;_agd ++{_ccg =append (_ccg ,8);};_fc :=_cea %8;
_cea =0;if _fc !=0{_cea =_fc ;};};_gde :=_cea /4;if _gde !=0{for _baea :=0;_baea < _gde ;_baea ++{_ccg =append (_ccg ,4);};_bee :=_cea %4;_cea =0;if _bee !=0{_cea =_bee ;};};_dae :=_cea /2;if _dae !=0{for _dec :=0;_dec < _dae ;_dec ++{_ccg =append (_ccg ,2);
};};return _ccg ;};func _fecc (_abc _cc .Gray )_cc .NRGBA {return _cc .NRGBA {R :_abc .Y ,G :_abc .Y ,B :_abc .Y ,A :0xff}};func (_debg *Monochrome )SetGray (x ,y int ,g _cc .Gray ){_ead :=y *_debg .BytesPerLine +x >>3;if _ead > len (_debg .Data )-1{return ;
};g =_gbff (g ,monochromeModel (_debg .ModelThreshold ));_debg .setGray (x ,g ,_ead );};func _agcf (_fccf _fd .Image )(Image ,error ){if _cecb ,_gaeg :=_fccf .(*NRGBA32 );_gaeg {return _cecb .Copy (),nil ;};_eaaa ,_aeeeb ,_edff :=_egdf (_fccf ,1);_cbda ,_badb :=NewImage (_eaaa .Max .X ,_eaaa .Max .Y ,8,3,nil ,_edff ,nil );
if _badb !=nil {return nil ,_badb ;};_ebfe (_fccf ,_cbda ,_eaaa );if len (_edff )!=0&&!_aeeeb {if _ega :=_eaac (_edff ,_cbda );_ega !=nil {return nil ,_ega ;};};return _cbda ,nil ;};func _bbc (_faa NRGBA ,_cafc CMYK ,_fce _fd .Rectangle ){for _dgf :=0;
_dgf < _fce .Max .X ;_dgf ++{for _ebg :=0;_ebg < _fce .Max .Y ;_ebg ++{_eaed :=_faa .NRGBAAt (_dgf ,_ebg );_cafc .SetCMYK (_dgf ,_ebg ,_agdc (_eaed ));};};};func (_cfag *NRGBA16 )NRGBAAt (x ,y int )_cc .NRGBA {_fafe ,_ :=ColorAtNRGBA16 (x ,y ,_cfag .Width ,_cfag .BytesPerLine ,_cfag .Data ,_cfag .Alpha ,_cfag .Decode );
return _fafe ;};func (_adafa *Monochrome )setGrayBit (_agc ,_eca int ){_adafa .Data [_agc ]|=0x80>>uint (_eca &7)};func (_gea *Monochrome )Validate ()error {if len (_gea .Data )!=_gea .Height *_gea .BytesPerLine {return ErrInvalidImage ;};return nil ;};
func (_eefc *NRGBA64 )SetNRGBA64 (x ,y int ,c _cc .NRGBA64 ){_ecbe :=(y *_eefc .Width +x )*2;_fcba :=_ecbe *3;if _fcba +5>=len (_eefc .Data ){return ;};_eefc .setNRGBA64 (_fcba ,c ,_ecbe );};func (_efeff *ImageBase )setEightBytes (_fbdc int ,_afec uint64 )error {_dce :=_efeff .BytesPerLine -(_fbdc %_efeff .BytesPerLine );
if _efeff .BytesPerLine !=_efeff .Width >>3{_dce --;};if _dce >=8{return _efeff .setEightFullBytes (_fbdc ,_afec );};return _efeff .setEightPartlyBytes (_fbdc ,_dce ,_afec );};func NewImageBase (width int ,height int ,bitsPerComponent int ,colorComponents int ,data []byte ,alpha []byte ,decode []float64 )ImageBase {_fcab :=ImageBase {Width :width ,Height :height ,BitsPerComponent :bitsPerComponent ,ColorComponents :colorComponents ,Data :data ,Alpha :alpha ,Decode :decode ,BytesPerLine :BytesPerLine (width ,bitsPerComponent ,colorComponents )};
if data ==nil {_fcab .Data =make ([]byte ,height *_fcab .BytesPerLine );};return _fcab ;};func _ffcf (_ggcb _fd .Image )(Image ,error ){if _bdf ,_ecgb :=_ggcb .(*Gray4 );_ecgb {return _bdf .Copy (),nil ;};_fafag :=_ggcb .Bounds ();_edf ,_edbc :=NewImage (_fafag .Max .X ,_fafag .Max .Y ,4,1,nil ,nil ,nil );
if _edbc !=nil {return nil ,_edbc ;};_accd (_ggcb ,_edf ,_fafag );return _edf ,nil ;};type Image interface{_e .Image ;Base ()*ImageBase ;Copy ()Image ;Pix ()[]byte ;ColorAt (_bebf ,_cfae int )(_cc .Color ,error );Validate ()error ;};var _ Image =&NRGBA32 {};
func (_eebg *Gray2 )Set (x ,y int ,c _cc .Color ){if x >=_eebg .Width ||y >=_eebg .Height {return ;};_ecf :=Gray2Model .Convert (c ).(_cc .Gray );_gegc :=y *_eebg .BytesPerLine ;_dgfc :=_gegc +(x >>2);_cfeb :=_ecf .Y >>6;_eebg .Data [_dgfc ]=(_eebg .Data [_dgfc ]&(^(0xc0>>uint (2*((x )&3)))))|(_cfeb <<uint (6-2*(x &3)));
};func _bbbf (_aag _fd .Image )(Image ,error ){if _fgb ,_becg :=_aag .(*Gray8 );_becg {return _fgb .Copy (),nil ;};_eegc :=_aag .Bounds ();_cdgd ,_aebb :=NewImage (_eegc .Max .X ,_eegc .Max .Y ,8,1,nil ,nil ,nil );if _aebb !=nil {return nil ,_aebb ;};_accd (_aag ,_cdgd ,_eegc );
return _cdgd ,nil ;};func (_ebac *Monochrome )Set (x ,y int ,c _cc .Color ){_ggc :=y *_ebac .BytesPerLine +x >>3;if _ggc > len (_ebac .Data )-1{return ;};_cgcb :=_ebac .ColorModel ().Convert (c ).(_cc .Gray );_ebac .setGray (x ,_cgcb ,_ggc );};func _ebfe (_bdda _fd .Image ,_fabd Image ,_gdeb _fd .Rectangle ){if _abecf ,_gcab :=_bdda .(SMasker );
_gcab &&_abecf .HasAlpha (){_fabd .(SMasker ).MakeAlpha ();};switch _egeac :=_bdda .(type ){case Gray :_gggf (_egeac ,_fabd .(NRGBA ),_gdeb );case NRGBA :_fdde (_egeac ,_fabd .(NRGBA ),_gdeb );case *_fd .NYCbCrA :_cgacd (_egeac ,_fabd .(NRGBA ),_gdeb );
case CMYK :_bff (_egeac ,_fabd .(NRGBA ),_gdeb );case RGBA :_ggdf (_egeac ,_fabd .(NRGBA ),_gdeb );case nrgba64 :_aafd (_egeac ,_fabd .(NRGBA ),_gdeb );default:_aaf (_bdda ,_fabd ,_gdeb );};};var _ _fd .Image =&Gray8 {};func (_cge *Gray8 )Set (x ,y int ,c _cc .Color ){_cbdg :=y *_cge .BytesPerLine +x ;
if _cbdg > len (_cge .Data )-1{return ;};_cbbb :=_cc .GrayModel .Convert (c );_cge .Data [_cbdg ]=_cbbb .(_cc .Gray ).Y ;};func _gfb (_afdb _fd .Image )(Image ,error ){if _ggda ,_dcc :=_afdb .(*CMYK32 );_dcc {return _ggda .Copy (),nil ;};_egdg :=_afdb .Bounds ();
_dfd ,_bab :=NewImage (_egdg .Max .X ,_egdg .Max .Y ,8,4,nil ,nil ,nil );if _bab !=nil {return nil ,_bab ;};switch _bbaa :=_afdb .(type ){case CMYK :_deag (_bbaa ,_dfd .(CMYK ),_egdg );case Gray :_baf (_bbaa ,_dfd .(CMYK ),_egdg );case NRGBA :_bbc (_bbaa ,_dfd .(CMYK ),_egdg );
case RGBA :_eda (_bbaa ,_dfd .(CMYK ),_egdg );default:_aaf (_afdb ,_dfd ,_egdg );};return _dfd ,nil ;};func ColorAtNRGBA64 (x ,y ,width int ,data ,alpha []byte ,decode []float64 )(_cc .NRGBA64 ,error ){_fdda :=(y *width +x )*2;_gbgb :=_fdda *3;if _gbgb +5>=len (data ){return _cc .NRGBA64 {},_gc .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 _afcec =0xffff;_fedc :=uint16 (_afcec );if alpha !=nil &&len (alpha )> _fdda +1{_fedc =uint16 (alpha [_fdda ])<<8|uint16 (alpha [_fdda +1]);};_badf :=uint16 (data [_gbgb ])<<8|uint16 (data [_gbgb +1]);_ccda :=uint16 (data [_gbgb +2])<<8|uint16 (data [_gbgb +3]);
_gdfac :=uint16 (data [_gbgb +4])<<8|uint16 (data [_gbgb +5]);if len (decode )==6{_badf =uint16 (uint64 (LinearInterpolate (float64 (_badf ),0,65535,decode [0],decode [1]))&_afcec );_ccda =uint16 (uint64 (LinearInterpolate (float64 (_ccda ),0,65535,decode [2],decode [3]))&_afcec );
_gdfac =uint16 (uint64 (LinearInterpolate (float64 (_gdfac ),0,65535,decode [4],decode [5]))&_afcec );};return _cc .NRGBA64 {R :_badf ,G :_ccda ,B :_gdfac ,A :_fedc },nil ;};func (_gcdc *NRGBA32 )Base ()*ImageBase {return &_gcdc .ImageBase };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 BytesPerLine (width ,bitsPerComponent ,colorComponents int )int {return ((width *bitsPerComponent )*colorComponents +7)>>3;};func (_fgd *ImageBase )setByte (_ccdfg int ,_gfbc byte )error {if _ccdfg > len (_fgd .Data )-1{return _c .New ("\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_fgd .Data [_ccdfg ]=_gfbc ;return nil ;};func _ebfdd (_gdgb _fd .Image )(Image ,error ){if _egag ,_bgfdb :=_gdgb .(*NRGBA64 );_bgfdb {return _egag .Copy (),nil ;};_cdaa ,_ebgc ,_bbbfg :=_egdf (_gdgb ,2);_bgdbd ,_ceaf :=NewImage (_cdaa .Max .X ,_cdaa .Max .Y ,16,3,nil ,_bbbfg ,nil );
if _ceaf !=nil {return nil ,_ceaf ;};_deeba (_gdgb ,_bgdbd ,_cdaa );if len (_bbbfg )!=0&&!_ebgc {if _bdcf :=_eaac (_bbbfg ,_bgdbd );_bdcf !=nil {return nil ,_bdcf ;};};return _bgdbd ,nil ;};func (_eafge *Gray2 )Histogram ()(_ebdgg [256]int ){for _ege :=0;
_ege < _eafge .Width ;_ege ++{for _bde :=0;_bde < _eafge .Height ;_bde ++{_ebdgg [_eafge .GrayAt (_ege ,_bde ).Y ]++;};};return _ebdgg ;};func _cgcc (_ccgde _fd .Image )(Image ,error ){if _bgdecd ,_cafb :=_ccgde .(*Gray16 );_cafb {return _bgdecd .Copy (),nil ;
};_ebbe :=_ccgde .Bounds ();_aef ,_gbdf :=NewImage (_ebbe .Max .X ,_ebbe .Max .Y ,16,1,nil ,nil ,nil );if _gbdf !=nil {return nil ,_gbdf ;};_accd (_ccgde ,_aef ,_ebbe );return _aef ,nil ;};func _b (_cd *Monochrome ,_ec int ,_ef []uint )(*Monochrome ,error ){_dd :=_ec *_cd .Width ;
_eae :=_ec *_cd .Height ;_bc :=_ddde (_dd ,_eae );for _ge ,_ae :=range _ef {var _ag error ;switch _ae {case 2:_ag =_be (_bc ,_cd );case 4:_ag =_bd (_bc ,_cd );case 8:_ag =_gd (_bc ,_cd );};if _ag !=nil {return nil ,_ag ;};if _ge !=len (_ef )-1{_cd =_bc .copy ();
};};return _bc ,nil ;};func (_eff *Gray4 )At (x ,y int )_cc .Color {_cgbg ,_ :=_eff .ColorAt (x ,y );return _cgbg };func (_egff *CMYK32 )Copy ()Image {return &CMYK32 {ImageBase :_egff .copy ()}};func _bff (_dagg CMYK ,_aeec NRGBA ,_efaf _fd .Rectangle ){for _agfb :=0;
_agfb < _efaf .Max .X ;_agfb ++{for _aefd :=0;_aefd < _efaf .Max .Y ;_aefd ++{_aabc :=_dagg .CMYKAt (_agfb ,_aefd );_aeec .SetNRGBA (_agfb ,_aefd ,_dffc (_aabc ));};};};type Gray2 struct{ImageBase };func (_cgac *Gray2 )Base ()*ImageBase {return &_cgac .ImageBase };
func (_gdgc *CMYK32 )SetCMYK (x ,y int ,c _cc .CMYK ){_afc :=4*(y *_gdgc .Width +x );if _afc +3>=len (_gdgc .Data ){return ;};_gdgc .Data [_afc ]=c .C ;_gdgc .Data [_afc +1]=c .M ;_gdgc .Data [_afc +2]=c .Y ;_gdgc .Data [_afc +3]=c .K ;};func (_adfe *Gray2 )SetGray (x ,y int ,gray _cc .Gray ){_acb :=_ccbf (gray );
_geee :=y *_adfe .BytesPerLine ;_gac :=_geee +(x >>2);if _gac >=len (_adfe .Data ){return ;};_aaa :=_acb .Y >>6;_adfe .Data [_gac ]=(_adfe .Data [_gac ]&(^(0xc0>>uint (2*((x )&3)))))|(_aaa <<uint (6-2*(x &3)));};func _baa ()(_ffc [256]uint64 ){for _bed :=0;
_bed < 256;_bed ++{if _bed &0x01!=0{_ffc [_bed ]|=0xff;};if _bed &0x02!=0{_ffc [_bed ]|=0xff00;};if _bed &0x04!=0{_ffc [_bed ]|=0xff0000;};if _bed &0x08!=0{_ffc [_bed ]|=0xff000000;};if _bed &0x10!=0{_ffc [_bed ]|=0xff00000000;};if _bed &0x20!=0{_ffc [_bed ]|=0xff0000000000;
};if _bed &0x40!=0{_ffc [_bed ]|=0xff000000000000;};if _bed &0x80!=0{_ffc [_bed ]|=0xff00000000000000;};};return _ffc ;};func _egdf (_gbc _fd .Image ,_fdggf int )(_fd .Rectangle ,bool ,[]byte ){_aade :=_gbc .Bounds ();var (_fbab bool ;_gfbf []byte ;);switch _adfec :=_gbc .(type ){case SMasker :_fbab =_adfec .HasAlpha ();
case NRGBA ,RGBA ,*_fd .RGBA64 ,nrgba64 ,*_fd .NYCbCrA :_gfbf =make ([]byte ,_aade .Max .X *_aade .Max .Y *_fdggf );case *_fd .Paletted :var _ecfg bool ;for _ ,_bfcb :=range _adfec .Palette {_dbf ,_cgfa ,_gega ,_fbbbg :=_bfcb .RGBA ();if _dbf ==0&&_cgfa ==0&&_gega ==0&&_fbbbg !=0{_ecfg =true ;
break ;};};if _ecfg {_gfbf =make ([]byte ,_aade .Max .X *_aade .Max .Y *_fdggf );};};return _aade ,_fbab ,_gfbf ;};func _fgdb (_gcba _fd .Image )(Image ,error ){if _gfeg ,_fgcd :=_gcba .(*NRGBA16 );_fgcd {return _gfeg .Copy (),nil ;};_ggde :=_gcba .Bounds ();
_bcga ,_eacb :=NewImage (_ggde .Max .X ,_ggde .Max .Y ,4,3,nil ,nil ,nil );if _eacb !=nil {return nil ,_eacb ;};_ebfe (_gcba ,_bcga ,_ggde );return _bcga ,nil ;};func _ebdf (_ecce ,_beb Gray ,_ebaf _fd .Rectangle ){for _cebf :=0;_cebf < _ebaf .Max .X ;
_cebf ++{for _befa :=0;_befa < _ebaf .Max .Y ;_befa ++{_beb .SetGray (_cebf ,_befa ,_ecce .GrayAt (_cebf ,_befa ));};};};func _baf (_gcg Gray ,_gad CMYK ,_ddaa _fd .Rectangle ){for _afe :=0;_afe < _ddaa .Max .X ;_afe ++{for _dged :=0;_dged < _ddaa .Max .Y ;
_dged ++{_ebfa :=_gcg .GrayAt (_afe ,_dged );_gad .SetCMYK (_afe ,_dged ,_cdg (_ebfa ));};};};type NRGBA64 struct{ImageBase };func ColorAtGray2BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_cc .Gray ,error ){_adga :=y *bytesPerLine +x >>2;
if _adga >=len (data ){return _cc .Gray {},_gc .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 );
};_fbfe :=data [_adga ]>>uint (6-(x &3)*2)&3;if len (decode )==2{_fbfe =uint8 (uint32 (LinearInterpolate (float64 (_fbfe ),0,3.0,decode [0],decode [1]))&3);};return _cc .Gray {Y :_fbfe *85},nil ;};func (_ecbdc *Gray4 )Validate ()error {if len (_ecbdc .Data )!=_ecbdc .Height *_ecbdc .BytesPerLine {return ErrInvalidImage ;
};return nil ;};func (_deg *Monochrome )IsUnpadded ()bool {return (_deg .Width *_deg .Height )==len (_deg .Data )};func ColorAtGray8BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_cc .Gray ,error ){_faff :=y *bytesPerLine +x ;if _faff >=len (data ){return _cc .Gray {},_gc .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 );
};_dfce :=data [_faff ];if len (decode )==2{_dfce =uint8 (uint32 (LinearInterpolate (float64 (_dfce ),0,255,decode [0],decode [1]))&0xff);};return _cc .Gray {Y :_dfce },nil ;};func (_acae *Monochrome )ResolveDecode ()error {if len (_acae .Decode )!=2{return nil ;
};if _acae .Decode [0]==1&&_acae .Decode [1]==0{if _efce :=_acae .InverseData ();_efce !=nil {return _efce ;};_acae .Decode =nil ;};return nil ;};func _eda (_edb RGBA ,_addb CMYK ,_eeb _fd .Rectangle ){for _fbde :=0;_fbde < _eeb .Max .X ;_fbde ++{for _cdfb :=0;
_cdfb < _eeb .Max .Y ;_cdfb ++{_cbf :=_edb .RGBAAt (_fbde ,_cdfb );_addb .SetCMYK (_fbde ,_cdfb ,_cca (_cbf ));};};};func ColorAtNRGBA (x ,y ,width ,bytesPerLine ,bitsPerColor int ,data ,alpha []byte ,decode []float64 )(_cc .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 ,_gc .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 (_dafg *Gray16 )SetGray (x ,y int ,g _cc .Gray ){_fgf :=(y *_dafg .BytesPerLine /2+x )*2;if _fgf +1>=len (_dafg .Data ){return ;};_dafg .Data [_fgf ]=g .Y ;_dafg .Data [_fgf +1]=g .Y ;};func _cbfe (_dege *Monochrome ,_dcbe ,_efa int ,_aabd ,_bag int ,_fcee RasterOperator ,_cfed *Monochrome ,_gcea ,_adgg int )error {var _fegc ,_cefc ,_ebbd ,_cbge int ;
if _dcbe < 0{_gcea -=_dcbe ;_aabd +=_dcbe ;_dcbe =0;};if _gcea < 0{_dcbe -=_gcea ;_aabd +=_gcea ;_gcea =0;};_fegc =_dcbe +_aabd -_dege .Width ;if _fegc > 0{_aabd -=_fegc ;};_cefc =_gcea +_aabd -_cfed .Width ;if _cefc > 0{_aabd -=_cefc ;};if _efa < 0{_adgg -=_efa ;
_bag +=_efa ;_efa =0;};if _adgg < 0{_efa -=_adgg ;_bag +=_adgg ;_adgg =0;};_ebbd =_efa +_bag -_dege .Height ;if _ebbd > 0{_bag -=_ebbd ;};_cbge =_adgg +_bag -_cfed .Height ;if _cbge > 0{_bag -=_cbge ;};if _aabd <=0||_bag <=0{return nil ;};var _aggd error ;
switch {case _dcbe &7==0&&_gcea &7==0:_aggd =_cagc (_dege ,_dcbe ,_efa ,_aabd ,_bag ,_fcee ,_cfed ,_gcea ,_adgg );case _dcbe &7==_gcea &7:_aggd =_aeef (_dege ,_dcbe ,_efa ,_aabd ,_bag ,_fcee ,_cfed ,_gcea ,_adgg );default:_aggd =_adagc (_dege ,_dcbe ,_efa ,_aabd ,_bag ,_fcee ,_cfed ,_gcea ,_adgg );
};if _aggd !=nil {return _aggd ;};return nil ;};func (_dac *Gray2 )Copy ()Image {return &Gray2 {ImageBase :_dac .copy ()}};func _cgacd (_eacf *_fd .NYCbCrA ,_ebfac NRGBA ,_adgb _fd .Rectangle ){for _feef :=0;_feef < _adgb .Max .X ;_feef ++{for _febb :=0;
_febb < _adgb .Max .Y ;_febb ++{_fagga :=_eacf .NYCbCrAAt (_feef ,_febb );_ebfac .SetNRGBA (_feef ,_febb ,_gdge (_fagga ));};};};type NRGBA interface{NRGBAAt (_agcc ,_gdc int )_cc .NRGBA ;SetNRGBA (_cbec ,_fbbb int ,_dacg _cc .NRGBA );};func (_ddae *Gray2 )GrayAt (x ,y int )_cc .Gray {_edbe ,_ :=ColorAtGray2BPC (x ,y ,_ddae .BytesPerLine ,_ddae .Data ,_ddae .Decode );
return _edbe ;};func (_adcg *NRGBA16 )At (x ,y int )_cc .Color {_gae ,_ :=_adcg .ColorAt (x ,y );return _gae };func (_egbf *ImageBase )setFourBytes (_bafg int ,_bede uint32 )error {if _bafg +3> len (_egbf .Data )-1{return _gc .Errorf ("\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_bafg );
};_egbf .Data [_bafg ]=byte ((_bede &0xff000000)>>24);_egbf .Data [_bafg +1]=byte ((_bede &0xff0000)>>16);_egbf .Data [_bafg +2]=byte ((_bede &0xff00)>>8);_egbf .Data [_bafg +3]=byte (_bede &0xff);return nil ;};var _ Gray =&Gray4 {};func ColorAtGray4BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_cc .Gray ,error ){_agfc :=y *bytesPerLine +x >>1;
if _agfc >=len (data ){return _cc .Gray {},_gc .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 );
};_edgf :=data [_agfc ]>>uint (4-(x &1)*4)&0xf;if len (decode )==2{_edgf =uint8 (uint32 (LinearInterpolate (float64 (_edgf ),0,15,decode [0],decode [1]))&0xf);};return _cc .Gray {Y :_edgf *17&0xff},nil ;};type monochromeModel uint8 ;func _fedb (_bdgd _cc .RGBA )_cc .NRGBA {switch _bdgd .A {case 0xff:return _cc .NRGBA {R :_bdgd .R ,G :_bdgd .G ,B :_bdgd .B ,A :0xff};
case 0x00:return _cc .NRGBA {};default:_gabea ,_ggaf ,_eddg ,_dbc :=_bdgd .RGBA ();_gabea =(_gabea *0xffff)/_dbc ;_ggaf =(_ggaf *0xffff)/_dbc ;_eddg =(_eddg *0xffff)/_dbc ;return _cc .NRGBA {R :uint8 (_gabea >>8),G :uint8 (_ggaf >>8),B :uint8 (_eddg >>8),A :uint8 (_dbc >>8)};
};};type shift int ;func _deag (_ecd ,_gabe CMYK ,_dad _fd .Rectangle ){for _ebdg :=0;_ebdg < _dad .Max .X ;_ebdg ++{for _bdaa :=0;_bdaa < _dad .Max .Y ;_bdaa ++{_gabe .SetCMYK (_ebdg ,_bdaa ,_ecd .CMYKAt (_ebdg ,_bdaa ));};};};func _fdba (_gabbf int ,_gebe int )error {return _gc .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",_gabbf ,_gebe );
};func (_ccfc *CMYK32 )At (x ,y int )_cc .Color {_agb ,_ :=_ccfc .ColorAt (x ,y );return _agb };func (_gabeg *ImageBase )newAlpha (){_aecg :=BytesPerLine (_gabeg .Width ,_gabeg .BitsPerComponent ,1);_gabeg .Alpha =make ([]byte ,_gabeg .Height *_aecg );
};func (_bgbb colorConverter )Convert (src _fd .Image )(Image ,error ){return _bgbb ._efd (src )};func (_dbe *Monochrome )Bounds ()_fd .Rectangle {return _fd .Rectangle {Max :_fd .Point {X :_dbe .Width ,Y :_dbe .Height }};};func (_bbef *NRGBA16 )Bounds ()_fd .Rectangle {return _fd .Rectangle {Max :_fd .Point {X :_bbef .Width ,Y :_bbef .Height }};
};func _egdb (_cdeb ,_efeg ,_bfed byte )byte {return (_cdeb &^(_bfed ))|(_efeg &_bfed )};var _ _fd .Image =&Gray16 {};func NewImage (width ,height ,bitsPerComponent ,colorComponents int ,data ,alpha []byte ,decode []float64 )(Image ,error ){_gdbe :=NewImageBase (width ,height ,bitsPerComponent ,colorComponents ,data ,alpha ,decode );
var _dbb Image ;switch colorComponents {case 1:switch bitsPerComponent {case 1:_dbb =&Monochrome {ImageBase :_gdbe ,ModelThreshold :0x0f};case 2:_dbb =&Gray2 {ImageBase :_gdbe };case 4:_dbb =&Gray4 {ImageBase :_gdbe };case 8:_dbb =&Gray8 {ImageBase :_gdbe };
case 16:_dbb =&Gray16 {ImageBase :_gdbe };};case 3:switch bitsPerComponent {case 4:_dbb =&NRGBA16 {ImageBase :_gdbe };case 8:_dbb =&NRGBA32 {ImageBase :_gdbe };case 16:_dbb =&NRGBA64 {ImageBase :_gdbe };};case 4:_dbb =&CMYK32 {ImageBase :_gdbe };};if _dbb ==nil {return nil ,ErrInvalidImage ;
};return _dbb ,nil ;};func _afg (_fdg _cc .NRGBA )_cc .Gray {var _aea _cc .NRGBA ;if _fdg ==_aea {return _cc .Gray {Y :0xff};};_bce ,_defdd ,_faf ,_ :=_fdg .RGBA ();_decg :=(19595*_bce +38470*_defdd +7471*_faf +1<<15)>>24;return _cc .Gray {Y :uint8 (_decg )};
};type monochromeThresholdConverter struct{Threshold uint8 ;};const (_fgba shift =iota ;_dggg ;);var (Gray2Model =_cc .ModelFunc (_abe );Gray4Model =_cc .ModelFunc (_efdg );NRGBA16Model =_cc .ModelFunc (_aafc ););func _bd (_def ,_ba *Monochrome )(_gee error ){_defd :=_ba .BytesPerLine ;
_ccb :=_def .BytesPerLine ;_ca :=_ba .BytesPerLine *4-_def .BytesPerLine ;var (_ed ,_eag byte ;_bf uint32 ;_dc ,_ac ,_caa ,_eg ,_geb ,_cad ,_fg int ;);for _caa =0;_caa < _ba .Height ;_caa ++{_dc =_caa *_defd ;_ac =4*_caa *_ccb ;for _eg =0;_eg < _defd ;
_eg ++{_ed =_ba .Data [_dc +_eg ];_bf =_gba [_ed ];_cad =_ac +_eg *4;if _ca !=0&&(_eg +1)*4> _def .BytesPerLine {for _geb =_ca ;_geb > 0;_geb --{_eag =byte ((_bf >>uint (_geb *8))&0xff);_fg =_cad +(_ca -_geb );if _gee =_def .setByte (_fg ,_eag );_gee !=nil {return _gee ;
};};}else if _gee =_def .setFourBytes (_cad ,_bf );_gee !=nil {return _gee ;};if _gee =_def .setFourBytes (_ac +_eg *4,_gba [_ba .Data [_dc +_eg ]]);_gee !=nil {return _gee ;};};for _geb =1;_geb < 4;_geb ++{for _eg =0;_eg < _ccb ;_eg ++{if _gee =_def .setByte (_ac +_geb *_ccb +_eg ,_def .Data [_ac +_eg ]);
_gee !=nil {return _gee ;};};};};return nil ;};var _ Gray =&Gray8 {};type Gray16 struct{ImageBase };var _ Gray =&Monochrome {};func (_ecae *NRGBA32 )Set (x ,y int ,c _cc .Color ){_eecc :=y *_ecae .Width +x ;_afgg :=3*_eecc ;if _afgg +2>=len (_ecae .Data ){return ;
};_eed :=_cc .NRGBAModel .Convert (c ).(_cc .NRGBA );_ecae .setRGBA (_eecc ,_eed );};var _ _fd .Image =&NRGBA32 {};func _cfb (_cfba ,_eec *Monochrome ,_bdgg []byte ,_bgde int )(_adaf error ){var (_gdf ,_bea ,_acf ,_ddf ,_deb ,_egb ,_egcb ,_adfb int ;_bcg ,_ggec ,_cae ,_fba uint32 ;
_bgdb ,_ccgg byte ;_fdag uint16 ;);_eee :=make ([]byte ,4);_ccgcg :=make ([]byte ,4);for _acf =0;_acf < _cfba .Height -1;_acf ,_ddf =_acf +2,_ddf +1{_gdf =_acf *_cfba .BytesPerLine ;_bea =_ddf *_eec .BytesPerLine ;for _deb ,_egb =0,0;_deb < _bgde ;_deb ,_egb =_deb +4,_egb +1{for _egcb =0;
_egcb < 4;_egcb ++{_adfb =_gdf +_deb +_egcb ;if _adfb <=len (_cfba .Data )-1&&_adfb < _gdf +_cfba .BytesPerLine {_eee [_egcb ]=_cfba .Data [_adfb ];}else {_eee [_egcb ]=0x00;};_adfb =_gdf +_cfba .BytesPerLine +_deb +_egcb ;if _adfb <=len (_cfba .Data )-1&&_adfb < _gdf +(2*_cfba .BytesPerLine ){_ccgcg [_egcb ]=_cfba .Data [_adfb ];
}else {_ccgcg [_egcb ]=0x00;};};_bcg =_a .BigEndian .Uint32 (_eee );_ggec =_a .BigEndian .Uint32 (_ccgcg );_cae =_bcg &_ggec ;_cae |=_cae <<1;_fba =_bcg |_ggec ;_fba &=_fba <<1;_ggec =_cae &_fba ;_ggec &=0xaaaaaaaa;_bcg =_ggec |(_ggec <<7);_bgdb =byte (_bcg >>24);
_ccgg =byte ((_bcg >>8)&0xff);_adfb =_bea +_egb ;if _adfb +1==len (_eec .Data )-1||_adfb +1>=_bea +_eec .BytesPerLine {if _adaf =_eec .setByte (_adfb ,_bdgg [_bgdb ]);_adaf !=nil {return _gc .Errorf ("\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_adfb );
};}else {_fdag =(uint16 (_bdgg [_bgdb ])<<8)|uint16 (_bdgg [_ccgg ]);if _adaf =_eec .setTwoBytes (_adfb ,_fdag );_adaf !=nil {return _gc .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",_adfb );
};_egb ++;};};};return nil ;};func (_gbd *Monochrome )ScaleLow (width ,height int )(*Monochrome ,error ){if width < 0||height < 0{return nil ,_c .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");
};_fcb :=_ddde (width ,height );_agef :=make ([]int ,height );_ebb :=make ([]int ,width );_afee :=float64 (_gbd .Width )/float64 (width );_cgcf :=float64 (_gbd .Height )/float64 (height );for _cfdg :=0;_cfdg < height ;_cfdg ++{_agef [_cfdg ]=int (_g .Min (_cgcf *float64 (_cfdg )+0.5,float64 (_gbd .Height -1)));
};for _decd :=0;_decd < width ;_decd ++{_ebb [_decd ]=int (_g .Min (_afee *float64 (_decd )+0.5,float64 (_gbd .Width -1)));};_gdec :=-1;_fdcf :=byte (0);for _gef :=0;_gef < height ;_gef ++{_acgd :=_agef [_gef ]*_gbd .BytesPerLine ;_dddaf :=_gef *_fcb .BytesPerLine ;
for _daeg :=0;_daeg < width ;_daeg ++{_beeg :=_ebb [_daeg ];if _beeg !=_gdec {_fdcf =_gbd .getBit (_acgd ,_beeg );if _fdcf !=0{_fcb .setBit (_dddaf ,_daeg );};_gdec =_beeg ;}else {if _fdcf !=0{_fcb .setBit (_dddaf ,_daeg );};};};};return _fcb ,nil ;};func (_aaef *CMYK32 )Validate ()error {if len (_aaef .Data )!=4*_aaef .Width *_aaef .Height {return _c .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 (_dgg =_ab ();_gba =_bgb ();_cf =_baa (););var _ _fd .Image =&Gray2 {};func _agag (_eabe ,_gcee uint8 )uint8 {if _eabe < _gcee {return 255;};return 0;};func (_gbfc *NRGBA64 )ColorModel ()_cc .Model {return _cc .NRGBA64Model };func _aafc (_aeac _cc .Color )_cc .Color {_fgedc :=_cc .NRGBAModel .Convert (_aeac ).(_cc .NRGBA );
return _edde (_fgedc );};func (_gfgc *Gray4 )Bounds ()_fd .Rectangle {return _fd .Rectangle {Max :_fd .Point {X :_gfgc .Width ,Y :_gfgc .Height }};};func _gbff (_fcce _cc .Gray ,_aebd monochromeModel )_cc .Gray {if _fcce .Y > uint8 (_aebd ){return _cc .Gray {Y :_g .MaxUint8 };
};return _cc .Gray {};};func (_gbac *Gray16 )Copy ()Image {return &Gray16 {ImageBase :_gbac .copy ()}};func _cca (_eea _cc .RGBA )_cc .CMYK {_ded ,_cbcf ,_gdd ,_agf :=_cc .RGBToCMYK (_eea .R ,_eea .G ,_eea .B );return _cc .CMYK {C :_ded ,M :_cbcf ,Y :_gdd ,K :_agf };
};func _ggdf (_cbgbc RGBA ,_ccge NRGBA ,_cfdc _fd .Rectangle ){for _efae :=0;_efae < _cfdc .Max .X ;_efae ++{for _dccc :=0;_dccc < _cfdc .Max .Y ;_dccc ++{_bdea :=_cbgbc .RGBAAt (_efae ,_dccc );_ccge .SetNRGBA (_efae ,_dccc ,_fedb (_bdea ));};};};var _ _fd .Image =&NRGBA16 {};
func _aae (_ebd *Monochrome ,_ecba ...int )(_bdg *Monochrome ,_dde error ){if _ebd ==nil {return nil ,_c .New ("\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_ecba )==0{return nil ,_c .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");
};_ace :=_caae ();_bdg =_ebd ;for _ ,_aab :=range _ecba {if _aab <=0{break ;};_bdg ,_dde =_dddg (_bdg ,_aab ,_ace );if _dde !=nil {return nil ,_dde ;};};return _bdg ,nil ;};func _gdge (_cbca _cc .NYCbCrA )_cc .NRGBA {_bcf :=int32 (_cbca .Y )*0x10101;_gfgg :=int32 (_cbca .Cb )-128;
_eaec :=int32 (_cbca .Cr )-128;_eaeg :=_bcf +91881*_eaec ;if uint32 (_eaeg )&0xff000000==0{_eaeg >>=8;}else {_eaeg =^(_eaeg >>31)&0xffff;};_cga :=_bcf -22554*_gfgg -46802*_eaec ;if uint32 (_cga )&0xff000000==0{_cga >>=8;}else {_cga =^(_cga >>31)&0xffff;
};_bfd :=_bcf +116130*_gfgg ;if uint32 (_bfd )&0xff000000==0{_bfd >>=8;}else {_bfd =^(_bfd >>31)&0xffff;};return _cc .NRGBA {R :uint8 (_eaeg >>8),G :uint8 (_cga >>8),B :uint8 (_bfd >>8),A :_cbca .A };};func (_cceg *Gray8 )ColorAt (x ,y int )(_cc .Color ,error ){return ColorAtGray8BPC (x ,y ,_cceg .BytesPerLine ,_cceg .Data ,_cceg .Decode );
};func AutoThresholdTriangle (histogram [256]int )uint8 {var _gfcg ,_eebc ,_dddb ,_cadd int ;for _adfeg :=0;_adfeg < len (histogram );_adfeg ++{if histogram [_adfeg ]> 0{_gfcg =_adfeg ;break ;};};if _gfcg > 0{_gfcg --;};for _abca :=255;_abca > 0;_abca --{if histogram [_abca ]> 0{_cadd =_abca ;
break ;};};if _cadd < 255{_cadd ++;};for _fadb :=0;_fadb < 256;_fadb ++{if histogram [_fadb ]> _eebc {_dddb =_fadb ;_eebc =histogram [_fadb ];};};var _feea bool ;if (_dddb -_gfcg )< (_cadd -_dddb ){_feea =true ;var _aadg int ;_feeb :=255;for _aadg < _feeb {_fdab :=histogram [_aadg ];
histogram [_aadg ]=histogram [_feeb ];histogram [_feeb ]=_fdab ;_aadg ++;_feeb --;};_gfcg =255-_cadd ;_dddb =255-_dddb ;};if _gfcg ==_dddb {return uint8 (_gfcg );};_cdeg :=float64 (histogram [_dddb ]);_aac :=float64 (_gfcg -_dddb );_ebfba :=_g .Sqrt (_cdeg *_cdeg +_aac *_aac );
_cdeg /=_ebfba ;_aac /=_ebfba ;_ebfba =_cdeg *float64 (_gfcg )+_aac *float64 (histogram [_gfcg ]);_cfbd :=_gfcg ;var _cbcaf float64 ;for _ceeb :=_gfcg +1;_ceeb <=_dddb ;_ceeb ++{_bbde :=_cdeg *float64 (_ceeb )+_aac *float64 (histogram [_ceeb ])-_ebfba ;
if _bbde > _cbcaf {_cfbd =_ceeb ;_cbcaf =_bbde ;};};_cfbd --;if _feea {var _cdag int ;_eeaa :=255;for _cdag < _eeaa {_baae :=histogram [_cdag ];histogram [_cdag ]=histogram [_eeaa ];histogram [_eeaa ]=_baae ;_cdag ++;_eeaa --;};return uint8 (255-_cfbd );
};return uint8 (_cfbd );};var _ Image =&Gray4 {};func _ddde (_bcb ,_ebab int )*Monochrome {return &Monochrome {ImageBase :NewImageBase (_bcb ,_ebab ,1,1,nil ,nil ,nil ),ModelThreshold :0x0f};};func (_cffe *ImageBase )MakeAlpha (){_cffe .newAlpha ()};func (_daag *NRGBA32 )NRGBAAt (x ,y int )_cc .NRGBA {_dbcf ,_ :=ColorAtNRGBA32 (x ,y ,_daag .Width ,_daag .Data ,_daag .Alpha ,_daag .Decode );
return _dbcf ;};func ScaleAlphaToMonochrome (data []byte ,width ,height int )([]byte ,error ){_ee :=BytesPerLine (width ,8,1);if len (data )< _ee *height {return nil ,nil ;};_ad :=&Gray8 {NewImageBase (width ,height ,8,1,data ,nil ,nil )};_ea ,_fe :=MonochromeConverter .Convert (_ad );
if _fe !=nil {return nil ,_fe ;};return _ea .Base ().Data ,nil ;};func (_fgcb *Gray4 )GrayAt (x ,y int )_cc .Gray {_gbaa ,_ :=ColorAtGray4BPC (x ,y ,_fgcb .BytesPerLine ,_fgcb .Data ,_fgcb .Decode );return _gbaa ;};func (_ffbd *NRGBA64 )setNRGBA64 (_bgfgc int ,_dfba _cc .NRGBA64 ,_cegc int ){_ffbd .Data [_bgfgc ]=uint8 (_dfba .R >>8);
_ffbd .Data [_bgfgc +1]=uint8 (_dfba .R &0xff);_ffbd .Data [_bgfgc +2]=uint8 (_dfba .G >>8);_ffbd .Data [_bgfgc +3]=uint8 (_dfba .G &0xff);_ffbd .Data [_bgfgc +4]=uint8 (_dfba .B >>8);_ffbd .Data [_bgfgc +5]=uint8 (_dfba .B &0xff);if _cegc +1< len (_ffbd .Alpha ){_ffbd .Alpha [_cegc ]=uint8 (_dfba .A >>8);
_ffbd .Alpha [_cegc +1]=uint8 (_dfba .A &0xff);};};type Gray4 struct{ImageBase };func _abae (_dddc *Monochrome ,_efec ,_gded int ,_fbcf ,_debgg int ,_acce RasterOperator ){var (_efdb int ;_eab byte ;_gaaa ,_bggb int ;_gabf int ;);_bebff :=_fbcf >>3;_cedd :=_fbcf &7;
if _cedd > 0{_eab =_acab [_cedd ];};_efdb =_dddc .BytesPerLine *_gded +(_efec >>3);switch _acce {case PixClr :for _gaaa =0;_gaaa < _debgg ;_gaaa ++{_gabf =_efdb +_gaaa *_dddc .BytesPerLine ;for _bggb =0;_bggb < _bebff ;_bggb ++{_dddc .Data [_gabf ]=0x0;
_gabf ++;};if _cedd > 0{_dddc .Data [_gabf ]=_egdb (_dddc .Data [_gabf ],0x0,_eab );};};case PixSet :for _gaaa =0;_gaaa < _debgg ;_gaaa ++{_gabf =_efdb +_gaaa *_dddc .BytesPerLine ;for _bggb =0;_bggb < _bebff ;_bggb ++{_dddc .Data [_gabf ]=0xff;_gabf ++;
};if _cedd > 0{_dddc .Data [_gabf ]=_egdb (_dddc .Data [_gabf ],0xff,_eab );};};case PixNotDst :for _gaaa =0;_gaaa < _debgg ;_gaaa ++{_gabf =_efdb +_gaaa *_dddc .BytesPerLine ;for _bggb =0;_bggb < _bebff ;_bggb ++{_dddc .Data [_gabf ]=^_dddc .Data [_gabf ];
_gabf ++;};if _cedd > 0{_dddc .Data [_gabf ]=_egdb (_dddc .Data [_gabf ],^_dddc .Data [_gabf ],_eab );};};};};func (_ecde *Gray16 )ColorAt (x ,y int )(_cc .Color ,error ){return ColorAtGray16BPC (x ,y ,_ecde .BytesPerLine ,_ecde .Data ,_ecde .Decode );
};func ColorAt (x ,y ,width ,bitsPerColor ,colorComponents ,bytesPerLine int ,data ,alpha []byte ,decode []float64 )(_cc .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 ,_gc .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 );
};};func (_abcf *NRGBA32 )ColorModel ()_cc .Model {return _cc .NRGBAModel };func _ccbf (_befc _cc .Gray )_cc .Gray {_adag :=_befc .Y >>6;_adag |=_adag <<2;_befc .Y =_adag |_adag <<4;return _befc ;};type nrgba64 interface{NRGBA64At (_bege ,_ffad int )_cc .NRGBA64 ;
SetNRGBA64 (_eddf ,_dgdf int ,_gefd _cc .NRGBA64 );};func _ecdd (_fceeg _fd .Image ,_cbff uint8 )*_fd .Gray {_ecfe :=_fceeg .Bounds ();_aeea :=_fd .NewGray (_ecfe );var (_aedb _cc .Color ;_faad _cc .Gray ;);for _fgee :=0;_fgee < _ecfe .Max .X ;_fgee ++{for _ebabg :=0;
_ebabg < _ecfe .Max .Y ;_ebabg ++{_aedb =_fceeg .At (_fgee ,_ebabg );_aeea .Set (_fgee ,_ebabg ,_aedb );_faad =_aeea .GrayAt (_fgee ,_ebabg );_aeea .SetGray (_fgee ,_ebabg ,_cc .Gray {Y :_agag (_faad .Y ,_cbff )});};};return _aeea ;};func (_fde *Monochrome )GrayAt (x ,y int )_cc .Gray {_egffg ,_ :=ColorAtGray1BPC (x ,y ,_fde .BytesPerLine ,_fde .Data ,_fde .Decode );
return _egffg ;};func (_caee *Gray2 )Bounds ()_fd .Rectangle {return _fd .Rectangle {Max :_fd .Point {X :_caee .Width ,Y :_caee .Height }};};func _eefd (_fcc ,_cfg *Monochrome ,_cdb []byte ,_fga int )(_bgg error ){var (_cada ,_cgg ,_beed ,_fag ,_bcab ,_fbc ,_dcf ,_gg int ;
_ecbd ,_gcb uint32 ;_ga ,_daed byte ;_aeba uint16 ;);_eaa :=make ([]byte ,4);_dea :=make ([]byte ,4);for _beed =0;_beed < _fcc .Height -1;_beed ,_fag =_beed +2,_fag +1{_cada =_beed *_fcc .BytesPerLine ;_cgg =_fag *_cfg .BytesPerLine ;for _bcab ,_fbc =0,0;
_bcab < _fga ;_bcab ,_fbc =_bcab +4,_fbc +1{for _dcf =0;_dcf < 4;_dcf ++{_gg =_cada +_bcab +_dcf ;if _gg <=len (_fcc .Data )-1&&_gg < _cada +_fcc .BytesPerLine {_eaa [_dcf ]=_fcc .Data [_gg ];}else {_eaa [_dcf ]=0x00;};_gg =_cada +_fcc .BytesPerLine +_bcab +_dcf ;
if _gg <=len (_fcc .Data )-1&&_gg < _cada +(2*_fcc .BytesPerLine ){_dea [_dcf ]=_fcc .Data [_gg ];}else {_dea [_dcf ]=0x00;};};_ecbd =_a .BigEndian .Uint32 (_eaa );_gcb =_a .BigEndian .Uint32 (_dea );_gcb |=_ecbd ;_gcb |=_gcb <<1;_gcb &=0xaaaaaaaa;_ecbd =_gcb |(_gcb <<7);
_ga =byte (_ecbd >>24);_daed =byte ((_ecbd >>8)&0xff);_gg =_cgg +_fbc ;if _gg +1==len (_cfg .Data )-1||_gg +1>=_cgg +_cfg .BytesPerLine {_cfg .Data [_gg ]=_cdb [_ga ];}else {_aeba =(uint16 (_cdb [_ga ])<<8)|uint16 (_cdb [_daed ]);if _bgg =_cfg .setTwoBytes (_gg ,_aeba );
_bgg !=nil {return _gc .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",_gg );};_fbc ++;};};};return nil ;
};func _ceb (_cgdc _cc .CMYK )_cc .Gray {_ccc ,_fdf ,_gcgc :=_cc .CMYKToRGB (_cgdc .C ,_cgdc .M ,_cgdc .Y ,_cgdc .K );_ebcb :=(19595*uint32 (_ccc )+38470*uint32 (_fdf )+7471*uint32 (_gcgc )+1<<7)>>16;return _cc .Gray {Y :uint8 (_ebcb )};};func _fdde (_gbcaa ,_ggdg NRGBA ,_cgafa _fd .Rectangle ){for _becb :=0;
_becb < _cgafa .Max .X ;_becb ++{for _bfge :=0;_bfge < _cgafa .Max .Y ;_bfge ++{_ggdg .SetNRGBA (_becb ,_bfge ,_gbcaa .NRGBAAt (_becb ,_bfge ));};};};func (_fedg *Gray8 )Base ()*ImageBase {return &_fedg .ImageBase };func (_bba *CMYK32 )Bounds ()_fd .Rectangle {return _fd .Rectangle {Max :_fd .Point {X :_bba .Width ,Y :_bba .Height }};
};func ConverterFunc (converterFunc func (_db _fd .Image )(Image ,error ))ColorConverter {return colorConverter {_efd :converterFunc };};type CMYK interface{CMYKAt (_dda ,_ede int )_cc .CMYK ;SetCMYK (_gcd ,_dgde int ,_ced _cc .CMYK );};func _bgggg (_gbfd *_fd .Gray )bool {for _efb :=0;
_efb < len (_gbfd .Pix );_efb ++{if !_bdab (_gbfd .Pix [_efb ]){return false ;};};return true ;};func (_cgdd *Gray4 )SetGray (x ,y int ,g _cc .Gray ){if x >=_cgdd .Width ||y >=_cgdd .Height {return ;};g =_adgf (g );_cgdd .setGray (x ,y ,g );};func _caae ()(_ceg []byte ){_ceg =make ([]byte ,256);
for _ebad :=0;_ebad < 256;_ebad ++{_ccf :=byte (_ebad );_ceg [_ccf ]=(_ccf &0x01)|((_ccf &0x04)>>1)|((_ccf &0x10)>>2)|((_ccf &0x40)>>3)|((_ccf &0x02)<<3)|((_ccf &0x08)<<2)|((_ccf &0x20)<<1)|(_ccf &0x80);};return _ceg ;};func GrayHistogram (g Gray )(_eedg [256]int ){switch _fadbc :=g .(type ){case Histogramer :return _fadbc .Histogram ();
case _fd .Image :_dcd :=_fadbc .Bounds ();for _bccc :=0;_bccc < _dcd .Max .X ;_bccc ++{for _egg :=0;_egg < _dcd .Max .Y ;_egg ++{_eedg [g .GrayAt (_bccc ,_egg ).Y ]++;};};return _eedg ;default:return [256]int {};};};func (_bbcfgd *NRGBA32 )ColorAt (x ,y int )(_cc .Color ,error ){return ColorAtNRGBA32 (x ,y ,_bbcfgd .Width ,_bbcfgd .Data ,_bbcfgd .Alpha ,_bbcfgd .Decode );
};func (_aefc *ImageBase )setEightPartlyBytes (_fafagg ,_feee int ,_ceae uint64 )(_cacc error ){var (_acda byte ;_ccdb int ;);for _dgeg :=1;_dgeg <=_feee ;_dgeg ++{_ccdb =64-_dgeg *8;_acda =byte (_ceae >>uint (_ccdb )&0xff);if _cacc =_aefc .setByte (_fafagg +_dgeg -1,_acda );
_cacc !=nil {return _cacc ;};};_dab :=_aefc .BytesPerLine *8-_aefc .Width ;if _dab ==0{return nil ;};_ccdb -=8;_acda =byte (_ceae >>uint (_ccdb )&0xff)<<uint (_dab );if _cacc =_aefc .setByte (_fafagg +_feee ,_acda );_cacc !=nil {return _cacc ;};return nil ;
};func (_ebgf *NRGBA32 )setRGBA (_dbcc int ,_gdaf _cc .NRGBA ){_bdec :=3*_dbcc ;_ebgf .Data [_bdec ]=_gdaf .R ;_ebgf .Data [_bdec +1]=_gdaf .G ;_ebgf .Data [_bdec +2]=_gdaf .B ;if _dbcc < len (_ebgf .Alpha ){_ebgf .Alpha [_dbcc ]=_gdaf .A ;};};var _ NRGBA =&NRGBA32 {};
func ImgToGray (i _fd .Image )*_fd .Gray {if _aecff ,_beca :=i .(*_fd .Gray );_beca {return _aecff ;};_adfbg :=i .Bounds ();_dacc :=_fd .NewGray (_adfbg );for _gbacd :=0;_gbacd < _adfbg .Max .X ;_gbacd ++{for _gefe :=0;_gefe < _adfbg .Max .Y ;_gefe ++{_dfcb :=i .At (_gbacd ,_gefe );
_dacc .Set (_gbacd ,_gefe ,_dfcb );};};return _dacc ;};func (_bged *ImageBase )copy ()ImageBase {_cbdd :=*_bged ;_cbdd .Data =make ([]byte ,len (_bged .Data ));copy (_cbdd .Data ,_bged .Data );return _cbdd ;};type RGBA interface{RGBAAt (_ccfcf ,_bgcf int )_cc .RGBA ;
SetRGBA (_fgfg ,_bgfg int ,_afgd _cc .RGBA );};func _aaf (_cfa _fd .Image ,_cbcb Image ,_abdc _fd .Rectangle ){for _ddc :=0;_ddc < _abdc .Max .X ;_ddc ++{for _gcgf :=0;_gcgf < _abdc .Max .Y ;_gcgf ++{_fee :=_cfa .At (_ddc ,_gcgf );_cbcb .Set (_ddc ,_gcgf ,_fee );
};};};func _debe (_fcec _cc .RGBA )_cc .Gray {_bgf :=(19595*uint32 (_fcec .R )+38470*uint32 (_fcec .G )+7471*uint32 (_fcec .B )+1<<7)>>16;return _cc .Gray {Y :uint8 (_bgf )};};func _adagc (_abg *Monochrome ,_ceggf ,_fede ,_bfdbd ,_bgbd int ,_gcae RasterOperator ,_afgc *Monochrome ,_fege ,_acee int )error {var (_bbcfg bool ;
_gafc bool ;_gebf byte ;_cffb int ;_cefb int ;_bfea int ;_agbd int ;_gabd bool ;_dfac int ;_gdbab int ;_ccde int ;_gdea bool ;_ggcd byte ;_ccca int ;_abfd int ;_eaedb int ;_ebfae byte ;_dfdf int ;_ecgba int ;_agbf uint ;_gece uint ;_dbaac byte ;_dgb shift ;
_adgfa bool ;_cgde bool ;_cbbbf ,_abba int ;);if _fege &7!=0{_ecgba =8-(_fege &7);};if _ceggf &7!=0{_cefb =8-(_ceggf &7);};if _ecgba ==0&&_cefb ==0{_dbaac =_gagde [0];}else {if _cefb > _ecgba {_agbf =uint (_cefb -_ecgba );}else {_agbf =uint (8-(_ecgba -_cefb ));
};_gece =8-_agbf ;_dbaac =_gagde [_agbf ];};if (_ceggf &7)!=0{_bbcfg =true ;_cffb =8-(_ceggf &7);_gebf =_gagde [_cffb ];_bfea =_abg .BytesPerLine *_fede +(_ceggf >>3);_agbd =_afgc .BytesPerLine *_acee +(_fege >>3);_dfdf =8-(_fege &7);if _cffb > _dfdf {_dgb =_fgba ;
if _bfdbd >=_ecgba {_adgfa =true ;};}else {_dgb =_dggg ;};};if _bfdbd < _cffb {_gafc =true ;_gebf &=_acab [8-_cffb +_bfdbd ];};if !_gafc {_dfac =(_bfdbd -_cffb )>>3;if _dfac !=0{_gabd =true ;_gdbab =_abg .BytesPerLine *_fede +((_ceggf +_cefb )>>3);_ccde =_afgc .BytesPerLine *_acee +((_fege +_cefb )>>3);
};};_ccca =(_ceggf +_bfdbd )&7;if !(_gafc ||_ccca ==0){_gdea =true ;_ggcd =_acab [_ccca ];_abfd =_abg .BytesPerLine *_fede +((_ceggf +_cefb )>>3)+_dfac ;_eaedb =_afgc .BytesPerLine *_acee +((_fege +_cefb )>>3)+_dfac ;if _ccca > int (_gece ){_cgde =true ;
};};switch _gcae {case PixSrc :if _bbcfg {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{if _dgb ==_fgba {_ebfae =_afgc .Data [_agbd ]<<_agbf ;if _adgfa {_ebfae =_egdb (_ebfae ,_afgc .Data [_agbd +1]>>_gece ,_dbaac );};}else {_ebfae =_afgc .Data [_agbd ]>>_gece ;
};_abg .Data [_bfea ]=_egdb (_abg .Data [_bfea ],_ebfae ,_gebf );_bfea +=_abg .BytesPerLine ;_agbd +=_afgc .BytesPerLine ;};};if _gabd {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{for _abba =0;_abba < _dfac ;_abba ++{_ebfae =_egdb (_afgc .Data [_ccde +_abba ]<<_agbf ,_afgc .Data [_ccde +_abba +1]>>_gece ,_dbaac );
_abg .Data [_gdbab +_abba ]=_ebfae ;};_gdbab +=_abg .BytesPerLine ;_ccde +=_afgc .BytesPerLine ;};};if _gdea {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{_ebfae =_afgc .Data [_eaedb ]<<_agbf ;if _cgde {_ebfae =_egdb (_ebfae ,_afgc .Data [_eaedb +1]>>_gece ,_dbaac );
};_abg .Data [_abfd ]=_egdb (_abg .Data [_abfd ],_ebfae ,_ggcd );_abfd +=_abg .BytesPerLine ;_eaedb +=_afgc .BytesPerLine ;};};case PixNotSrc :if _bbcfg {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{if _dgb ==_fgba {_ebfae =_afgc .Data [_agbd ]<<_agbf ;if _adgfa {_ebfae =_egdb (_ebfae ,_afgc .Data [_agbd +1]>>_gece ,_dbaac );
};}else {_ebfae =_afgc .Data [_agbd ]>>_gece ;};_abg .Data [_bfea ]=_egdb (_abg .Data [_bfea ],^_ebfae ,_gebf );_bfea +=_abg .BytesPerLine ;_agbd +=_afgc .BytesPerLine ;};};if _gabd {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{for _abba =0;_abba < _dfac ;_abba ++{_ebfae =_egdb (_afgc .Data [_ccde +_abba ]<<_agbf ,_afgc .Data [_ccde +_abba +1]>>_gece ,_dbaac );
_abg .Data [_gdbab +_abba ]=^_ebfae ;};_gdbab +=_abg .BytesPerLine ;_ccde +=_afgc .BytesPerLine ;};};if _gdea {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{_ebfae =_afgc .Data [_eaedb ]<<_agbf ;if _cgde {_ebfae =_egdb (_ebfae ,_afgc .Data [_eaedb +1]>>_gece ,_dbaac );
};_abg .Data [_abfd ]=_egdb (_abg .Data [_abfd ],^_ebfae ,_ggcd );_abfd +=_abg .BytesPerLine ;_eaedb +=_afgc .BytesPerLine ;};};case PixSrcOrDst :if _bbcfg {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{if _dgb ==_fgba {_ebfae =_afgc .Data [_agbd ]<<_agbf ;if _adgfa {_ebfae =_egdb (_ebfae ,_afgc .Data [_agbd +1]>>_gece ,_dbaac );
};}else {_ebfae =_afgc .Data [_agbd ]>>_gece ;};_abg .Data [_bfea ]=_egdb (_abg .Data [_bfea ],_ebfae |_abg .Data [_bfea ],_gebf );_bfea +=_abg .BytesPerLine ;_agbd +=_afgc .BytesPerLine ;};};if _gabd {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{for _abba =0;
_abba < _dfac ;_abba ++{_ebfae =_egdb (_afgc .Data [_ccde +_abba ]<<_agbf ,_afgc .Data [_ccde +_abba +1]>>_gece ,_dbaac );_abg .Data [_gdbab +_abba ]|=_ebfae ;};_gdbab +=_abg .BytesPerLine ;_ccde +=_afgc .BytesPerLine ;};};if _gdea {for _cbbbf =0;_cbbbf < _bgbd ;
_cbbbf ++{_ebfae =_afgc .Data [_eaedb ]<<_agbf ;if _cgde {_ebfae =_egdb (_ebfae ,_afgc .Data [_eaedb +1]>>_gece ,_dbaac );};_abg .Data [_abfd ]=_egdb (_abg .Data [_abfd ],_ebfae |_abg .Data [_abfd ],_ggcd );_abfd +=_abg .BytesPerLine ;_eaedb +=_afgc .BytesPerLine ;
};};case PixSrcAndDst :if _bbcfg {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{if _dgb ==_fgba {_ebfae =_afgc .Data [_agbd ]<<_agbf ;if _adgfa {_ebfae =_egdb (_ebfae ,_afgc .Data [_agbd +1]>>_gece ,_dbaac );};}else {_ebfae =_afgc .Data [_agbd ]>>_gece ;};_abg .Data [_bfea ]=_egdb (_abg .Data [_bfea ],_ebfae &_abg .Data [_bfea ],_gebf );
_bfea +=_abg .BytesPerLine ;_agbd +=_afgc .BytesPerLine ;};};if _gabd {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{for _abba =0;_abba < _dfac ;_abba ++{_ebfae =_egdb (_afgc .Data [_ccde +_abba ]<<_agbf ,_afgc .Data [_ccde +_abba +1]>>_gece ,_dbaac );_abg .Data [_gdbab +_abba ]&=_ebfae ;
};_gdbab +=_abg .BytesPerLine ;_ccde +=_afgc .BytesPerLine ;};};if _gdea {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{_ebfae =_afgc .Data [_eaedb ]<<_agbf ;if _cgde {_ebfae =_egdb (_ebfae ,_afgc .Data [_eaedb +1]>>_gece ,_dbaac );};_abg .Data [_abfd ]=_egdb (_abg .Data [_abfd ],_ebfae &_abg .Data [_abfd ],_ggcd );
_abfd +=_abg .BytesPerLine ;_eaedb +=_afgc .BytesPerLine ;};};case PixSrcXorDst :if _bbcfg {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{if _dgb ==_fgba {_ebfae =_afgc .Data [_agbd ]<<_agbf ;if _adgfa {_ebfae =_egdb (_ebfae ,_afgc .Data [_agbd +1]>>_gece ,_dbaac );
};}else {_ebfae =_afgc .Data [_agbd ]>>_gece ;};_abg .Data [_bfea ]=_egdb (_abg .Data [_bfea ],_ebfae ^_abg .Data [_bfea ],_gebf );_bfea +=_abg .BytesPerLine ;_agbd +=_afgc .BytesPerLine ;};};if _gabd {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{for _abba =0;
_abba < _dfac ;_abba ++{_ebfae =_egdb (_afgc .Data [_ccde +_abba ]<<_agbf ,_afgc .Data [_ccde +_abba +1]>>_gece ,_dbaac );_abg .Data [_gdbab +_abba ]^=_ebfae ;};_gdbab +=_abg .BytesPerLine ;_ccde +=_afgc .BytesPerLine ;};};if _gdea {for _cbbbf =0;_cbbbf < _bgbd ;
_cbbbf ++{_ebfae =_afgc .Data [_eaedb ]<<_agbf ;if _cgde {_ebfae =_egdb (_ebfae ,_afgc .Data [_eaedb +1]>>_gece ,_dbaac );};_abg .Data [_abfd ]=_egdb (_abg .Data [_abfd ],_ebfae ^_abg .Data [_abfd ],_ggcd );_abfd +=_abg .BytesPerLine ;_eaedb +=_afgc .BytesPerLine ;
};};case PixNotSrcOrDst :if _bbcfg {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{if _dgb ==_fgba {_ebfae =_afgc .Data [_agbd ]<<_agbf ;if _adgfa {_ebfae =_egdb (_ebfae ,_afgc .Data [_agbd +1]>>_gece ,_dbaac );};}else {_ebfae =_afgc .Data [_agbd ]>>_gece ;};
_abg .Data [_bfea ]=_egdb (_abg .Data [_bfea ],^_ebfae |_abg .Data [_bfea ],_gebf );_bfea +=_abg .BytesPerLine ;_agbd +=_afgc .BytesPerLine ;};};if _gabd {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{for _abba =0;_abba < _dfac ;_abba ++{_ebfae =_egdb (_afgc .Data [_ccde +_abba ]<<_agbf ,_afgc .Data [_ccde +_abba +1]>>_gece ,_dbaac );
_abg .Data [_gdbab +_abba ]|=^_ebfae ;};_gdbab +=_abg .BytesPerLine ;_ccde +=_afgc .BytesPerLine ;};};if _gdea {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{_ebfae =_afgc .Data [_eaedb ]<<_agbf ;if _cgde {_ebfae =_egdb (_ebfae ,_afgc .Data [_eaedb +1]>>_gece ,_dbaac );
};_abg .Data [_abfd ]=_egdb (_abg .Data [_abfd ],^_ebfae |_abg .Data [_abfd ],_ggcd );_abfd +=_abg .BytesPerLine ;_eaedb +=_afgc .BytesPerLine ;};};case PixNotSrcAndDst :if _bbcfg {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{if _dgb ==_fgba {_ebfae =_afgc .Data [_agbd ]<<_agbf ;
if _adgfa {_ebfae =_egdb (_ebfae ,_afgc .Data [_agbd +1]>>_gece ,_dbaac );};}else {_ebfae =_afgc .Data [_agbd ]>>_gece ;};_abg .Data [_bfea ]=_egdb (_abg .Data [_bfea ],^_ebfae &_abg .Data [_bfea ],_gebf );_bfea +=_abg .BytesPerLine ;_agbd +=_afgc .BytesPerLine ;
};};if _gabd {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{for _abba =0;_abba < _dfac ;_abba ++{_ebfae =_egdb (_afgc .Data [_ccde +_abba ]<<_agbf ,_afgc .Data [_ccde +_abba +1]>>_gece ,_dbaac );_abg .Data [_gdbab +_abba ]&=^_ebfae ;};_gdbab +=_abg .BytesPerLine ;
_ccde +=_afgc .BytesPerLine ;};};if _gdea {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{_ebfae =_afgc .Data [_eaedb ]<<_agbf ;if _cgde {_ebfae =_egdb (_ebfae ,_afgc .Data [_eaedb +1]>>_gece ,_dbaac );};_abg .Data [_abfd ]=_egdb (_abg .Data [_abfd ],^_ebfae &_abg .Data [_abfd ],_ggcd );
_abfd +=_abg .BytesPerLine ;_eaedb +=_afgc .BytesPerLine ;};};case PixSrcOrNotDst :if _bbcfg {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{if _dgb ==_fgba {_ebfae =_afgc .Data [_agbd ]<<_agbf ;if _adgfa {_ebfae =_egdb (_ebfae ,_afgc .Data [_agbd +1]>>_gece ,_dbaac );
};}else {_ebfae =_afgc .Data [_agbd ]>>_gece ;};_abg .Data [_bfea ]=_egdb (_abg .Data [_bfea ],_ebfae |^_abg .Data [_bfea ],_gebf );_bfea +=_abg .BytesPerLine ;_agbd +=_afgc .BytesPerLine ;};};if _gabd {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{for _abba =0;
_abba < _dfac ;_abba ++{_ebfae =_egdb (_afgc .Data [_ccde +_abba ]<<_agbf ,_afgc .Data [_ccde +_abba +1]>>_gece ,_dbaac );_abg .Data [_gdbab +_abba ]=_ebfae |^_abg .Data [_gdbab +_abba ];};_gdbab +=_abg .BytesPerLine ;_ccde +=_afgc .BytesPerLine ;};};if _gdea {for _cbbbf =0;
_cbbbf < _bgbd ;_cbbbf ++{_ebfae =_afgc .Data [_eaedb ]<<_agbf ;if _cgde {_ebfae =_egdb (_ebfae ,_afgc .Data [_eaedb +1]>>_gece ,_dbaac );};_abg .Data [_abfd ]=_egdb (_abg .Data [_abfd ],_ebfae |^_abg .Data [_abfd ],_ggcd );_abfd +=_abg .BytesPerLine ;
_eaedb +=_afgc .BytesPerLine ;};};case PixSrcAndNotDst :if _bbcfg {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{if _dgb ==_fgba {_ebfae =_afgc .Data [_agbd ]<<_agbf ;if _adgfa {_ebfae =_egdb (_ebfae ,_afgc .Data [_agbd +1]>>_gece ,_dbaac );};}else {_ebfae =_afgc .Data [_agbd ]>>_gece ;
};_abg .Data [_bfea ]=_egdb (_abg .Data [_bfea ],_ebfae &^_abg .Data [_bfea ],_gebf );_bfea +=_abg .BytesPerLine ;_agbd +=_afgc .BytesPerLine ;};};if _gabd {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{for _abba =0;_abba < _dfac ;_abba ++{_ebfae =_egdb (_afgc .Data [_ccde +_abba ]<<_agbf ,_afgc .Data [_ccde +_abba +1]>>_gece ,_dbaac );
_abg .Data [_gdbab +_abba ]=_ebfae &^_abg .Data [_gdbab +_abba ];};_gdbab +=_abg .BytesPerLine ;_ccde +=_afgc .BytesPerLine ;};};if _gdea {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{_ebfae =_afgc .Data [_eaedb ]<<_agbf ;if _cgde {_ebfae =_egdb (_ebfae ,_afgc .Data [_eaedb +1]>>_gece ,_dbaac );
};_abg .Data [_abfd ]=_egdb (_abg .Data [_abfd ],_ebfae &^_abg .Data [_abfd ],_ggcd );_abfd +=_abg .BytesPerLine ;_eaedb +=_afgc .BytesPerLine ;};};case PixNotPixSrcOrDst :if _bbcfg {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{if _dgb ==_fgba {_ebfae =_afgc .Data [_agbd ]<<_agbf ;
if _adgfa {_ebfae =_egdb (_ebfae ,_afgc .Data [_agbd +1]>>_gece ,_dbaac );};}else {_ebfae =_afgc .Data [_agbd ]>>_gece ;};_abg .Data [_bfea ]=_egdb (_abg .Data [_bfea ],^(_ebfae |_abg .Data [_bfea ]),_gebf );_bfea +=_abg .BytesPerLine ;_agbd +=_afgc .BytesPerLine ;
};};if _gabd {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{for _abba =0;_abba < _dfac ;_abba ++{_ebfae =_egdb (_afgc .Data [_ccde +_abba ]<<_agbf ,_afgc .Data [_ccde +_abba +1]>>_gece ,_dbaac );_abg .Data [_gdbab +_abba ]=^(_ebfae |_abg .Data [_gdbab +_abba ]);
};_gdbab +=_abg .BytesPerLine ;_ccde +=_afgc .BytesPerLine ;};};if _gdea {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{_ebfae =_afgc .Data [_eaedb ]<<_agbf ;if _cgde {_ebfae =_egdb (_ebfae ,_afgc .Data [_eaedb +1]>>_gece ,_dbaac );};_abg .Data [_abfd ]=_egdb (_abg .Data [_abfd ],^(_ebfae |_abg .Data [_abfd ]),_ggcd );
_abfd +=_abg .BytesPerLine ;_eaedb +=_afgc .BytesPerLine ;};};case PixNotPixSrcAndDst :if _bbcfg {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{if _dgb ==_fgba {_ebfae =_afgc .Data [_agbd ]<<_agbf ;if _adgfa {_ebfae =_egdb (_ebfae ,_afgc .Data [_agbd +1]>>_gece ,_dbaac );
};}else {_ebfae =_afgc .Data [_agbd ]>>_gece ;};_abg .Data [_bfea ]=_egdb (_abg .Data [_bfea ],^(_ebfae &_abg .Data [_bfea ]),_gebf );_bfea +=_abg .BytesPerLine ;_agbd +=_afgc .BytesPerLine ;};};if _gabd {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{for _abba =0;
_abba < _dfac ;_abba ++{_ebfae =_egdb (_afgc .Data [_ccde +_abba ]<<_agbf ,_afgc .Data [_ccde +_abba +1]>>_gece ,_dbaac );_abg .Data [_gdbab +_abba ]=^(_ebfae &_abg .Data [_gdbab +_abba ]);};_gdbab +=_abg .BytesPerLine ;_ccde +=_afgc .BytesPerLine ;};};
if _gdea {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{_ebfae =_afgc .Data [_eaedb ]<<_agbf ;if _cgde {_ebfae =_egdb (_ebfae ,_afgc .Data [_eaedb +1]>>_gece ,_dbaac );};_abg .Data [_abfd ]=_egdb (_abg .Data [_abfd ],^(_ebfae &_abg .Data [_abfd ]),_ggcd );_abfd +=_abg .BytesPerLine ;
_eaedb +=_afgc .BytesPerLine ;};};case PixNotPixSrcXorDst :if _bbcfg {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{if _dgb ==_fgba {_ebfae =_afgc .Data [_agbd ]<<_agbf ;if _adgfa {_ebfae =_egdb (_ebfae ,_afgc .Data [_agbd +1]>>_gece ,_dbaac );};}else {_ebfae =_afgc .Data [_agbd ]>>_gece ;
};_abg .Data [_bfea ]=_egdb (_abg .Data [_bfea ],^(_ebfae ^_abg .Data [_bfea ]),_gebf );_bfea +=_abg .BytesPerLine ;_agbd +=_afgc .BytesPerLine ;};};if _gabd {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{for _abba =0;_abba < _dfac ;_abba ++{_ebfae =_egdb (_afgc .Data [_ccde +_abba ]<<_agbf ,_afgc .Data [_ccde +_abba +1]>>_gece ,_dbaac );
_abg .Data [_gdbab +_abba ]=^(_ebfae ^_abg .Data [_gdbab +_abba ]);};_gdbab +=_abg .BytesPerLine ;_ccde +=_afgc .BytesPerLine ;};};if _gdea {for _cbbbf =0;_cbbbf < _bgbd ;_cbbbf ++{_ebfae =_afgc .Data [_eaedb ]<<_agbf ;if _cgde {_ebfae =_egdb (_ebfae ,_afgc .Data [_eaedb +1]>>_gece ,_dbaac );
};_abg .Data [_abfd ]=_egdb (_abg .Data [_abfd ],^(_ebfae ^_abg .Data [_abfd ]),_ggcd );_abfd +=_abg .BytesPerLine ;_eaedb +=_afgc .BytesPerLine ;};};default:_dg .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",_gcae );
return _c .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 (_gbe *NRGBA64 )Validate ()error {if len (_gbe .Data )!=3*2*_gbe .Width *_gbe .Height {return _c .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 _dffc (_cacg _cc .CMYK )_cc .NRGBA {_cbd ,_bceb ,_cdfe :=_cc .CMYKToRGB (_cacg .C ,_cacg .M ,_cacg .Y ,_cacg .K );return _cc .NRGBA {R :_cbd ,G :_bceb ,B :_cdfe ,A :0xff};};var _ _fd .Image =&Gray4 {};func _bfga (_fafc Gray ,_afce nrgba64 ,_baeb _fd .Rectangle ){for _fff :=0;
_fff < _baeb .Max .X ;_fff ++{for _fddf :=0;_fddf < _baeb .Max .Y ;_fddf ++{_fab :=_ddac (_afce .NRGBA64At (_fff ,_fddf ));_fafc .SetGray (_fff ,_fddf ,_fab );};};};