mirror of
https://github.com/unidoc/unipdf.git
synced 2025-04-30 13:48:51 +08:00
12 lines
49 KiB
Go
12 lines
49 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 (_d "errors";_gg "fmt";_f "github.com/unidoc/unipdf/v3/internal/bitwise";_b "image";_g "image/color";_dd "image/draw";_ea "math";);func _agg (_eg NRGBA ,_ddb CMYK ,_ddd _b .Rectangle ){for _ec :=0;_ec < _ddd .Max .X ;_ec ++{for _ab :=0;_ab < _ddd .Max .Y ;_ab ++{_ac :=_eg .NRGBAAt (_ec ,_ab );_ddb .SetCMYK (_ec ,_ab ,_ggg (_ac ));};};};func (_gcea *Gray2 )ColorModel ()_g .Model {return Gray2Model };func (_bfdg *Monochrome )Histogram ()(_ced [256]int ){for _ ,_becf :=range _bfdg .Data {_ced [0xff]+=int (_afdf [_bfdg .Data [_becf ]]);};return _ced ;};type CMYK interface{CMYKAt (_de ,_fe int )_g .CMYK ;SetCMYK (_ddg ,_a int ,_c _g .CMYK );};type CMYK32 struct{ImageBase };type RGBA interface{RGBAAt (_bcge ,_gfdf int )_g .RGBA ;SetRGBA (_ccdc ,_ddgc int ,_eafg _g .RGBA );};func (_adaf *NRGBA32 )Set (x ,y int ,c _g .Color ){_gfcg :=y *_adaf .Width +x ;_gbdd :=3*_gfcg ;if _gbdd +2>=len (_adaf .Data ){return ;};_fedgg :=_g .NRGBAModel .Convert (c ).(_g .NRGBA );_adaf .setRGBA (_gfcg ,_fedgg );};var _ Image =&NRGBA16 {};func (_abf *ImageBase )newAlpha (){_ebce :=BytesPerLine (_abf .Width ,_abf .BitsPerComponent ,1);_abf .Alpha =make ([]byte ,_abf .Height *_ebce );};var _ Image =&Gray16 {};func (_edc *Gray4 )ColorModel ()_g .Model {return Gray4Model };func (_aag *NRGBA64 )Base ()*ImageBase {return &_aag .ImageBase };func _bcc (_cfb _b .Image ,_aggf Image ,_agd _b .Rectangle ){switch _bfdgb :=_cfb .(type ){case Gray :_ffge (_bfdgb ,_aggf .(Gray ),_agd );case NRGBA :_gfcb (_bfdgb ,_aggf .(Gray ),_agd );case CMYK :_bbfc (_bfdgb ,_aggf .(Gray ),_agd );case RGBA :_dde (_bfdgb ,_aggf .(Gray ),_agd );default:_adc (_cfb ,_aggf .(Image ),_agd );};};func (_dggd *Gray2 )SetGray (x ,y int ,gray _g .Gray ){_aca :=_aba (gray );_cbe :=y *_dggd .BytesPerLine ;_cgaa :=_cbe +(x >>2);if _cgaa >=len (_dggd .Data ){return ;};_ecb :=_aca .Y >>6;_dggd .Data [_cgaa ]=(_dggd .Data [_cgaa ]&(^(0xc0>>uint (2*((x )&3)))))|(_ecb <<uint (6-2*(x &3)));};var _ Image =&Monochrome {};func (_gea *Gray2 )GrayAt (x ,y int )_g .Gray {_dfd ,_ :=ColorAtGray2BPC (x ,y ,_gea .BytesPerLine ,_gea .Data ,_gea .Decode );return _dfd ;};func _aegd (_def RGBA ,_cc CMYK ,_ceb _b .Rectangle ){for _eca :=0;_eca < _ceb .Max .X ;_eca ++{for _cgg :=0;_cgg < _ceb .Max .Y ;_cgg ++{_baf :=_def .RGBAAt (_eca ,_cgg );_cc .SetCMYK (_eca ,_cgg ,_fce (_baf ));};};};var _ Gray =&Gray8 {};func (_dfdd *Gray4 )Set (x ,y int ,c _g .Color ){if x >=_dfdd .Width ||y >=_dfdd .Height {return ;};_ggf :=Gray4Model .Convert (c ).(_g .Gray );_dfdd .setGray (x ,y ,_ggf );};func (_fecgd *NRGBA64 )ColorAt (x ,y int )(_g .Color ,error ){return ColorAtNRGBA64 (x ,y ,_fecgd .Width ,_fecgd .Data ,_fecgd .Alpha ,_fecgd .Decode );};func _eged (_aged *_b .Gray )bool {for _gffc :=0;_gffc < len (_aged .Pix );_gffc ++{if !_gad (_aged .Pix [_gffc ]){return false ;};};return true ;};func (_fbc *CMYK32 )SetCMYK (x ,y int ,c _g .CMYK ){_fc :=4*(y *_fbc .Width +x );if _fc +3>=len (_fbc .Data ){return ;};_fbc .Data [_fc ]=c .C ;_fbc .Data [_fc +1]=c .M ;_fbc .Data [_fc +2]=c .Y ;_fbc .Data [_fc +3]=c .K ;};type NRGBA interface{NRGBAAt (_gaaf ,_acc int )_g .NRGBA ;SetNRGBA (_egcg ,_eda int ,_cfa _g .NRGBA );};func _dcbf (_cgab _b .Image ,_feeg int )(_b .Rectangle ,bool ,[]byte ){_ebg :=_cgab .Bounds ();var (_abgea bool ;_gcc []byte ;);switch _fae :=_cgab .(type ){case SMasker :_abgea =_fae .HasAlpha ();case NRGBA ,RGBA ,*_b .RGBA64 ,nrgba64 ,*_b .NYCbCrA :_gcc =make ([]byte ,_ebg .Max .X *_ebg .Max .Y *_feeg );case *_b .Paletted :var _eagf bool ;for _ ,_caab :=range _fae .Palette {_ggee ,_cadb ,_fdg ,_ebefe :=_caab .RGBA ();if _ggee ==0&&_cadb ==0&&_fdg ==0&&_ebefe !=0{_eagf =true ;break ;};};if _eagf {_gcc =make ([]byte ,_ebg .Max .X *_ebg .Max .Y *_feeg );};};return _ebg ,_abgea ,_gcc ;};func (_beb *NRGBA64 )Set (x ,y int ,c _g .Color ){_fcf :=(y *_beb .Width +x )*2;_bac :=_fcf *3;if _bac +5>=len (_beb .Data ){return ;};_ebba :=_g .NRGBA64Model .Convert (c ).(_g .NRGBA64 );_beb .setNRGBA64 (_bac ,_ebba ,_fcf );};func (_aaf *Gray4 )Validate ()error {if len (_aaf .Data )!=_aaf .Height *_aaf .BytesPerLine {return ErrInvalidImage ;};return nil ;};func (_dec *NRGBA16 )Validate ()error {if len (_dec .Data )!=3*_dec .Width *_dec .Height /2{return _d .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006da\u0067\u0065\u0020\u0064\u0061\u0074\u0061 s\u0069\u007a\u0065\u0020f\u006f\u0072\u0020\u0070\u0072\u006f\u0076\u0069\u0064ed\u0020\u0064i\u006d\u0065\u006e\u0073\u0069\u006f\u006e\u0073");};return nil ;};func ImgToGray (i _b .Image )*_b .Gray {if _dca ,_daff :=i .(*_b .Gray );_daff {return _dca ;};_dfe :=i .Bounds ();_bdcf :=_b .NewGray (_dfe );for _abae :=0;_abae < _dfe .Max .X ;_abae ++{for _gagb :=0;_gagb < _dfe .Max .Y ;_gagb ++{_faea :=i .At (_abae ,_gagb );_bdcf .Set (_abae ,_gagb ,_faea );};};return _bdcf ;};var (Gray2Model =_g .ModelFunc (_cef );Gray4Model =_g .ModelFunc (_dfc );NRGBA16Model =_g .ModelFunc (_bdgg ););func (_fd *CMYK32 )At (x ,y int )_g .Color {_ef ,_ :=_fd .ColorAt (x ,y );return _ef };func _aaa (_eega CMYK ,_dcba NRGBA ,_cgcc _b .Rectangle ){for _cfg :=0;_cfg < _cgcc .Max .X ;_cfg ++{for _dag :=0;_dag < _cgcc .Max .Y ;_dag ++{_baaf :=_eega .CMYKAt (_cfg ,_dag );_dcba .SetNRGBA (_cfg ,_dag ,_ecc (_baaf ));};};};type nrgba64 interface{NRGBA64At (_bgga ,_aef int )_g .NRGBA64 ;SetNRGBA64 (_ggda ,_caad int ,_efee _g .NRGBA64 );};func (_adab *NRGBA16 )ColorModel ()_g .Model {return NRGBA16Model };func ColorAtCMYK (x ,y ,width int ,data []byte ,decode []float64 )(_g .CMYK ,error ){_aeg :=4*(y *width +x );if _aeg +3>=len (data ){return _g .CMYK {},_gg .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 [_aeg ]&0xff;M :=data [_aeg +1]&0xff;Y :=data [_aeg +2]&0xff;K :=data [_aeg +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 _g .CMYK {C :C ,M :M ,Y :Y ,K :K },nil ;};func (_cfe *Gray4 )ColorAt (x ,y int )(_g .Color ,error ){return ColorAtGray4BPC (x ,y ,_cfe .BytesPerLine ,_cfe .Data ,_cfe .Decode );};func _ad (_ag ,_bd CMYK ,_gc _b .Rectangle ){for _bc :=0;_bc < _gc .Max .X ;_bc ++{for _dae :=0;_dae < _gc .Max .Y ;_dae ++{_bd .SetCMYK (_bc ,_dae ,_ag .CMYKAt (_bc ,_dae ));};};};func _dde (_dadf RGBA ,_gage Gray ,_ceac _b .Rectangle ){for _dgad :=0;_dgad < _ceac .Max .X ;_dgad ++{for _beff :=0;_beff < _ceac .Max .Y ;_beff ++{_egc :=_eeg (_dadf .RGBAAt (_dgad ,_beff ));_gage .SetGray (_dgad ,_beff ,_egc );};};};type Gray interface{GrayAt (_fed ,_gcae int )_g .Gray ;SetGray (_ggb ,_gfag int ,_eec _g .Gray );};func BytesPerLine (width ,bitsPerComponent ,colorComponents int )int {return ((width *bitsPerComponent )*colorComponents +7)>>3;};func _fbdb (_gcff _g .Gray )_g .Gray {_gcff .Y >>=4;_gcff .Y |=_gcff .Y <<4;return _gcff };func (_fede *ImageBase )HasAlpha ()bool {if _fede .Alpha ==nil {return false ;};for _afcab :=range _fede .Alpha {if _fede .Alpha [_afcab ]!=0xff{return true ;};};return false ;};func init (){_ggge ()};func (_faaf *NRGBA32 )Validate ()error {if len (_faaf .Data )!=3*_faaf .Width *_faaf .Height {return _d .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006da\u0067\u0065\u0020\u0064\u0061\u0074\u0061 s\u0069\u007a\u0065\u0020f\u006f\u0072\u0020\u0070\u0072\u006f\u0076\u0069\u0064ed\u0020\u0064i\u006d\u0065\u006e\u0073\u0069\u006f\u006e\u0073");};return nil ;};func (_cdb *Gray8 )SetGray (x ,y int ,g _g .Gray ){_bga :=y *_cdb .BytesPerLine +x ;if _bga > len (_cdb .Data )-1{return ;};_cdb .Data [_bga ]=g .Y ;};func _cced (_bdada *_b .Gray ,_eefb uint8 )*_b .Gray {_dee :=_bdada .Bounds ();_aec :=_b .NewGray (_dee );for _fcee :=0;_fcee < _dee .Dx ();_fcee ++{for _fdeb :=0;_fdeb < _dee .Dy ();_fdeb ++{_caabf :=_bdada .GrayAt (_fcee ,_fdeb );_aec .SetGray (_fcee ,_fdeb ,_g .Gray {Y :_bebc (_caabf .Y ,_eefb )});};};return _aec ;};func (_cce *Gray16 )At (x ,y int )_g .Color {_ccg ,_ :=_cce .ColorAt (x ,y );return _ccg };func _gebb (_fgef _g .Gray ,_afa monochromeModel )_g .Gray {if _fgef .Y > uint8 (_afa ){return _g .Gray {Y :_ea .MaxUint8 };};return _g .Gray {};};func _fdaef (_edb int ,_ccad int )error {return _gg .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",_edb ,_ccad );};func (_fdeg *Monochrome )clearBit (_dedg ,_aff int ){_fdeg .Data [_dedg ]&=^(0x80>>uint (_aff &7))};var _ _b .Image =&NRGBA32 {};func (_bed *Monochrome )GrayAt (x ,y int )_g .Gray {_fcea ,_ :=ColorAtGray1BPC (x ,y ,_bed .BytesPerLine ,_bed .Data ,_bed .Decode );return _fcea ;};func (_ebf *Gray16 )ColorAt (x ,y int )(_g .Color ,error ){return ColorAtGray16BPC (x ,y ,_ebf .BytesPerLine ,_ebf .Data ,_ebf .Decode );};func MonochromeModel (threshold uint8 )_g .Model {return monochromeModel (threshold )};func _cfac (_fcg nrgba64 ,_fcc NRGBA ,_bcbc _b .Rectangle ){for _fea :=0;_fea < _bcbc .Max .X ;_fea ++{for _gggfb :=0;_gggfb < _bcbc .Max .Y ;_gggfb ++{_gggc :=_fcg .NRGBA64At (_fea ,_gggfb );_fcc .SetNRGBA (_fea ,_gggfb ,_debg (_gggc ));};};};var _ NRGBA =&NRGBA32 {};func (_bfg *NRGBA64 )ColorModel ()_g .Model {return _g .NRGBA64Model };func _bged (_dbbb _b .Image ,_dcdgc Image ,_eaba _b .Rectangle ){if _cbb ,_ddgge :=_dbbb .(SMasker );_ddgge &&_cbb .HasAlpha (){_dcdgc .(SMasker ).MakeAlpha ();};_adc (_dbbb ,_dcdgc ,_eaba );};var _ _b .Image =&NRGBA64 {};func _dbgf (_ffbc *_b .NYCbCrA ,_egga NRGBA ,_bcad _b .Rectangle ){for _aead :=0;_aead < _bcad .Max .X ;_aead ++{for _eaeb :=0;_eaeb < _bcad .Max .Y ;_eaeb ++{_cfae :=_ffbc .NYCbCrAAt (_aead ,_eaeb );_egga .SetNRGBA (_aead ,_eaeb ,_fad (_cfae ));};};};var _ _b .Image =&Monochrome {};func (_dgd *Gray2 )Histogram ()(_ebb [256]int ){for _degc :=0;_degc < _dgd .Width ;_degc ++{for _dcd :=0;_dcd < _dgd .Height ;_dcd ++{_ebb [_dgd .GrayAt (_degc ,_dcd ).Y ]++;};};return _ebb ;};func _aba (_ga _g .Gray )_g .Gray {_fgb :=_ga .Y >>6;_fgb |=_fgb <<2;_ga .Y =_fgb |_fgb <<4;return _ga ;};func (_fefa *Gray8 )Base ()*ImageBase {return &_fefa .ImageBase };func (_cfeg *NRGBA64 )SetNRGBA64 (x ,y int ,c _g .NRGBA64 ){_gcdb :=(y *_cfeg .Width +x )*2;_gdf :=_gcdb *3;if _gdf +5>=len (_cfeg .Data ){return ;};_cfeg .setNRGBA64 (_gdf ,c ,_gcdb );};func (_gb *Gray2 )Set (x ,y int ,c _g .Color ){if x >=_gb .Width ||y >=_gb .Height {return ;};_fgf :=Gray2Model .Convert (c ).(_g .Gray );_eef :=y *_gb .BytesPerLine ;_bce :=_eef +(x >>2);_dade :=_fgf .Y >>6;_gb .Data [_bce ]=(_gb .Data [_bce ]&(^(0xc0>>uint (2*((x )&3)))))|(_dade <<uint (6-2*(x &3)));};func _fdde (_bge _b .Image )(Image ,error ){if _adcc ,_bef :=_bge .(*Gray16 );_bef {return _adcc .Copy (),nil ;};_bdc :=_bge .Bounds ();_abge ,_ggdg :=NewImage (_bdc .Max .X ,_bdc .Max .Y ,16,1,nil ,nil ,nil );if _ggdg !=nil {return nil ,_ggdg ;};_bcc (_bge ,_abge ,_bdc );return _abge ,nil ;};func ColorAtNRGBA32 (x ,y ,width int ,data ,alpha []byte ,decode []float64 )(_g .NRGBA ,error ){_beaa :=y *width +x ;_ecdb :=3*_beaa ;if _ecdb +2>=len (data ){return _g .NRGBA {},_gg .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 );};_cffe :=uint8 (0xff);if alpha !=nil &&len (alpha )> _beaa {_cffe =alpha [_beaa ];};_ecde ,_cfbb ,_caa :=data [_ecdb ],data [_ecdb +1],data [_ecdb +2];if len (decode )==6{_ecde =uint8 (uint32 (LinearInterpolate (float64 (_ecde ),0,255,decode [0],decode [1]))&0xff);_cfbb =uint8 (uint32 (LinearInterpolate (float64 (_cfbb ),0,255,decode [2],decode [3]))&0xff);_caa =uint8 (uint32 (LinearInterpolate (float64 (_caa ),0,255,decode [4],decode [5]))&0xff);};return _g .NRGBA {R :_ecde ,G :_cfbb ,B :_caa ,A :_cffe },nil ;};func (_ggag *Gray4 )Histogram ()(_dcb [256]int ){for _gaa :=0;_gaa < _ggag .Width ;_gaa ++{for _agc :=0;_agc < _ggag .Height ;_agc ++{_dcb [_ggag .GrayAt (_gaa ,_agc ).Y ]++;};};return _dcb ;};func (_ege *ImageBase )GetAlpha ()[]byte {return _ege .Alpha };func ColorAtGray8BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_g .Gray ,error ){_dafc :=y *bytesPerLine +x ;if _dafc >=len (data ){return _g .Gray {},_gg .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 );};_dba :=data [_dafc ];if len (decode )==2{_dba =uint8 (uint32 (LinearInterpolate (float64 (_dba ),0,255,decode [0],decode [1]))&0xff);};return _g .Gray {Y :_dba },nil ;};func (_dac *Gray8 )At (x ,y int )_g .Color {_gggf ,_ :=_dac .ColorAt (x ,y );return _gggf };func _dfc (_fafa _g .Color )_g .Color {_fbde :=_g .GrayModel .Convert (_fafa ).(_g .Gray );return _fbdb (_fbde );};func _dcf (_eee _g .RGBA )_g .NRGBA {switch _eee .A {case 0xff:return _g .NRGBA {R :_eee .R ,G :_eee .G ,B :_eee .B ,A :0xff};case 0x00:return _g .NRGBA {};default:_cggb ,_daf ,_ddc ,_faa :=_eee .RGBA ();_cggb =(_cggb *0xffff)/_faa ;_daf =(_daf *0xffff)/_faa ;_ddc =(_ddc *0xffff)/_faa ;return _g .NRGBA {R :uint8 (_cggb >>8),G :uint8 (_daf >>8),B :uint8 (_ddc >>8),A :uint8 (_faa >>8)};};};func IsGrayImgBlackAndWhite (i *_b .Gray )bool {return _eged (i )};func _gaf (_gbd _b .Image )(Image ,error ){if _eafe ,_aeb :=_gbd .(*NRGBA16 );_aeb {return _eafe .Copy (),nil ;};_gbgc :=_gbd .Bounds ();_bcba ,_ffda :=NewImage (_gbgc .Max .X ,_gbgc .Max .Y ,4,3,nil ,nil ,nil );if _ffda !=nil {return nil ,_ffda ;};_ddeb (_gbd ,_bcba ,_gbgc );return _bcba ,nil ;};func _gcb (_dea _g .CMYK )_g .Gray {_af ,_aeab ,_ceg :=_g .CMYKToRGB (_dea .C ,_dea .M ,_dea .Y ,_dea .K );_dcg :=(19595*uint32 (_af )+38470*uint32 (_aeab )+7471*uint32 (_ceg )+1<<7)>>16;return _g .Gray {Y :uint8 (_dcg )};};func (_ffb *Gray4 )At (x ,y int )_g .Color {_daaf ,_ :=_ffb .ColorAt (x ,y );return _daaf };type Gray4 struct{ImageBase };func (_cgc *Gray8 )Bounds ()_b .Rectangle {return _b .Rectangle {Max :_b .Point {X :_cgc .Width ,Y :_cgc .Height }};};func (_afb *Gray16 )Bounds ()_b .Rectangle {return _b .Rectangle {Max :_b .Point {X :_afb .Width ,Y :_afb .Height }};};func (_fge *CMYK32 )ColorModel ()_g .Model {return _g .CMYKModel };func (_ae *CMYK32 )Validate ()error {if len (_ae .Data )!=4*_ae .Width *_ae .Height {return _d .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006da\u0067\u0065\u0020\u0064\u0061\u0074\u0061 s\u0069\u007a\u0065\u0020f\u006f\u0072\u0020\u0070\u0072\u006f\u0076\u0069\u0064ed\u0020\u0064i\u006d\u0065\u006e\u0073\u0069\u006f\u006e\u0073");};return nil ;};func _acg (_agf _b .Image )(Image ,error ){if _efc ,_gfb :=_agf .(*Gray2 );_gfb {return _efc .Copy (),nil ;};_ecd :=_agf .Bounds ();_edg ,_ggbc :=NewImage (_ecd .Max .X ,_ecd .Max .Y ,2,1,nil ,nil ,nil );if _ggbc !=nil {return nil ,_ggbc ;};_bcc (_agf ,_edg ,_ecd );return _edg ,nil ;};func (_geb *Monochrome )At (x ,y int )_g .Color {_feg ,_ :=_geb .ColorAt (x ,y );return _feg };type colorConverter struct{_ca func (_deg _b .Image )(Image ,error );};var _ Image =&Gray8 {};func MonochromeThresholdConverter (threshold uint8 )ColorConverter {return &monochromeThresholdConverter {Threshold :threshold };};func ColorAtGray2BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_g .Gray ,error ){_bbaa :=y *bytesPerLine +x >>2;if _bbaa >=len (data ){return _g .Gray {},_gg .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 );};_cddg :=data [_bbaa ]>>uint (6-(x &3)*2)&3;if len (decode )==2{_cddg =uint8 (uint32 (LinearInterpolate (float64 (_cddg ),0,3.0,decode [0],decode [1]))&3);};return _g .Gray {Y :_cddg *85},nil ;};func ColorAt (x ,y ,width ,bitsPerColor ,colorComponents ,bytesPerLine int ,data ,alpha []byte ,decode []float64 )(_g .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 ,_gg .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 (_bced *Gray8 )ColorModel ()_g .Model {return _g .GrayModel };type Image interface{_dd .Image ;Base ()*ImageBase ;Copy ()Image ;Pix ()[]byte ;ColorAt (_gffe ,_efe int )(_g .Color ,error );Validate ()error ;};func (_cbf *ImageBase )Pix ()[]byte {return _cbf .Data };func _bdgg (_bda _g .Color )_g .Color {_bcde :=_g .NRGBAModel .Convert (_bda ).(_g .NRGBA );return _bgdaa (_bcde );};func _fdag (_ffbe ,_ccef NRGBA ,_fdc _b .Rectangle ){for _bdf :=0;_bdf < _fdc .Max .X ;_bdf ++{for _cfc :=0;_cfc < _fdc .Max .Y ;_cfc ++{_ccef .SetNRGBA (_bdf ,_cfc ,_ffbe .NRGBAAt (_bdf ,_cfc ));};};};func _bgdaa (_dcc _g .NRGBA )_g .NRGBA {_dcc .R =_dcc .R >>4|(_dcc .R >>4)<<4;_dcc .G =_dcc .G >>4|(_dcc .G >>4)<<4;_dcc .B =_dcc .B >>4|(_dcc .B >>4)<<4;return _dcc ;};func (_fade *NRGBA64 )Bounds ()_b .Rectangle {return _b .Rectangle {Max :_b .Point {X :_fade .Width ,Y :_fade .Height }};};func (_cddc *Gray16 )Base ()*ImageBase {return &_cddc .ImageBase };func _ggge (){for _eddd :=0;_eddd < 256;_eddd ++{_afdf [_eddd ]=uint8 (_eddd &0x1)+(uint8 (_eddd >>1)&0x1)+(uint8 (_eddd >>2)&0x1)+(uint8 (_eddd >>3)&0x1)+(uint8 (_eddd >>4)&0x1)+(uint8 (_eddd >>5)&0x1)+(uint8 (_eddd >>6)&0x1)+(uint8 (_eddd >>7)&0x1);};};func _ed (_gca _g .Gray )_g .NRGBA {return _g .NRGBA {R :_gca .Y ,G :_gca .Y ,B :_gca .Y ,A :0xff}};func (_fga *Monochrome )setBit (_fef ,_bgda int ){_fga .Data [_fef ]|=0x80>>uint (_bgda &7)};func (_gag *Gray4 )SetGray (x ,y int ,g _g .Gray ){if x >=_gag .Width ||y >=_gag .Height {return ;};g =_fbdb (g );_gag .setGray (x ,y ,g );};func _cef (_efg _g .Color )_g .Color {_age :=_g .GrayModel .Convert (_efg ).(_g .Gray );return _aba (_age )};func (_bcd *Monochrome )ColorAt (x ,y int )(_g .Color ,error ){return ColorAtGray1BPC (x ,y ,_bcd .BytesPerLine ,_bcd .Data ,_bcd .Decode );};func ColorAtGray1BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_g .Gray ,error ){_dbee :=y *bytesPerLine +x >>3;if _dbee >=len (data ){return _g .Gray {},_gg .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 );};_abee :=data [_dbee ]>>uint (7-(x &7))&1;if len (decode )==2{_abee =uint8 (LinearInterpolate (float64 (_abee ),0.0,1.0,decode [0],decode [1]))&1;};return _g .Gray {Y :_abee *255},nil ;};func GrayHistogram (g Gray )(_bccea [256]int ){switch _gaag :=g .(type ){case Histogramer :return _gaag .Histogram ();case _b .Image :_fadf :=_gaag .Bounds ();for _cfeb :=0;_cfeb < _fadf .Max .X ;_cfeb ++{for _caag :=0;_caag < _fadf .Max .Y ;_caag ++{_bccea [g .GrayAt (_cfeb ,_caag ).Y ]++;};};return _bccea ;default:return [256]int {};};};func (_aegg *NRGBA32 )ColorAt (x ,y int )(_g .Color ,error ){return ColorAtNRGBA32 (x ,y ,_aegg .Width ,_aegg .Data ,_aegg .Alpha ,_aegg .Decode );};type monochromeModel uint8 ;func _ddbc (_bbbe RGBA ,_bdfb NRGBA ,_gcg _b .Rectangle ){for _bgad :=0;_bgad < _gcg .Max .X ;_bgad ++{for _ecg :=0;_ecg < _gcg .Max .Y ;_ecg ++{_ebbd :=_bbbe .RGBAAt (_bgad ,_ecg );_bdfb .SetNRGBA (_bgad ,_ecg ,_dcf (_ebbd ));};};};func (_beg *NRGBA16 )ColorAt (x ,y int )(_g .Color ,error ){return ColorAtNRGBA16 (x ,y ,_beg .Width ,_beg .BytesPerLine ,_beg .Data ,_beg .Alpha ,_beg .Decode );};func _gad (_fab uint8 )bool {if _fab ==0||_fab ==255{return true ;};return false ;};var _ Image =&Gray4 {};func (_abg *Gray8 )Copy ()Image {return &Gray8 {ImageBase :_abg .copy ()}};func (_abea *Gray4 )Bounds ()_b .Rectangle {return _b .Rectangle {Max :_b .Point {X :_abea .Width ,Y :_abea .Height }};};func (_agdg *NRGBA16 )Base ()*ImageBase {return &_agdg .ImageBase };func (_dbbc *Gray4 )setGray (_ebc int ,_cgd int ,_bbb _g .Gray ){_abd :=_cgd *_dbbc .BytesPerLine ;_dcgd :=_abd +(_ebc >>1);if _dcgd >=len (_dbbc .Data ){return ;};_dfbg :=_bbb .Y >>4;_dbbc .Data [_dcgd ]=(_dbbc .Data [_dcgd ]&(^(0xf0>>uint (4*(_ebc &1)))))|(_dfbg <<uint (4-4*(_ebc &1)));};func ColorAtNRGBA (x ,y ,width ,bytesPerLine ,bitsPerColor int ,data ,alpha []byte ,decode []float64 )(_g .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 ,_gg .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 );};};type NRGBA64 struct{ImageBase };func (_fbcee *Gray16 )Copy ()Image {return &Gray16 {ImageBase :_fbcee .copy ()}};func _debg (_dgg _g .NRGBA64 )_g .NRGBA {return _g .NRGBA {R :uint8 (_dgg .R >>8),G :uint8 (_dgg .G >>8),B :uint8 (_dgg .B >>8),A :uint8 (_dgg .A >>8)};};func _bede (_ggc _b .Image )(Image ,error ){if _fgaf ,_gef :=_ggc .(*NRGBA64 );_gef {return _fgaf .Copy (),nil ;};_dce ,_bdgca ,_cccg :=_dcbf (_ggc ,2);_cfab ,_cgbe :=NewImage (_dce .Max .X ,_dce .Max .Y ,16,3,nil ,_cccg ,nil );if _cgbe !=nil {return nil ,_cgbe ;};_bged (_ggc ,_cfab ,_dce );if len (_cccg )!=0&&!_bdgca {if _ddcdc :=_dgbd (_cccg ,_cfab );_ddcdc !=nil {return nil ,_ddcdc ;};};return _cfab ,nil ;};type NRGBA32 struct{ImageBase };func (_cad *Monochrome )SetGray (x ,y int ,g _g .Gray ){_gcbb :=y *_cad .BytesPerLine +x >>3;if _gcbb > len (_cad .Data )-1{return ;};g =_gebb (g ,monochromeModel (_cad .ModelThreshold ));_cad .setGray (x ,g ,_gcbb );};func AutoThresholdTriangle (histogram [256]int )uint8 {var _ebac ,_dffb ,_beba ,_afda int ;for _beaba :=0;_beaba < len (histogram );_beaba ++{if histogram [_beaba ]> 0{_ebac =_beaba ;break ;};};if _ebac > 0{_ebac --;};for _dbbf :=255;_dbbf > 0;_dbbf --{if histogram [_dbbf ]> 0{_afda =_dbbf ;break ;};};if _afda < 255{_afda ++;};for _bece :=0;_bece < 256;_bece ++{if histogram [_bece ]> _dffb {_beba =_bece ;_dffb =histogram [_bece ];};};var _cag bool ;if (_beba -_ebac )< (_afda -_beba ){_cag =true ;var _badf int ;_debd :=255;for _badf < _debd {_cccda :=histogram [_badf ];histogram [_badf ]=histogram [_debd ];histogram [_debd ]=_cccda ;_badf ++;_debd --;};_ebac =255-_afda ;_beba =255-_beba ;};if _ebac ==_beba {return uint8 (_ebac );};_cfaf :=float64 (histogram [_beba ]);_cfddf :=float64 (_ebac -_beba );_fac :=_ea .Sqrt (_cfaf *_cfaf +_cfddf *_cfddf );_cfaf /=_fac ;_cfddf /=_fac ;_fac =_cfaf *float64 (_ebac )+_cfddf *float64 (histogram [_ebac ]);_bfeb :=_ebac ;var _dab float64 ;for _bgdd :=_ebac +1;_bgdd <=_beba ;_bgdd ++{_gaafg :=_cfaf *float64 (_bgdd )+_cfddf *float64 (histogram [_bgdd ])-_fac ;if _gaafg > _dab {_bfeb =_bgdd ;_dab =_gaafg ;};};_bfeb --;if _cag {var _ggga int ;_cgf :=255;for _ggga < _cgf {_dedd :=histogram [_ggga ];histogram [_ggga ]=histogram [_cgf ];histogram [_cgf ]=_dedd ;_ggga ++;_cgf --;};return uint8 (255-_bfeb );};return uint8 (_bfeb );};func _ddf (_ebefc _b .Image )(Image ,error ){if _cefc ,_cecc :=_ebefc .(*NRGBA32 );_cecc {return _cefc .Copy (),nil ;};_aebc ,_beab ,_abdb :=_dcbf (_ebefc ,1);_bdad ,_fcec :=NewImage (_aebc .Max .X ,_aebc .Max .Y ,8,3,nil ,_abdb ,nil );if _fcec !=nil {return nil ,_fcec ;};_ddeb (_ebefc ,_bdad ,_aebc );if len (_abdb )!=0&&!_beab {if _faaaf :=_dgbd (_abdb ,_bdad );_faaaf !=nil {return nil ,_faaaf ;};};return _bdad ,nil ;};func (_bcgd *Gray16 )SetGray (x ,y int ,g _g .Gray ){_cea :=(y *_bcgd .BytesPerLine /2+x )*2;if _cea +1>=len (_bcgd .Data ){return ;};_bcgd .Data [_cea ]=g .Y ;_bcgd .Data [_cea +1]=g .Y ;};func (_dfda *Gray16 )GrayAt (x ,y int )_g .Gray {_afg ,_ :=_dfda .ColorAt (x ,y );return _g .Gray {Y :uint8 (_afg .(_g .Gray16 ).Y >>8)};};func ColorAtGray4BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_g .Gray ,error ){_dbdg :=y *bytesPerLine +x >>1;if _dbdg >=len (data ){return _g .Gray {},_gg .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 [_dbdg ]>>uint (4-(x &1)*4)&0xf;if len (decode )==2{_fbfe =uint8 (uint32 (LinearInterpolate (float64 (_fbfe ),0,15,decode [0],decode [1]))&0xf);};return _g .Gray {Y :_fbfe *17&0xff},nil ;};func ColorAtNRGBA64 (x ,y ,width int ,data ,alpha []byte ,decode []float64 )(_g .NRGBA64 ,error ){_bag :=(y *width +x )*2;_faafd :=_bag *3;if _faafd +5>=len (data ){return _g .NRGBA64 {},_gg .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 _aeaba =0xffff;_dacbf :=uint16 (_aeaba );if alpha !=nil &&len (alpha )> _bag +1{_dacbf =uint16 (alpha [_bag ])<<8|uint16 (alpha [_bag +1]);};_cdaf :=uint16 (data [_faafd ])<<8|uint16 (data [_faafd +1]);_bbeb :=uint16 (data [_faafd +2])<<8|uint16 (data [_faafd +3]);_dggb :=uint16 (data [_faafd +4])<<8|uint16 (data [_faafd +5]);if len (decode )==6{_cdaf =uint16 (uint64 (LinearInterpolate (float64 (_cdaf ),0,65535,decode [0],decode [1]))&_aeaba );_bbeb =uint16 (uint64 (LinearInterpolate (float64 (_bbeb ),0,65535,decode [2],decode [3]))&_aeaba );_dggb =uint16 (uint64 (LinearInterpolate (float64 (_dggb ),0,65535,decode [4],decode [5]))&_aeaba );};return _g .NRGBA64 {R :_cdaf ,G :_bbeb ,B :_dggb ,A :_dacbf },nil ;};func (_egca *NRGBA32 )NRGBAAt (x ,y int )_g .NRGBA {_gaba ,_ :=ColorAtNRGBA32 (x ,y ,_egca .Width ,_egca .Data ,_egca .Alpha ,_egca .Decode );return _gaba ;};var _ _b .Image =&NRGBA16 {};func (_dbg *NRGBA16 )setNRGBA (_ccgac ,_gab ,_dcfc int ,_fbad _g .NRGBA ){if _ccgac *3%2==0{_dbg .Data [_dcfc ]=(_fbad .R >>4)<<4|(_fbad .G >>4);_dbg .Data [_dcfc +1]=(_fbad .B >>4)<<4|(_dbg .Data [_dcfc +1]&0xf);}else {_dbg .Data [_dcfc ]=(_dbg .Data [_dcfc ]&0xf0)|(_fbad .R >>4);_dbg .Data [_dcfc +1]=(_fbad .G >>4)<<4|(_fbad .B >>4);};if _dbg .Alpha !=nil {_afe :=_gab *BytesPerLine (_dbg .Width ,4,1);if _afe < len (_dbg .Alpha ){if _ccgac %2==0{_dbg .Alpha [_afe ]=(_fbad .A >>uint (4))<<uint (4)|(_dbg .Alpha [_dcfc ]&0xf);}else {_dbg .Alpha [_afe ]=(_dbg .Alpha [_afe ]&0xf0)|(_fbad .A >>uint (4));};};};};func (_gcfe *monochromeThresholdConverter )Convert (img _b .Image )(Image ,error ){if _afc ,_ddgf :=img .(*Monochrome );_ddgf {return _afc .Copy (),nil ;};_cdc :=img .Bounds ();_dff ,_add :=NewImage (_cdc .Max .X ,_cdc .Max .Y ,1,1,nil ,nil ,nil );if _add !=nil {return nil ,_add ;};_dff .(*Monochrome ).ModelThreshold =_gcfe .Threshold ;for _eb :=0;_eb < _cdc .Max .X ;_eb ++{for _fecg :=0;_fecg < _cdc .Max .Y ;_fecg ++{_eba :=img .At (_eb ,_fecg );_dff .Set (_eb ,_fecg ,_eba );};};return _dff ,nil ;};func AddDataPadding (width ,height ,bitsPerComponent ,colorComponents int ,data []byte )([]byte ,error ){_edde :=BytesPerLine (width ,bitsPerComponent ,colorComponents );if _edde ==width *colorComponents *bitsPerComponent /8{return data ,nil ;};_bca :=width *colorComponents *bitsPerComponent ;_gec :=_edde *8;_bcce :=8-(_gec -_bca );_bbe :=_f .NewReader (data );_cgae :=_edde -1;_gda :=make ([]byte ,_cgae );_acf :=make ([]byte ,height *_edde );_cfd :=_f .NewWriterMSB (_acf );var _bae uint64 ;var _cgb error ;for _fba :=0;_fba < height ;_fba ++{_ ,_cgb =_bbe .Read (_gda );if _cgb !=nil {return nil ,_cgb ;};_ ,_cgb =_cfd .Write (_gda );if _cgb !=nil {return nil ,_cgb ;};_bae ,_cgb =_bbe .ReadBits (byte (_bcce ));if _cgb !=nil {return nil ,_cgb ;};_ ,_cgb =_cfd .WriteBits (_bae ,_bcce );if _cgb !=nil {return nil ,_cgb ;};_cfd .FinishByte ();};return _acf ,nil ;};func (_dc *CMYK32 )Bounds ()_b .Rectangle {return _b .Rectangle {Max :_b .Point {X :_dc .Width ,Y :_dc .Height }};};func (_fadg *Gray2 )Validate ()error {if len (_fadg .Data )!=_fadg .Height *_fadg .BytesPerLine {return ErrInvalidImage ;};return nil ;};func _fad (_cba _g .NYCbCrA )_g .NRGBA {_ded :=int32 (_cba .Y )*0x10101;_dbef :=int32 (_cba .Cb )-128;_cab :=int32 (_cba .Cr )-128;_eegg :=_ded +91881*_cab ;if uint32 (_eegg )&0xff000000==0{_eegg >>=8;}else {_eegg =^(_eegg >>31)&0xffff;};_cgef :=_ded -22554*_dbef -46802*_cab ;if uint32 (_cgef )&0xff000000==0{_cgef >>=8;}else {_cgef =^(_cgef >>31)&0xffff;};_gd :=_ded +116130*_dbef ;if uint32 (_gd )&0xff000000==0{_gd >>=8;}else {_gd =^(_gd >>31)&0xffff;};return _g .NRGBA {R :uint8 (_eegg >>8),G :uint8 (_cgef >>8),B :uint8 (_gd >>8),A :_cba .A };};func (_gfa colorConverter )Convert (src _b .Image )(Image ,error ){return _gfa ._ca (src )};type Gray2 struct{ImageBase };func _eeg (_ddbd _g .RGBA )_g .Gray {_adb :=(19595*uint32 (_ddbd .R )+38470*uint32 (_ddbd .G )+7471*uint32 (_ddbd .B )+1<<7)>>16;return _g .Gray {Y :uint8 (_adb )};};func _bbfc (_dgf CMYK ,_faaa Gray ,_fbfc _b .Rectangle ){for _bea :=0;_bea < _fbfc .Max .X ;_bea ++{for _bafa :=0;_bafa < _fbfc .Max .Y ;_bafa ++{_bfdd :=_gcb (_dgf .CMYKAt (_bea ,_bafa ));_faaa .SetGray (_bea ,_bafa ,_bfdd );};};};func (_acbd *NRGBA16 )At (x ,y int )_g .Color {_adea ,_ :=_acbd .ColorAt (x ,y );return _adea };var _ _b .Image =&Gray8 {};var _ Image =&NRGBA32 {};func ConverterFunc (converterFunc func (_eaf _b .Image )(Image ,error ))ColorConverter {return colorConverter {_ca :converterFunc };};func (_dbb *Gray2 )Copy ()Image {return &Gray2 {ImageBase :_dbb .copy ()}};var ErrInvalidImage =_d .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006da\u0067\u0065\u0020\u0064\u0061\u0074\u0061 s\u0069\u007a\u0065\u0020f\u006f\u0072\u0020\u0070\u0072\u006f\u0076\u0069\u0064ed\u0020\u0064i\u006d\u0065\u006e\u0073\u0069\u006f\u006e\u0073");func (_gbf *NRGBA32 )ColorModel ()_g .Model {return _g .NRGBAModel };func _dgbd (_gfbd []byte ,_aed Image )error {_ceaf :=true ;for _cbcb :=0;_cbcb < len (_gfbd );_cbcb ++{if _gfbd [_cbcb ]!=0xff{_ceaf =false ;break ;};};if _ceaf {switch _bbfg :=_aed .(type ){case *NRGBA32 :_bbfg .Alpha =nil ;case *NRGBA64 :_bbfg .Alpha =nil ;default:return _gg .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",_aed );};};return nil ;};func (_gdc *NRGBA32 )At (x ,y int )_g .Color {_gabg ,_ :=_gdc .ColorAt (x ,y );return _gabg };func _gff (_fa _g .NRGBA )_g .Gray {_fdd ,_fde ,_cf ,_ :=_fa .RGBA ();_fgce :=(19595*_fdd +38470*_fde +7471*_cf +1<<15)>>24;return _g .Gray {Y :uint8 (_fgce )};};func (_aeag *Gray16 )Histogram ()(_cdcd [256]int ){for _gaac :=0;_gaac < _aeag .Width ;_gaac ++{for _acgd :=0;_acgd < _aeag .Height ;_acgd ++{_cdcd [_aeag .GrayAt (_gaac ,_acgd ).Y ]++;};};return _cdcd ;};func (_agb *NRGBA16 )SetNRGBA (x ,y int ,c _g .NRGBA ){_affe :=y *_agb .BytesPerLine +x *3/2;if _affe +1>=len (_agb .Data ){return ;};c =_bgdaa (c );_agb .setNRGBA (x ,y ,_affe ,c );};var _ NRGBA =&NRGBA16 {};func (_egd *NRGBA64 )Validate ()error {if len (_egd .Data )!=3*2*_egd .Width *_egd .Height {return _d .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006da\u0067\u0065\u0020\u0064\u0061\u0074\u0061 s\u0069\u007a\u0065\u0020f\u006f\u0072\u0020\u0070\u0072\u006f\u0076\u0069\u0064ed\u0020\u0064i\u006d\u0065\u006e\u0073\u0069\u006f\u006e\u0073");};return nil ;};func (_eggb *NRGBA32 )SetNRGBA (x ,y int ,c _g .NRGBA ){_fagg :=y *_eggb .Width +x ;_dbad :=3*_fagg ;if _dbad +2>=len (_eggb .Data ){return ;};_eggb .setRGBA (_fagg ,c );};func _cg (_fda _b .Image )(Image ,error ){if _fec ,_daa :=_fda .(*CMYK32 );_daa {return _fec .Copy (),nil ;};_cge :=_fda .Bounds ();_bad ,_ffa :=NewImage (_cge .Max .X ,_cge .Max .Y ,8,4,nil ,nil ,nil );if _ffa !=nil {return nil ,_ffa ;};switch _fgc :=_fda .(type ){case CMYK :_ad (_fgc ,_bad .(CMYK ),_cge );case Gray :_be (_fgc ,_bad .(CMYK ),_cge );case NRGBA :_agg (_fgc ,_bad .(CMYK ),_cge );case RGBA :_aegd (_fgc ,_bad .(CMYK ),_cge );default:_adc (_fda ,_bad ,_cge );};return _bad ,nil ;};func _ega (_deb _g .Gray )_g .CMYK {return _g .CMYK {K :0xff-_deb .Y }};func (_bcdd *Gray8 )Validate ()error {if len (_bcdd .Data )!=_bcdd .Height *_bcdd .BytesPerLine {return ErrInvalidImage ;};return nil ;};func NewImageBase (width int ,height int ,bitsPerComponent int ,colorComponents int ,data []byte ,alpha []byte ,decode []float64 )ImageBase {_dcbe :=ImageBase {Width :width ,Height :height ,BitsPerComponent :bitsPerComponent ,ColorComponents :colorComponents ,Data :data ,Alpha :alpha ,Decode :decode ,BytesPerLine :BytesPerLine (width ,bitsPerComponent ,colorComponents )};if data ==nil {_dcbe .Data =make ([]byte ,height *_dcbe .BytesPerLine );};return _dcbe ;};func (_ggac *Gray4 )Base ()*ImageBase {return &_ggac .ImageBase };func LinearInterpolate (x ,xmin ,xmax ,ymin ,ymax float64 )float64 {if _ea .Abs (xmax -xmin )< 0.000001{return ymin ;};_fcef :=ymin +(x -xmin )*(ymax -ymin )/(xmax -xmin );return _fcef ;};func (_dbed *Gray16 )Set (x ,y int ,c _g .Color ){_cff :=(y *_dbed .BytesPerLine /2+x )*2;if _cff +1>=len (_dbed .Data ){return ;};_bcb :=_g .Gray16Model .Convert (c ).(_g .Gray16 );_dbed .Data [_cff ],_dbed .Data [_cff +1]=uint8 (_bcb .Y >>8),uint8 (_bcb .Y &0xff);};func (_gf *CMYK32 )Copy ()Image {return &CMYK32 {ImageBase :_gf .copy ()}};func ColorAtGrayscale (x ,y ,bitsPerColor ,bytesPerLine int ,data []byte ,decode []float64 )(_g .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 ,_gg .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 (_eeec *NRGBA64 )At (x ,y int )_g .Color {_gfagg ,_ :=_eeec .ColorAt (x ,y );return _gfagg };func (_fbce *Gray8 )Histogram ()(_ade [256]int ){for _cega :=0;_cega < len (_fbce .Data );_cega ++{_ade [_fbce .Data [_cega ]]++;};return _ade ;};func _ffge (_gfc ,_ada Gray ,_fgfc _b .Rectangle ){for _ccbd :=0;_ccbd < _fgfc .Max .X ;_ccbd ++{for _aggc :=0;_aggc < _fgfc .Max .Y ;_aggc ++{_ada .SetGray (_ccbd ,_aggc ,_gfc .GrayAt (_ccbd ,_aggc ));};};};func (_gae *NRGBA32 )setRGBA (_aac int ,_abeff _g .NRGBA ){_efec :=3*_aac ;_gae .Data [_efec ]=_abeff .R ;_gae .Data [_efec +1]=_abeff .G ;_gae .Data [_efec +2]=_abeff .B ;if _aac < len (_gae .Alpha ){_gae .Alpha [_aac ]=_abeff .A ;};};func _ffec (_cacc _b .Image ,_ddfd uint8 )*_b .Gray {_gcdbd :=_cacc .Bounds ();_cdba :=_b .NewGray (_gcdbd );var (_gbgb _g .Color ;_aece _g .Gray ;);for _bbab :=0;_bbab < _gcdbd .Max .X ;_bbab ++{for _acff :=0;_acff < _gcdbd .Max .Y ;_acff ++{_gbgb =_cacc .At (_bbab ,_acff );_cdba .Set (_bbab ,_acff ,_gbgb );_aece =_cdba .GrayAt (_bbab ,_acff );_cdba .SetGray (_bbab ,_acff ,_g .Gray {Y :_bebc (_aece .Y ,_ddfd )});};};return _cdba ;};func (_bgc *Monochrome )Base ()*ImageBase {return &_bgc .ImageBase };func _egf (_ddcd _b .Image )(Image ,error ){if _fafe ,_edd :=_ddcd .(*Gray8 );_edd {return _fafe .Copy (),nil ;};_fgeg :=_ddcd .Bounds ();_ddgg ,_efb :=NewImage (_fgeg .Max .X ,_fgeg .Max .Y ,8,1,nil ,nil ,nil );if _efb !=nil {return nil ,_efb ;};_bcc (_ddcd ,_ddgg ,_fgeg );return _ddgg ,nil ;};func (_fceg *NRGBA64 )NRGBA64At (x ,y int )_g .NRGBA64 {_aafb ,_ :=ColorAtNRGBA64 (x ,y ,_fceg .Width ,_fceg .Data ,_fceg .Alpha ,_fceg .Decode );return _aafb ;};func (_eac *Monochrome )Bounds ()_b .Rectangle {return _b .Rectangle {Max :_b .Point {X :_eac .Width ,Y :_eac .Height }};};func (_eebd *NRGBA16 )NRGBAAt (x ,y int )_g .NRGBA {_fedg ,_ :=ColorAtNRGBA16 (x ,y ,_eebd .Width ,_eebd .BytesPerLine ,_eebd .Data ,_eebd .Alpha ,_eebd .Decode );return _fedg ;};func _ddeb (_dbdab _b .Image ,_dcce Image ,_ffab _b .Rectangle ){if _cbccc ,_dbge :=_dbdab .(SMasker );_dbge &&_cbccc .HasAlpha (){_dcce .(SMasker ).MakeAlpha ();};switch _ceff :=_dbdab .(type ){case Gray :_cbbg (_ceff ,_dcce .(NRGBA ),_ffab );case NRGBA :_fdag (_ceff ,_dcce .(NRGBA ),_ffab );case *_b .NYCbCrA :_dbgf (_ceff ,_dcce .(NRGBA ),_ffab );case CMYK :_aaa (_ceff ,_dcce .(NRGBA ),_ffab );case RGBA :_ddbc (_ceff ,_dcce .(NRGBA ),_ffab );case nrgba64 :_cfac (_ceff ,_dcce .(NRGBA ),_ffab );default:_adc (_dbdab ,_dcce ,_ffab );};};func (_dfdb *NRGBA16 )Bounds ()_b .Rectangle {return _b .Rectangle {Max :_b .Point {X :_dfdb .Width ,Y :_dfdb .Height }};};func (_agda *ImageBase )copy ()ImageBase {_bcdb :=*_agda ;_bcdb .Data =make ([]byte ,len (_agda .Data ));copy (_bcdb .Data ,_agda .Data );return _bcdb ;};func (_ddgd *CMYK32 )ColorAt (x ,y int )(_g .Color ,error ){return ColorAtCMYK (x ,y ,_ddgd .Width ,_ddgd .Data ,_ddgd .Decode );};func _bebc (_fdagb ,_effb uint8 )uint8 {if _fdagb < _effb {return 255;};return 0;};func _gfcb (_adbd NRGBA ,_edgf Gray ,_ebef _b .Rectangle ){for _cccd :=0;_cccd < _ebef .Max .X ;_cccd ++{for _deda :=0;_deda < _ebef .Max .Y ;_deda ++{_gffa :=_gff (_adbd .NRGBAAt (_cccd ,_deda ));_edgf .SetGray (_cccd ,_deda ,_gffa );};};};func (_ba *CMYK32 )CMYKAt (x ,y int )_g .CMYK {_fb ,_ :=ColorAtCMYK (x ,y ,_ba .Width ,_ba .Data ,_ba .Decode );return _fb ;};func (_eebb *NRGBA16 )Set (x ,y int ,c _g .Color ){_ecf :=y *_eebb .BytesPerLine +x *3/2;if _ecf +1>=len (_eebb .Data ){return ;};_acb :=NRGBA16Model .Convert (c ).(_g .NRGBA );_eebb .setNRGBA (x ,y ,_ecf ,_acb );};func _fbd (_bbf _b .Image )(Image ,error ){if _fee ,_ggd :=_bbf .(*Monochrome );_ggd {return _fee ,nil ;};_egg ,_bdgc :=_bbf .(Gray );if !_bdgc {_aa ,_cabd :=GrayConverter .Convert (_bbf );if _cabd !=nil {return nil ,_cabd ;};_egg =_aa .(Gray );};_aad :=_bbf .Bounds ();_fdae ,_gga :=NewImage (_aad .Max .X ,_aad .Max .Y ,1,1,nil ,nil ,nil );if _gga !=nil {return nil ,_gga ;};_dede :=_fdae .(*Monochrome );_bcg :=AutoThresholdTriangle (GrayHistogram (_egg ));for _abe :=0;_abe < _aad .Max .X ;_abe ++{for _ge :=0;_ge < _aad .Max .Y ;_ge ++{_dfa :=_gebb (_egg .GrayAt (_abe ,_ge ),monochromeModel (_bcg ));_dede .SetGray (_abe ,_ge ,_dfa );};};return _fdae ,nil ;};func _ggg (_feca _g .NRGBA )_g .CMYK {_ccd ,_cga ,_dbe ,_ :=_feca .RGBA ();_gcf ,_fcd ,_bgd ,_bba :=_g .RGBToCMYK (uint8 (_ccd >>8),uint8 (_cga >>8),uint8 (_dbe >>8));return _g .CMYK {C :_gcf ,M :_fcd ,Y :_bgd ,K :_bba };};func (_aade *Gray8 )Set (x ,y int ,c _g .Color ){_ccbf :=y *_aade .BytesPerLine +x ;if _ccbf > len (_aade .Data )-1{return ;};_fgfg :=_g .GrayModel .Convert (c );_aade .Data [_ccbf ]=_fgfg .(_g .Gray ).Y ;};func (_dddf *Monochrome )ColorModel ()_g .Model {return MonochromeModel (_dddf .ModelThreshold )};func ColorAtGray16BPC (x ,y ,bytesPerLine int ,data []byte ,decode []float64 )(_g .Gray16 ,error ){_ccga :=(y *bytesPerLine /2+x )*2;if _ccga +1>=len (data ){return _g .Gray16 {},_gg .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 );};_edf :=uint16 (data [_ccga ])<<8|uint16 (data [_ccga +1]);if len (decode )==2{_edf =uint16 (uint64 (LinearInterpolate (float64 (_edf ),0,65535,decode [0],decode [1])));};return _g .Gray16 {Y :_edf },nil ;};func (_dada *NRGBA16 )Copy ()Image {return &NRGBA16 {ImageBase :_dada .copy ()}};var _ _b .Image =&Gray4 {};func (_cggf *NRGBA32 )Bounds ()_b .Rectangle {return _b .Rectangle {Max :_b .Point {X :_cggf .Width ,Y :_cggf .Height }};};var _ Gray =&Gray16 {};func _cbd (_aafe _b .Image )(Image ,error ){if _cbef ,_caf :=_aafe .(*Gray4 );_caf {return _cbef .Copy (),nil ;};_feff :=_aafe .Bounds ();_ccbb ,_ffg :=NewImage (_feff .Max .X ,_feff .Max .Y ,4,1,nil ,nil ,nil );if _ffg !=nil {return nil ,_ffg ;};_bcc (_aafe ,_ccbb ,_feff );return _ccbb ,nil ;};func NewImage (width ,height ,bitsPerComponent ,colorComponents int ,data ,alpha []byte ,decode []float64 )(Image ,error ){_eff :=NewImageBase (width ,height ,bitsPerComponent ,colorComponents ,data ,alpha ,decode );var _gac Image ;switch colorComponents {case 1:switch bitsPerComponent {case 1:_gac =&Monochrome {ImageBase :_eff ,ModelThreshold :0x0f};case 2:_gac =&Gray2 {ImageBase :_eff };case 4:_gac =&Gray4 {ImageBase :_eff };case 8:_gac =&Gray8 {ImageBase :_eff };case 16:_gac =&Gray16 {ImageBase :_eff };};case 3:switch bitsPerComponent {case 4:_gac =&NRGBA16 {ImageBase :_eff };case 8:_gac =&NRGBA32 {ImageBase :_eff };case 16:_gac =&NRGBA64 {ImageBase :_eff };};case 4:_gac =&CMYK32 {ImageBase :_eff };};if _gac ==nil {return nil ,ErrInvalidImage ;};return _gac ,nil ;};func (_cbcc *Gray16 )ColorModel ()_g .Model {return _g .Gray16Model };type Monochrome struct{ImageBase ;ModelThreshold uint8 ;};func FromGoImage (i _b .Image )(Image ,error ){switch _fefe :=i .(type ){case Image :return _fefe .Copy (),nil ;case Gray :return GrayConverter .Convert (i );case *_b .Gray16 :return Gray16Converter .Convert (i );case CMYK :return CMYKConverter .Convert (i );case *_b .NRGBA64 :return NRGBA64Converter .Convert (i );default:return NRGBAConverter .Convert (i );};};func (_fcda *Gray4 )Copy ()Image {return &Gray4 {ImageBase :_fcda .copy ()}};func (_efba *NRGBA64 )setNRGBA64 (_eab int ,_bdadg _g .NRGBA64 ,_gcfd int ){_efba .Data [_eab ]=uint8 (_bdadg .R >>8);_efba .Data [_eab +1]=uint8 (_bdadg .R &0xff);_efba .Data [_eab +2]=uint8 (_bdadg .G >>8);_efba .Data [_eab +3]=uint8 (_bdadg .G &0xff);_efba .Data [_eab +4]=uint8 (_bdadg .B >>8);_efba .Data [_eab +5]=uint8 (_bdadg .B &0xff);if _gcfd +1< len (_efba .Alpha ){_efba .Alpha [_gcfd ]=uint8 (_bdadg .A >>8);_efba .Alpha [_gcfd +1]=uint8 (_bdadg .A &0xff);};};func (_eege *Gray8 )GrayAt (x ,y int )_g .Gray {_fgg ,_ :=ColorAtGray8BPC (x ,y ,_eege .BytesPerLine ,_eege .Data ,_eege .Decode );return _fgg ;};var _ _b .Image =&Gray2 {};func (_dfgf *Gray2 )At (x ,y int )_g .Color {_cec ,_ :=_dfgf .ColorAt (x ,y );return _cec };var _ _b .Image =&Gray16 {};func (_eag *ImageBase )MakeAlpha (){_eag .newAlpha ()};func (_bfa *Gray2 )ColorAt (x ,y int )(_g .Color ,error ){return ColorAtGray2BPC (x ,y ,_bfa .BytesPerLine ,_bfa .Data ,_bfa .Decode );};var _ Image =&CMYK32 {};func (_dga *Gray2 )Base ()*ImageBase {return &_dga .ImageBase };func (_eafga *NRGBA64 )Copy ()Image {return &NRGBA64 {ImageBase :_eafga .copy ()}};func (_abeg *NRGBA32 )Copy ()Image {return &NRGBA32 {ImageBase :_abeg .copy ()}};func (_feea *Gray4 )GrayAt (x ,y int )_g .Gray {_dgc ,_ :=ColorAtGray4BPC (x ,y ,_feea .BytesPerLine ,_feea .Data ,_feea .Decode );return _dgc ;};func (_efbd *Gray16 )Validate ()error {if len (_efbd .Data )!=_efbd .Height *_efbd .BytesPerLine {return ErrInvalidImage ;};return nil ;};type ImageBase struct{Width ,Height int ;BitsPerComponent ,ColorComponents int ;Data ,Alpha []byte ;Decode []float64 ;BytesPerLine int ;};func (_fbcc *NRGBA32 )Base ()*ImageBase {return &_fbcc .ImageBase };var _ Gray =&Gray4 {};func (_da *CMYK32 )Base ()*ImageBase {return &_da .ImageBase };type SMasker interface{HasAlpha ()bool ;GetAlpha ()[]byte ;MakeAlpha ();};var _ Image =&NRGBA64 {};func (_gfg *Monochrome )Validate ()error {if len (_gfg .Data )!=_gfg .Height *_gfg .BytesPerLine {return ErrInvalidImage ;};return nil ;};var _ Gray =&Monochrome {};func (_cabf monochromeModel )Convert (c _g .Color )_g .Color {_ccdg :=_g .GrayModel .Convert (c ).(_g .Gray );return _gebb (_ccdg ,_cabf );};func (_fg *CMYK32 )Set (x ,y int ,c _g .Color ){_ff :=4*(y *_fg .Width +x );if _ff +3>=len (_fg .Data ){return ;};_bb :=_g .CMYKModel .Convert (c ).(_g .CMYK );_fg .Data [_ff ]=_bb .C ;_fg .Data [_ff +1]=_bb .M ;_fg .Data [_ff +2]=_bb .Y ;_fg .Data [_ff +3]=_bb .K ;};func (_cccf *Monochrome )setGray (_cbg int ,_dbde _g .Gray ,_fgca int ){if _dbde .Y ==0{_cccf .clearBit (_fgca ,_cbg );}else {_cccf .setBit (_fgca ,_cbg );};};func (_ccb *Monochrome )Set (x ,y int ,c _g .Color ){_bab :=y *_ccb .BytesPerLine +x >>3;if _bab > len (_ccb .Data )-1{return ;};_dbda :=_ccb .ColorModel ().Convert (c ).(_g .Gray );_ccb .setGray (x ,_dbda ,_bab );};type NRGBA16 struct{ImageBase };func _be (_bg Gray ,_eae CMYK ,_dfb _b .Rectangle ){for _aea :=0;_aea < _dfb .Max .X ;_aea ++{for _dg :=0;_dg < _dfb .Max .Y ;_dg ++{_dad :=_bg .GrayAt (_aea ,_dg );_eae .SetCMYK (_aea ,_dg ,_ega (_dad ));};};};type Gray8 struct{ImageBase };func _adc (_dfg _b .Image ,_fbg Image ,_ee _b .Rectangle ){for _cbc :=0;_cbc < _ee .Max .X ;_cbc ++{for _daed :=0;_daed < _ee .Max .Y ;_daed ++{_fbf :=_dfg .At (_cbc ,_daed );_fbg .Set (_cbc ,_daed ,_fbf );};};};type ColorConverter interface{Convert (_cd _b .Image )(Image ,error );};var _afdf [256]uint8 ;func (_ffe *Gray2 )Bounds ()_b .Rectangle {return _b .Rectangle {Max :_b .Point {X :_ffe .Width ,Y :_ffe .Height }};};var _ Gray =&Gray2 {};func ImgToBinary (i _b .Image ,threshold uint8 )*_b .Gray {switch _cfdg :=i .(type ){case *_b .Gray :if _eged (_cfdg ){return _cfdg ;};return _cced (_cfdg ,threshold );case *_b .Gray16 :return _affa (_cfdg ,threshold );default:return _ffec (_cfdg ,threshold );};};func (_abef *Monochrome )Copy ()Image {return &Monochrome {ImageBase :_abef .ImageBase .copy (),ModelThreshold :_abef .ModelThreshold };};func (_fefc *Gray8 )ColorAt (x ,y int )(_g .Color ,error ){return ColorAtGray8BPC (x ,y ,_fefc .BytesPerLine ,_fefc .Data ,_fefc .Decode );};type monochromeThresholdConverter struct{Threshold uint8 ;};func _affa (_eaec *_b .Gray16 ,_dbefa uint8 )*_b .Gray {_fdb :=_eaec .Bounds ();_ccbbg :=_b .NewGray (_fdb );for _eggg :=0;_eggg < _fdb .Dx ();_eggg ++{for _gbc :=0;_gbc < _fdb .Dy ();_gbc ++{_agde :=_eaec .Gray16At (_eggg ,_gbc );_ccbbg .SetGray (_eggg ,_gbc ,_g .Gray {Y :_bebc (uint8 (_agde .Y /256),_dbefa )});};};return _ccbbg ;};type Histogramer interface{Histogram ()[256]int ;};func ColorAtNRGBA16 (x ,y ,width ,bytesPerLine int ,data ,alpha []byte ,decode []float64 )(_g .NRGBA ,error ){_bfe :=y *bytesPerLine +x *3/2;if _bfe +1>=len (data ){return _g .NRGBA {},_fdaef (x ,y );};const (_aeaf =0xf;_dgb =uint8 (0xff););_gbg :=_dgb ;if alpha !=nil {_gcd :=y *BytesPerLine (width ,4,1);if _gcd < len (alpha ){if x %2==0{_gbg =(alpha [_gcd ]>>uint (4))&_aeaf ;}else {_gbg =alpha [_gcd ]&_aeaf ;};_gbg |=_gbg <<4;};};var _caca ,_dcca ,_cca uint8 ;if x *3%2==0{_caca =(data [_bfe ]>>uint (4))&_aeaf ;_dcca =data [_bfe ]&_aeaf ;_cca =(data [_bfe +1]>>uint (4))&_aeaf ;}else {_caca =data [_bfe ]&_aeaf ;_dcca =(data [_bfe +1]>>uint (4))&_aeaf ;_cca =data [_bfe +1]&_aeaf ;};if len (decode )==6{_caca =uint8 (uint32 (LinearInterpolate (float64 (_caca ),0,15,decode [0],decode [1]))&0xf);_dcca =uint8 (uint32 (LinearInterpolate (float64 (_dcca ),0,15,decode [2],decode [3]))&0xf);_cca =uint8 (uint32 (LinearInterpolate (float64 (_cca ),0,15,decode [4],decode [5]))&0xf);};return _g .NRGBA {R :(_caca <<4)|(_caca &0xf),G :(_dcca <<4)|(_dcca &0xf),B :(_cca <<4)|(_cca &0xf),A :_gbg },nil ;};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 ,_gg .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 );};var (MonochromeConverter =ConverterFunc (_fbd );Gray2Converter =ConverterFunc (_acg );Gray4Converter =ConverterFunc (_cbd );GrayConverter =ConverterFunc (_egf );Gray16Converter =ConverterFunc (_fdde );NRGBA16Converter =ConverterFunc (_gaf );NRGBAConverter =ConverterFunc (_ddf );NRGBA64Converter =ConverterFunc (_bede );CMYKConverter =ConverterFunc (_cg ););func _fce (_bf _g .RGBA )_g .CMYK {_fgec ,_gge ,_bfd ,_dbd :=_g .RGBToCMYK (_bf .R ,_bf .G ,_bf .B );return _g .CMYK {C :_fgec ,M :_gge ,Y :_bfd ,K :_dbd };};func _ecc (_fbcf _g .CMYK )_g .NRGBA {_bdg ,_bgg ,_db :=_g .CMYKToRGB (_fbcf .C ,_fbcf .M ,_fbcf .Y ,_fbcf .K );return _g .NRGBA {R :_bdg ,G :_bgg ,B :_db ,A :0xff};};func _cbbg (_aafc Gray ,_fafc NRGBA ,_dadc _b .Rectangle ){for _gefb :=0;_gefb < _dadc .Max .X ;_gefb ++{for _afec :=0;_afec < _dadc .Max .Y ;_afec ++{_fecc :=_aafc .GrayAt (_gefb ,_afec );_fafc .SetNRGBA (_gefb ,_afec ,_ed (_fecc ));};};};type Gray16 struct{ImageBase };var _ Image =&Gray2 {}; |