%!PS-Adobe-3.0 EPSF-3.0 WG280-7N %%BoundingBox: 70 82 795 580 %START PDFDE011.EPS /pdfmark07 where {pop} {userdict /pdfmark07 /cleartomark load put} ifelse /languagelevel where {pop languagelevel} {1} ifelse 2 lt { userdict (<<) cvn ([) cvn load put userdict (>>) cvn (]) cvn load put} if [ /Title (PostScript pictures: http://130.149.60.45/~farbmetrik/WG28/) /author (compare K. Richter "Computergrafik ...": ISBN 3-8007-1775-1) /Subject (goto: http://www.ps.bam.de or http://130.149.60.445/~farbmetrik) /Keywords (image reproduction, colour devices) /Creator (klaus.richter@me.com) /CreationDate (D:2014060112000) /ModDate (D:2014060112000) /DOCINFO pdfmark07 [ /View [ /FitB ] /DOCVIEW pdfmark07 %END PDFDE011 %SETCMYK_OLV.PS /setcmyk_olvcolor %transfer cmyk to olv {/ncolor exch def /ycolor exch def /mcolor exch def /ccolor exch def ncolor 0 eq {1 ccolor sub 1 mcolor sub 1 ycolor sub setrgbcolor } {ccolor 0 eq mcolor 0 eq and ycolor 0 eq and {%only black n 1 ncolor sub dup dup setrgbcolor } {%cmy and black n 1 ccolor sub 1 ncolor sub mul 1 mcolor sub 1 ncolor sub mul 1 ycolor sub 1 ncolor sub mul setrgbcolor } ifelse } ifelse } bind def % !AUSTAUSCH Times-Roman -> Times-Roman-ISOLatin1=Times-I /Times-Roman findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse }forall /Encoding ISOLatin1Encoding def currentdict end /Times-ISOL1 exch definefont pop /Times-Italic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse }forall /Encoding ISOLatin1Encoding def currentdict end /TimesI-ISOL1 exch definefont pop /Times-Bold findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse }forall /Encoding ISOLatin1Encoding def currentdict end /TimesB-ISOL1 exch definefont pop /Times-BoldItalic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse }forall /Encoding ISOLatin1Encoding def currentdict end /TimesBI-ISOL1 exch definefont pop /Courier findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse }forall /Encoding ISOLatin1Encoding def currentdict end /Courier-ISOL1 exch definefont pop /Courier-Bold findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse }forall /Encoding ISOLatin1Encoding def currentdict end /CourierB-ISOL1 exch definefont pop /FS {findfont exch scalefont setfont} bind def /MM {72 25.4 div mul} def /str {8 string } bind def /TS {200 /Times-ISOL1 FS} bind def /TK {250 /Times-ISOL1 FS} bind def /TM {300 /Times-ISOL1 FS} bind def /TG {350 /Times-ISOL1 FS} bind def /TIS {200 /TimesI-ISOL1 FS} bind def /TIK {250 /TimesI-ISOL1 FS} bind def /TIM {300 /TimesI-ISOL1 FS} bind def /TIG {350 /TimesI-ISOL1 FS} bind def /TBS {200 /TimesB-ISOL1 FS} bind def /TBK {250 /TimesB-ISOL1 FS} bind def /TBM {300 /TimesB-ISOL1 FS} bind def /TBG {350 /TimesB-ISOL1 FS} bind def /TBIS {200 /TimesBI-ISOL1 FS} bind def /TBIK {250 /TimesBI-ISOL1 FS} bind def /TBIM {300 /TimesBI-ISOL1 FS} bind def /TBIG {350 /TimesBI-ISOL1 FS} bind def /SSK {140 /Symbol FS} bind def /SS {200 /Symbol FS} bind def /SK {250 /Symbol FS} bind def /SM {290 /Symbol FS} bind def /SG {350 /Symbol FS} bind def /CSS {115 /Courier-ISOL1 FS} bind def /CSK {140 /Courier-ISOL1 FS} bind def /CS {200 /Courier-ISOL1 FS} bind def /CK {250 /Courier-ISOL1 FS} bind def /CM {300 /Courier-ISOL1 FS} bind def /CG {350 /Courier-ISOL1 FS} bind def /CBSS {115 /CourierB-ISOL1 FS} bind def /CBSK {140 /CourierB-ISOL1 FS} bind def /CBS {200 /CourierB-ISOL1 FS} bind def /CBK {250 /CourierB-ISOL1 FS} bind def /CBM {300 /CourierB-ISOL1 FS} bind def /CBG {350 /CourierB-ISOL1 FS} bind def /ns {350 /Times-ISOL1 FS show} bind def /ks {350 /TimesI-ISOL1 FS show} bind def /bs {350 /TimesB-ISOL1 FS show} bind def /js {350 /TimesBI-ISOL1 FS show} bind def /ss {350 /Symbol FS show} bind def /is {300 /Times-ISOL1 FS 0 -90 rmoveto show 0 90 rmoveto} bind def /es {300 /Times-ISOL1 FS 0 200 rmoveto show 0 -200 rmoveto} bind def /ib {300 /TimesB-ISOL1 FS 0 -90 rmoveto show 0 90 rmoveto} bind def /eb {300 /TimesB-ISOL1 FS 0 200 rmoveto show 0 -200 rmoveto} bind def /ip {300 /Times-ISOL1 FS 50 50 rmoveto (\267) show 50 -50 rmoveto} bind def %20% kleiner /ns2 {300 /Times-ISOL1 FS show TM} bind def /ks2 {300 /TimesI-ISOL1 FS show TM} bind def /bs2 {300 /TimesB-ISOL1 FS show TM} bind def /js2 {300 /TimesBI-ISOL1 FS show TM} bind def /ss2 {300 /Symbol FS show TM} bind def /is2 {250 /Times-ISOL1 FS 0 -70 rmoveto show 0 70 rmoveto TM} bind def /es2 {250 /Times-ISOL1 FS 0 160 rmoveto show 0 -160 rmoveto TM} bind def /ib2 {250 /TimesB-ISOL1 FS 0 -70 rmoveto show 0 70 rmoveto TM} bind def /eb2 {250 /TimesB-ISOL1 FS 0 160 rmoveto show 0 -160 rmoveto TM} bind def /ip2 {250 /Times-ISOL1 FS 40 40 rmoveto (\267) show 40 -40 rmoveto TM} bind def %40% kleiner /ns4 {250 /Times-ISOL1 FS show TK} bind def /ks4 {250 /TimesI-ISOL1 FS show TK} bind def /bs4 {250 /TimesB-ISOL1 FS show TK} bind def /js4 {250 /TimesBI-ISOL1 FS show TK} bind def /ss4 {250 /Symbol FS show TK} bind def /is4 {200 /Times-ISOL1 FS 0 -60 rmoveto show 0 60 rmoveto TK} bind def /es4 {200 /Times-ISOL1 FS 0 130 rmoveto show 0 -130 rmoveto TK} bind def /ib4 {200 /TimesB-ISOL1 FS 0 -60 rmoveto show 0 60 rmoveto TK} bind def /eb4 {200 /TimesB-ISOL1 FS 0 130 rmoveto show 0 -130 rmoveto TK} bind def /ip4 {200 /Times-ISOL1 FS 30 30 rmoveto (\267) show 30 -30 rmoveto TK} bind def %60% kleiner /ns6 {200 /Times-ISOL1 FS show TS} bind def /ks6 {200 /TimesI-ISOL1 FS show TS} bind def /bs6 {200 /TimesB-ISOL1 FS show TS} bind def /js6 {200 /TimesBI-ISOL1 FS show TS} bind def /ss6 {200 /Symbol FS show TS} bind def /is6 {160 /Times-ISOL1 FS 0 -50 rmoveto show 0 50 rmoveto TS} bind def /es6 {160 /Times-ISOL1 FS 0 110 rmoveto show 0 -110 rmoveto TS} bind def /ib6 {160 /TimesB-ISOL1 FS 0 -50 rmoveto show 0 50 rmoveto TS} bind def /eb6 {160 /TimesB-ISOL1 FS 0 110 rmoveto show 0 -110 rmoveto TS} bind def /ip6 {160 /Times-ISOL1 FS 25 25 rmoveto (\267) show 25 -25 rmoveto TS} bind def %XCHA01.PS BEG /rec %x, y width heigth {/heigth exch def /width exch def moveto width 0 rlineto 0 heigth rlineto width neg 0 rlineto closepath } bind def /colrecfi %x y width heigth c m y k {setcmyk_olvcolor rec fill} bind def /colrecst %x y width heigth c m y k {setcmyk_olvcolor rec stroke} bind def /rem %x, y width heigth {/heigth exch 0.5 mul def /width exch 0.5 mul def /yleftb exch heigth 0.5 mul add def /xleftb exch width 0.5 mul add def xleftb yleftb moveto width 0 rlineto 0 heigth rlineto width neg 0 rlineto closepath } bind def /colremfi %x y width heigth c m y k {setcmykcolor rem fill} bind def /colremst %x y width heigth c m y k {setcmykcolor rem stroke} bind def /tzr {0.0 1.0 1.0 0.0} bind def %Reproduktionsfarben /tzg {1.0 0.0 1.0 0.0} bind def /tzb {1.0 1.0 0.0 0.0} bind def /tzc {1.0 0.0 0.0 0.0} bind def /tzm {0.0 1.0 0.0 0.0} bind def /tzy {0.0 0.0 1.0 0.0} bind def /tzn {0.0 0.0 0.0 1.00} bind def %Graureihe /tzd {0.0 0.0 0.0 0.75} bind def /tzz {0.0 0.0 0.0 0.50} bind def /tzh {0.0 0.0 0.0 0.25} bind def /tzw {0.0 0.0 0.0 0.00} bind def /tfr {0.0 1.0 1.0 0.0 setcmyk_olvcolor} bind def %Reproduktionsfarben /tfg {1.0 0.0 1.0 0.0 setcmyk_olvcolor} bind def /tfb {1.0 1.0 0.0 0.0 setcmyk_olvcolor} bind def /tfc {1.0 0.0 0.0 0.0 setcmyk_olvcolor} bind def /tfm {0.0 1.0 0.0 0.0 setcmyk_olvcolor} bind def /tfy {0.0 0.0 1.0 0.0 setcmyk_olvcolor} bind def /tfrz {0.0 1.0 1.0 0.5 setcmyk_olvcolor} bind def %Reproduktionsfarben /tfgz {1.0 0.0 1.0 0.5 setcmyk_olvcolor} bind def /tfbz {1.0 1.0 0.0 0.5 setcmyk_olvcolor} bind def /tfcz {1.0 0.0 0.0 0.5 setcmyk_olvcolor} bind def /tfmz {0.0 1.0 0.0 0.5 setcmyk_olvcolor} bind def /tfyz {0.0 0.0 1.0 0.5 setcmyk_olvcolor} bind def /tfn {0.0 0.0 0.0 1.00 setcmyk_olvcolor} bind def %Graureihe /tfd {0.0 0.0 0.0 0.75 setcmyk_olvcolor} bind def /tfz {0.0 0.0 0.0 0.50 setcmyk_olvcolor} bind def /tfh {0.0 0.0 0.0 0.25 setcmyk_olvcolor} bind def /tfw {0.0 0.0 0.0 0.00 setcmyk_olvcolor} bind def /cvishow {cvi 10 string cvs show} def /cvsshow1 {10 mul cvi 0.1 mul 7 string cvs show} def /cvsshow2 {100 mul cvi 0.01 mul 7 string cvs show} def /cvsshow3 {1000 mul cvi 0.001 mul 7 string cvs show} def /cvsshow4 {10000 mul cvi 0.0001 mul 8 string cvs show} def /Vexp 600 array def /Vexpa 600 array def /Vexpb 600 array def /Yexp 600 array def /alpha 600 array def %*********************************************************** /D13 1 3 div def /D841_108 841 108 div def /D4_29 4 29 div def /D6_29 6 29 div 3 exp def /FL 0.000001 def /FY 0.001 def %Daten XYZ 600 x 21 = 12600, max 600 colours a 21 data /XYZ 12600 array def /iim 314 def /ii2 314 300 sub def /xcmax 07 def %FOR 3 SECTIONS _WN,_RG,_BY /ij0 000 def /ij1 104 def /ij2 ij1 1 add def /ij3 209 def /ij4 ij3 1 add def /ij5 314 def /ncode (_RI) def /ncodeWN (_WN) def /ncodeRG (_RG) def /ncodeBY (_BY) def /NRSER 18000000 def %********************************************************** /proc_309labdat {%BEG procedure proc_309labdat %create reference 309 lab data similar as Kittelman (2009) originals %17 LIGHTNESS STEPS BETWEEN 10 and 90, distance 5 steps %16 RG-CRHOMA STEPS BETWEEN -40 and 40, distance 5 steps %16 YB-CHROMA STEPS BETWEEN -40 and 40, distance 5 steps %48 other steps (20,30), (30,20), (40,10) % (60,10), (70,20), (80,30) for hab=0,45,180,225,270,325 %6 OFFSET COLOURS %total 103 steps /RL*i 600 array def /RC*abi 600 array def /Rhabi 600 array def /Ra*i 600 array def /Rb*i 600 array def 00 1 104 {/Ri exch def RL*i Ri 50 put RC*abi Ri 30 put Rhabi Ri 45 put Ra*i Ri 20 put Rb*i Ri 20 put } for 00 1 16 {/Ri exch def %Ri=0,16 RL*i Ri 10 Ri 5 mul add put RC*abi Ri 0 put Rhabi Ri 0 put } for %Ri=0,16 %RG 17 1 24 {/Ri exch def %Ri=17,24 RL*i Ri 50 put RC*abi Ri 40 Ri 17 sub 5 mul sub put Rhabi Ri 180 put } for %Ri=17,24 25 1 32 {/Ri exch def %Ri=25,32 RL*i Ri 50 put RC*abi Ri 5 Ri 25 sub 5 mul add put Rhabi Ri 0 put } for %Ri=25,32 %YB 33 1 40 {/Ri exch def %Ri=33,40 RL*i Ri 50 put RC*abi Ri 40 Ri 33 sub 5 mul sub put Rhabi Ri 270 put } for %Ri=33,40 41 1 48 {/Ri exch def %Ri=41,48 RL*i Ri 50 put RC*abi Ri 5 Ri 41 sub 5 mul add put Rhabi Ri 90 put } for %Ri=41,48 0 1 48 {/Ri exch def Ra*i Ri RC*abi Ri get Rhabi Ri get cos mul put Rb*i Ri RC*abi Ri get Rhabi Ri get sin mul put } for %STOPY /L*tab 6 array def /C*tab 6 array def /H*tab 6 array def /L*tab [20 30 40 60 70 80] def /C*tab [30 20 10 10 20 30] def /H*tab [000 045 090 135 180 225 270 325] def %4x8=48 colours, Nr. 49..96 0 1 7 {/Rj exch def %Rj=0,7 0 1 5 {/Ri exch def %Ri=0,5 /Rij Rj 6 mul Ri add def /Rij49 Rij 49 add def RL*i Rij49 L*tab Ri get put RC*abi Rij49 C*tab Ri get put Rhabi Rij49 H*tab Rj get put } for %Ri=0,5 } for %Rj=0,7 49 1 96 {/Ri exch def Ra*i Ri RC*abi Ri get Rhabi Ri get cos mul put Rb*i Ri RC*abi Ri get Rhabi Ri get sin mul put } for %%STOPX /ian 97 def %97..104 %OFFSET L*,a*,b*, see Kittelmann (2010), p. 32 %C=Cyan RL*i ian 59 put Ra*i ian -31 put Rb*i ian 43 put %M=Magenta RL*i ian 1 add 48 put Ra*i ian 1 add 75 put Rb*i ian 1 add -7 put %Y=Yellow RL*i ian 2 add 90 put Ra*i ian 2 add -11 put Rb*i ian 2 add 96 put %R=Red RL*i ian 3 add 48 put Ra*i ian 3 add 65 put Rb*i ian 3 add 52 put %G=Green RL*i ian 4 add 51 put Ra*i ian 4 add -63 put Rb*i ian 4 add 37 put %B=Blue RL*i ian 5 add 26 put Ra*i ian 5 add 31 put Rb*i ian 5 add -44 put %W0=real White RL*i ian 6 add 95 put Ra*i ian 6 add 0 put Rb*i ian 6 add 0 put %W1=ideal White RL*i ian 7 add 100 put Ra*i ian 7 add 0 put Rb*i ian 7 add 0 put 97 1 104 {/Ri exch def %Ri=97,104 RC*abi Ri Ra*i Ri get dup mul Rb*i Ri get dup mul add FL add sqrt put Rhabi Ri Rb*i Ri get Ra*i Ri get 0.0001 add atan put } for %Ri=97,104 % achromatic (D65) /XLWD65100 95.04 def /YLWD65100 100.00 def /ZLWD65100 108.88 def /DecodeXYZ* {dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse} bind def %STOP0 0 1 2 {/Rj exch def %Rj=0,2, change delta_L*,a*,b* 0 1 104 {/Ri exch def %Ri=0,104 /Rij Ri Rj 105 mul add def /i21 Ri Rj 105 mul add 21 mul def /X*0 {RL*i Ri get 16 add 116 div Ra*i Ri get 500 div add} bind def /Y*0 {RL*i Ri get 16 add 116 div} bind def /Z*0 {RL*i Ri get 16 add 116 div Rb*i Ri get 200 div sub} bind def XYZ i21 0 add XLWD65100 1000 mul put XYZ i21 1 add YLWD65100 1000 mul put XYZ i21 2 add ZLWD65100 1000 mul put XYZ i21 3 add X*0 DecodeXYZ* XLWD65100 mul 1000 mul put XYZ i21 4 add Y*0 DecodeXYZ* YLWD65100 mul 1000 mul put XYZ i21 5 add Z*0 DecodeXYZ* ZLWD65100 mul 1000 mul put XYZ i21 9 add 1000 put %normalized visual difference %STOPX Rj 0 eq {%Rj=0,change delta_L* /X*1 {RL*i Ri get 1 add 16 add 116 div Ra*i Ri get 500 div add} bind def /Y*1 {RL*i Ri get 1 add 16 add 116 div} bind def /Z*1 {RL*i Ri get 1 add 16 add 116 div Rb*i Ri get 200 div sub} bind def XYZ i21 6 add X*1 DecodeXYZ* XLWD65100 mul FY add 1000 mul put XYZ i21 7 add Y*1 DecodeXYZ* YLWD65100 mul FY add 1000 mul put XYZ i21 8 add Z*1 DecodeXYZ* ZLWD65100 mul FY add 1000 mul put } if %j=0,change delta_L* Rj 1 eq {%Rj=1,change delta_a* /X*1 {RL*i Ri get 16 add 116 div Ra*i Ri get 1 add 500 div add} bind def /Y*1 {RL*i Ri get 16 add 116 div} bind def /Z*1 {RL*i Ri get 16 add 116 div Rb*i Ri get 200 div sub} bind def XYZ i21 6 add X*1 DecodeXYZ* XLWD65100 mul FY add 1000 mul put XYZ i21 7 add Y*1 DecodeXYZ* YLWD65100 mul FY add 1000 mul put XYZ i21 8 add Z*1 DecodeXYZ* ZLWD65100 mul FY add 1000 mul put } if %j=R1,change delta_a* Rj 2 eq {%Rj=2,change delta_b* /X*1 {RL*i Ri get 16 add 116 div Ra*i Ri get 500 div add} bind def /Y*1 {RL*i Ri get 16 add 116 div} bind def /Z*1 {RL*i Ri get 16 add 116 div Rb*i Ri get 1 add 200 div sub} bind def XYZ i21 6 add X*1 DecodeXYZ* XLWD65100 mul FY add 1000 mul put XYZ i21 7 add Y*1 DecodeXYZ* YLWD65100 mul FY add 1000 mul put XYZ i21 8 add Z*1 DecodeXYZ* ZLWD65100 mul FY add 1000 mul put } if %Rj=2,change delta_b* } for %Ri=0,104 } for %Rj=0,2 %STOP1 } bind def %END procedure proc_309labdat %********************************************************** %BEG PROG_03.PS 141122 %******************************************************************** /NR1i 600 array def /NR2i 600 array def /NR3i 600 array def /NR4i 600 array def /NRLi 600 array def /NRAi 600 array def /NRBi 600 array def /NRCi 600 array def /NRHi 600 array def /NRSi 600 array def /d_CIELABi 600 array def /d_CIELCHi 600 array def /d_C94LCHi 600 array def /d_CMCLCHi 600 array def /d_C00LCHi 600 array def /d_C85LCHi 600 array def /d_CM2LCHi 600 array def /d_C77LCHi 600 array def /d_C78LCHi 600 array def /d_C79LCHi 600 array def /d_CIELABmi 600 array def /d_CIELCHmi 600 array def /d_C94LCHmi 600 array def /d_CMCLCHmi 600 array def /d_C00LCHmi 600 array def /d_C85LCHmi 600 array def %******************************************************************** /proc_coldiff {%BEG procedure proc_coldiff %calculates CIE colour data and differences for 10 colour spaces %BEG CIELAB/CIELCH X0 XW div D6_29 gt {/FXXN0 X0 XW div 0.0001 add D13 exp def} {/FXXN0 D841_108 X0 XW div mul D4_29 add def} ifelse Y0 YW div D6_29 gt {/FYYN0 Y0 YW div 0.0001 add D13 exp def} {/FYYN0 D841_108 Y0 YW div mul D4_29 add def} ifelse Z0 ZW div D6_29 gt {/FZZN0 Z0 ZW div 0.0001 add D13 exp def} {/FZZN0 D841_108 Z0 ZW div mul D4_29 add def} ifelse /CIEL*0 116. FYYN0 mul 16. sub def /CIEa*0 500. FXXN0 FYYN0 sub mul def /CIEb*0 200. FYYN0 FZZN0 sub mul def /CIEC*ab0 CIEa*0 dup mul CIEb*0 dup mul add 0.0001 add sqrt def /CIEhab0 CIEb*0 CIEa*0 0.0001 add atan def X1 XW div D6_29 gt {/FXXN1 X1 XW div 0.0001 add D13 exp def} {/FXXN1 D841_108 X1 XW div mul D4_29 add def} ifelse Y1 YW div D6_29 gt {/FYYN1 Y1 YW div 0.0001 add D13 exp def} {/FYYN1 D841_108 Y1 YW div mul D4_29 add def} ifelse Z1 ZW div D6_29 gt {/FZZN1 Z1 ZW div 0.0001 add D13 exp def} {/FZZN1 D841_108 Z1 ZW div mul D4_29 add def} ifelse /CIEL*1 116. FYYN1 mul 16. sub def /CIEa*1 500. FXXN1 FYYN1 sub mul def /CIEb*1 200. FYYN1 FZZN1 sub mul def /CIEC*ab1 CIEa*1 dup mul CIEb*1 dup mul add 0.0001 add sqrt def /CIEhab1 CIEb*1 CIEa*1 0.0001 add atan def %mixed terms with *0 sn *1: /d_CIEL* CIEL*1 CIEL*0 sub def /d_CIEa* CIEa*1 CIEa*0 sub def /d_CIEb* CIEb*1 CIEb*0 sub def d_CIELABi i d_CIEL* dup mul d_CIEa* dup mul add d_CIEb* dup mul add 0.00000001 add sqrt put /a_CIELAB 1.26 def /b_CIELAB 0.55 def d_CIELABmi i d_CIELABi i get b_CIELAB exp a_CIELAB mul put /d_CIEh CIEhab1 CIEhab0 sub def %see CIEDE2000 page 4 CIEC*ab1 CIEC*ab0 mul 0 eq {/d_CIEh 0 def} if %CIEC*ab1 x CIEC*ab0 =0 CIEC*ab1 CIEC*ab0 mul 0 ne d_CIEh 180 gt and {/d_CIEh d_CIEh 360 sub def} if CIEC*ab1 CIEC*ab0 mul 0 ne d_CIEh -180 lt and {/d_CIEh d_CIEh 360 add def} if /d_CIEL CIEL*1 CIEL*0 sub def /d_CIECab CIEC*ab1 CIEC*ab0 sub def /d_CIEHab CIEC*ab1 CIEC*ab0 mul 0.000001 add sqrt 2 mul d_CIEh 0.5 mul sin mul def d_CIELCHi i d_CIEL dup mul d_CIECab dup mul add d_CIEHab dup mul add 0.000001 add sqrt put /a_CIELCH 1.26 def /b_CIELCH 0.55 def d_CIELCHmi i d_CIELCHi i get b_CIELCH exp a_CIELCH mul put %BEG CIELAB/CIELCH %BEG CIE94 /S94L 1 def /S94C 1 0.045 CIEC*ab0 mul add def /S94H 1 0.015 CIEC*ab0 mul add def /K94L 1 def /K94C 1 def /K94H 1 def /LC94*0 CIEL*0 K94L div S94L div def /LC94*1 CIEL*1 K94L div S94L div def /CC94*ab0 CIEC*ab0 K94C div S94C div def /CC94*ab1 CIEC*ab1 K94C div S94C div def d_C94LCHi i CIEL*1 CIEL*0 sub K94L div S94L div dup mul CIEC*ab1 CIEC*ab0 sub K94C div S94C div dup mul add d_CIEHab K94H div S94H div dup mul add 0.00000001 add sqrt put /a_C94LCH 1.41 def /b_C94LCH 0.70 def d_C94LCHmi i d_C94LCHi i get b_C94LCH exp a_C94LCH mul put %END CIE94 %BEG CMC(l:c=1:1) CIEL*0 16 lt {/SCML 0.511 def} {/SCML 0.040975 CIEL*0 mul 0.01765 CIEL*0 mul 1 add div def } ifelse /SCMC 0.0638 CIEC*ab0 mul 0.0131 CIEC*ab0 mul 1 add div 0.638 add def %beg special /FCMC CIEC*ab0 dup mul dup mul CIEC*ab0 dup mul dup mul 1900 add div sqrt def CIEhab0 164 lt CIEhab0 345 gt or {/TCMC CIEhab0 35 add cos 0.4 mul abs 0.36 add def} {/TCMC CIEhab0 168 add cos 0.2 mul abs 0.56 add def} ifelse %end special /SCMH TCMC FCMC mul 1 add FCMC sub SCMC mul def /KCML 1 def %=l /KCMC 1 def %=c /KCMH 1 def %1 /CMCL*0 CIEL*0 KCML div SCML div def /CMCL*1 CIEL*1 KCML div SCML div def /CMCC*ab0 CIEC*ab0 KCMC div SCMC div def /CMCC*ab1 CIEC*ab1 KCMC div SCMC div def d_CMCLCHi i CIEL*1 CIEL*0 sub KCML div SCML div dup mul CIEC*ab1 CIEC*ab0 sub KCMC div SCMC div dup mul add d_CIEHab KCMH div SCMH div dup mul add 0.00000001 add sqrt put /a_CMCLCH 1.34 def /b_CMCLCH 0.66 def d_CMCLCHmi i d_CMCLCHi i get b_CMCLCH exp a_CMCLCH mul put %END CMC(l:c=1:1)=CMC %BEG CM2(l:c=1:2)=CM2 /KM2L 1 def %=l /KM2C 2 def %=c /KM2H 1 def %1 /CM2L*0 CIEL*0 KM2L div SCML div def /CM2L*1 CIEL*1 KM2L div SCML div def /CM2C*ab0 CIEC*ab0 KM2C div SCMC div def /CM2C*ab1 CIEC*ab1 KM2C div SCMC div def d_CM2LCHi i CIEL*1 CIEL*0 sub KM2L div SCML div dup mul CIEC*ab1 CIEC*ab0 sub KM2C div SCMC div dup mul add d_CIEHab KM2H div SCMH div dup mul add 0.00000001 add sqrt put %END CM2(l:c=1:2)=CM2 %BEG CIEDE2000=C00 %beg special equation (7) /CIEC*ab CIEC*ab0 CIEC*ab1 add 0.5 mul def /DEG 1 CIEC*ab 7 exp CIEC*ab 7 exp 25 7 exp add div 0.000001 add sqrt sub 0.5 mul def %end special equation (7) %beg special EQUATION (1) TO (6) %0 /C00L0S CIEL*0 def /C00a0S 1 DEG add CIEa*0 mul def /C00b0S CIEb*0 def /C00C0S C00a0S dup mul C00b0S dup mul add 0.000001 add sqrt def C00C0S 0 eq {/C00h0S 0 def} {/C00h0S C00b0S C00a0S 0.0001 add atan def } ifelse %1 /C00L1S CIEL*1 def /C00a1S 1 DEG add CIEa*1 mul def /C00b1S CIEb*1 def /C00C1S C00a1S dup mul C00b1S dup mul add 0.000001 add sqrt def C00C1S 0 eq {/C00h1S 0 def} {/C00h1S C00b1S C00a1S 0.0001 add atan def } ifelse %end special EQUATION (1) TO (6) %beg special EQUATION (11) TO (14) /d_C00hS0 C00h1S C00h0S sub def %see CIEDE2000 page 4 C00C1S C00C0S mul 0 eq {/d_C00hS 0 def} if %CIEC*ab1 x CIEC*ab0 =0 C00C1S C00C0S mul 0 ne d_C00hS0 abs 180 le and {/d_C00hS d_C00hS0 def} if C00C1S C00C0S mul 0 ne d_C00hS0 180 gt and {/d_C00hS d_C00hS0 360 sub def} if C00C1S C00C0S mul 0 ne d_C00hS0 -180 lt and {/d_C00hS d_C00hS0 360 add def} if %end special EQUATION (11) TO (14) %beg special EQUATION (8) TO (10) /d_C00LS C00L1S C00L0S sub def /d_C00aS C00a1S C00a0S sub def /d_C00bS C00b1S C00b0S sub def /d_C00CS C00C1S C00C0S sub def /d_C00HS C00C0S C00C1S mul 0.000001 add sqrt 2 mul d_C00hS 0.5 mul sin mul def %end special EQUATION (8) TO (10) %beg special EQUATION (23) TO (26) /a_C00hs C00h0S C00h1S add 0.5 mul def /m_C00CS C00C0S C00C1S mul def d_C00hS abs 180 le m_C00CS 0 ne and {/C00hSq a_C00hs def} if d_C00hS abs 180 gt a_C00hs 360 le and m_C00CS 0 ne and {/C00hSq C00h0S C00h1S add 360 add 0.5 mul def} if d_C00hS abs 180 gt a_C00hs 360 ge and m_C00CS 0 ne and {/C00hSq C00h0S C00h1S add 360 sub 0.5 mul def} if m_C00CS 0 eq {/C00hSq C00h0S C00h1S add def } if %end special EQUATION (23) TO (26) %beg special EQUATIONS (16) TO (22) /C00LSq C00L0S C00L1S add 0.5 mul def /C00CSq C00C0S C00C1S add 0.5 mul def /C00SL C00LSq 50 sub dup mul 0.015 mul C00LSq 50 sub dup mul 20 add sqrt div 1 add def /C00SC 0.045 C00CSq mul 1 add def %beg special T, RT, d_D, RC /C00T C00hSq 30 sub cos -0.17 mul C00hSq 2 mul cos 0.24 mul add C00hSq 3 mul 6 add cos 0.32 mul add C00hSq 4 mul 63 sub cos 0.20 mul sub 1 add def /C00SH 0.015 C00CSq mul C00T mul 1 add def /C00RC C00CSq 7 exp C00CSq 7 exp 25 7 exp add 0.000001 add div 0.000001 add sqrt 2 mul def /expDT C00hSq 275 sub 25 div dup mul def /econst 2.718281 def /C00DT 30 econst expDT neg exp mul def /C00RT C00DT 2 mul sin neg C00RC mul def %end special T, RT, d_D, RC %end special EQUATIONS (16) TO (22) %beg special EQUATION (15) /C00KL 1.0 def /C00KC 1.0 def /C00KH 1.0 def /d_C00LSN d_C00LS C00KL div C00SL div def /d_C00CSN d_C00CS C00KC div C00SC div def /d_C00HSN d_C00HS C00KH div C00SH div def d_C00LCHi i d_C00LSN dup mul d_C00CSN dup mul add d_C00HSN dup mul add d_C00CSN d_C00HSN mul C00RT mul add 0.000001 add sqrt put /a_C00LCH 1.43 def /b_C00LCH 0.70 def d_C00LCHmi i d_C00LCHi i get b_C00LCH exp a_C00LCH mul put %end special EQUATION (15) %END CIEDE2000=C00 %BEG LABJND=C85 /X0 XYZ i21 3 add get 0.001 mul def %X0 /Y0 XYZ i21 4 add get 0.001 mul def %Y0 /Z0 XYZ i21 5 add get 0.001 mul def %Z0 /X1 XYZ i21 6 add get 0.001 mul def %X1 /Y1 XYZ i21 7 add get 0.001 mul def %Y1 /Z1 XYZ i21 8 add get 0.001 mul def %Z1 /Yq Y0 Y1 add 0.5 mul def /d_Y Y1 Y0 sub def /a085 X0 Y0 0.000001 add div def /b085 Z0 Y0 0.000001 add div 0.4 mul neg def /a185 X1 Y1 0.000001 add div def /b185 Z1 Y1 0.000001 add div 0.4 mul neg def /an85 XW YW 0.000001 add div def /bn85 ZW YW 0.000001 add div 0.4 mul neg def /d_a085 a085 an85 sub def /d_b085 b085 bn85 sub def /d_a185 a185 an85 sub def /d_b185 b185 bn85 sub def /a0"85 d_a085 d_a085 abs 0.5 mul 1 add div an85 add def /b0"85 d_b085 d_b085 abs 0.5 mul 1 add div bn85 add def /a1"85 d_a185 d_a185 abs 0.5 mul 1 add div an85 add def /b1"85 d_b185 d_b185 abs 0.5 mul 1 add div bn85 add def /d_Y Y1 Y0 sub def /d_a"85 a1"85 a0"85 sub def /d_b"85 b1"85 b0"85 sub def /s85 0.0170 def /q85 0.0058 def /g85 1.0000 def %not used /a0085 1.0 def /b0085 1.8 def /Y0085 1.5 def d_C85LCHi i d_Y dup mul a0085 d_a"85 mul Yq mul dup mul add b0085 d_b"85 mul Yq mul dup mul add 0.000001 add sqrt Y0085 mul q85 Yq mul s85 add div 0.1 mul put /a_C85LCH 1.17 def /b_C85LCH 0.35 def d_C85LCHmi i d_C85LCHi i get b_C85LCH exp a_C85LCH mul put %END LABJND=C85 %BEG LABHNU_1977=C77 /S77L 1 def /S77A 1 def /S77B 1 def /K77L 1 def /K77A 1 def /K77B 1 def %C77a'=(x/y+1/6)**(1/3)/4 %C77b'=-(z/y+1/6)**(1/3)/12 %C77L*=L*CIE %C77a*=500*[C77a'-C77a'n]*Y**(1/3) %C77b*=500*[C77b'-C77b'n]*Y**(1/3) /C77a'0 X0 Y0 FL add div 1 6 div add 0.3333 exp 4 div def /C77a'1 X1 Y1 FL add div 1 6 div add 0.3333 exp 4 div def /C77a'n XW YW FL add div 1 6 div add 0.3333 exp 4 div def /C77b'0 Z0 Y0 FL add div 1 6 div add 0.3333 exp 12 div neg def /C77b'1 Z1 Y1 FL add div 1 6 div add 0.3333 exp 12 div neg def /C77b'n ZW YW FL add div 1 6 div add 0.3333 exp 12 div neg def /C77a*0 C77a'0 C77a'n sub 500 mul Y0 1 3 div exp mul def /C77a*1 C77a'1 C77a'n sub 500 mul Y1 1 3 div exp mul def /C77b*0 C77b'0 C77b'n sub 500 mul Y0 1 3 div exp mul def /C77b*1 C77b'1 C77b'n sub 500 mul Y1 1 3 div exp mul def d_C77LCHi i CIEL*1 CIEL*0 sub K77L div S77L div dup mul C77a*1 C77a*0 sub K77A div S77A div dup mul add C77b*1 C77b*0 sub K77B div S77B div dup mul add 0.00000001 add sqrt put %END LABHNU_1977=C77 %BEG LABHNU1=C78 /S78L 1 def /S78A 1 def /S78B 1 def /K78L 1 def /K78A 1 def /K78B 1 def %C78a'=(x/y+1)/15 %C78b'=-(z/y+1/6)**(1/3)/12 %C78L*=L*CIE %C78a*=500*[C78a'-C78a'n]*Y**(1/3) %C78b*=500*[C78b'-C78b'n]*Y**(1/3) /C78a'0 X0 Y0 FL add div 1 add 15 div def /C78a'1 X1 Y1 FL add div 1 add 15 div def /C78a'n XW YW FL add div 1 add 15 div def /C78b'0 Z0 Y0 FL add div 1 6 div add 0.3333 exp 12 div neg def /C78b'1 Z1 Y1 FL add div 1 6 div add 0.3333 exp 12 div neg def /C78b'n ZW YW FL add div 1 6 div add 0.3333 exp 12 div neg def /C78a*0 C78a'0 C78a'n sub 500 mul Y0 1 3 div exp mul def /C78a*1 C78a'1 C78a'n sub 500 mul Y0 1 3 div exp mul def /C78b*0 C78b'0 C78b'n sub 500 mul Y0 1 3 div exp mul def /C78b*1 C78b'1 C78b'n sub 500 mul Y0 1 3 div exp mul def d_C78LCHi i CIEL*1 CIEL*0 sub K78L div S78L div dup mul C78a*1 C78a*0 sub K78A div S78A div dup mul add C78b*1 C78b*0 sub K78B div S78B div dup mul add 0.00000001 add sqrt put %END LABHNU1_1978-C78 %BEG LABHNU2_1979=C79 /S79L 1 def /S79A 1 def /S79B 1 def /K79L 1 def /K79A 1 def /K79B 1 def %C79a'=(x/y+1/6)**(2/3)/15 %C79b'=-(z/y+1/6)**(1/3)/12 %C79L*=L*CIE %C79a*=500*[C79a'-C79a'n]*Y**(1/3) %C79b*=500*[C79b'-C79b'n]*Y**(1/3) /C79a'0 X0 Y0 FL add div 1 6 div add 0.6667 exp 15 div def /C79a'1 X1 Y1 FL add div 1 6 div add 0.6667 exp 15 div def /C79a'n XW YW FL add div 1 6 div add 0.6667 exp 15 div def /C79b'0 Z0 Y0 FL add div 1 6 div add 0.3333 exp 12 div neg def /C79b'1 Z1 Y1 FL add div 1 6 div add 0.3333 exp 12 div neg def /C79b'n ZW YW FL add div 1 6 div add 0.3333 exp 12 div neg def /C79a*0 C79a'0 C79a'n sub 500 mul Y0 1 3 div exp mul def /C79a*1 C79a'1 C79a'n sub 500 mul Y1 1 3 div exp mul def /C79b*0 C79b'0 C79b'n sub 500 mul Y0 1 3 div exp mul def /C79b*1 C79b'1 C79b'n sub 500 mul Y1 1 3 div exp mul def d_C79LCHi i CIEL*1 CIEL*0 sub K79L div S79L div dup mul C79a*1 C79a*0 sub K79A div S79A div dup mul add C79b*1 C79b*0 sub K79B div S79B div dup mul add 0.00000001 add sqrt put %END LABHNU2_1979=C79 } bind def %END procedure proc_coldiff %******************************************************************** /proc_colcode {%BEG procedure proc_colcode %NRXi calculation, XYZ_i21_(16,17)-change based on CIE(Lab*)(1,0) NRLi i CIEL*0 put %116. FYYN mul 16. sub def NRAi i CIEa*0 put %500. FXXN FYYN sub mul def NRBi i CIEb*0 put %200. FYYN FZZN sub mul def NRCi i CIEC*ab0 put %CIEa*0 dup mul %CIEb*0 dup mul add 0.0001 add sqrt def NRHi i CIEhab0 put %CIEb*0 CIEa*0 0.0001 add atan def NR3i i 0 put %default CIEC*ab0 3 le {%CIEC*ab0<=3,>3 NR3i i 1 put } %CIEC*ab0<=3 { %CIEC*ab0>3 CIEhab0 337.5 ge CIEhab0 022.5 lt and {NR3i i 2 put} if CIEhab0 022.5 ge CIEhab0 067.5 lt and {NR3i i 3 put} if CIEhab0 067.5 ge CIEhab0 112.5 lt and {NR3i i 4 put} if CIEhab0 112.5 ge CIEhab0 167.5 lt and {NR3i i 5 put} if CIEhab0 167.5 ge CIEhab0 202.5 lt and {NR3i i 6 put} if CIEhab0 202.5 ge CIEhab0 247.5 lt and {NR3i i 7 put} if CIEhab0 247.5 ge CIEhab0 292.5 lt and {NR3i i 8 put} if CIEhab0 292.5 ge CIEhab0 337.5 lt and {NR3i i 9 put} if } ifelse %CIEC*abm<=3,>3 /d_CIEL10 CIEL*1 CIEL*0 sub def /d_CIEA10 CIEa*1 CIEa*0 sub def /d_CIEB10 CIEb*1 CIEb*0 sub def /d_CIEC10 d_CIEA10 dup mul d_CIEB10 dup mul add FL add sqrt def /d_CIEH10 d_CIEB10 d_CIEA10 FL add atan def d_CIEC10 0.1 le {/d_CIEH10 0 def} if NR4i i 0 put %default d_CIEL10 d_CIEC10 ge {%d_CIEL*>=d_CIEC* or d_CIEL*=d_CIEC* { %d_CIEL*=d_CIEC* or d_CIEL*=0 nx 0.5 ge {%nx>=0.5 /nx nx 0.5 add cvi def nx 9 le {(0) show} if nx 99 le {(0) show} if nx 6 string cvs show } if nx -0.5 le {%nx<=-0.5 /nx nx 0.5 sub cvi def nx abs 99 le {(0) show} if nx 6 string cvs show } if %nx>=0 } def /cvi02xshow {/nx exch def %with round nx abs 0.5 lt {%|nx|<=0.5 ( ) show nx cvi 6 string cvs show } if %nx>=0 nx 0.5 ge {%nx>=0.5 /nx nx 0.5 add cvi def nx 9 le {( ) show} if nx 99 le {( ) show} if nx 6 string cvs show } if nx -0.5 le {%nx<=-0.5 /nx nx 0.5 sub cvi def nx abs 99 le {( ) show} if nx 6 string cvs show } if %nx>=0 } def /cvi03nshow {/nx exch def %with round nx abs 0.5 lt {%nx=0 (000) show nx cvi 7 string cvs show } if %|nx|<=0.5 nx 0.5 ge {%nx>=0.5 /nx nx 0.5 add cvi def nx 9 le {(0) show} if nx 99 le {(0) show} if nx 999 le {(0) show} if nx 7 string cvs show } if nx -0.5 le {%nx<=-0.5 /nx nx 0.5 sub cvi def nx abs 9 le {(0) show} if nx abs 99 le {(0) show} if nx 7 string cvs show } if %nx>=0 } def /cvi03xshow {/nx exch def %with round nx abs 0.5 lt {%|nx|<=0.5 ( ) show nx cvi 7 string cvs show } if %nx>=0 nx 0.5 ge {%nx>=0.5 /nx nx 0.5 add cvi def nx 9 le {( ) show} if nx 99 le {( ) show} if nx 999 le {( ) show} if nx 7 string cvs show } if nx -0.5 le {%nx<=-0.5 /nx nx 0.5 sub cvi def nx abs 9 le {( ) show} if nx abs 99 le {( ) show} if nx 7 string cvs show } if %nx>=0 } def %******************************************* /XYZ_LABt 21 array def %text for Lab*-header /XYZ_LABt [(%XS) (YS) (ZS) (X0) (Y0) (Z0) (X1) (Y1) (Z1) (DV) (dE*ab) (dE*CH) (dE*94) (dE*CM) (dE*00) (de*85) (no.) (Code) (L*) (a*) (b*)] def /XYZ_LABt_PF 21 array def %text for Lab*-header PF /XYZ_LABt_PF [(%XS) (YS) (ZS) (X0) (Y0) (Z0) (X1) (Y1) (Z1) (DV) (dE'ab) (dE'CH) (dE'94) (dE'CM) (dE'00) (de'85) (no.) (Code) (L*) (a*) (b*)] def /xpos_LABt 21 array def %x-position only for LAB-header /xpos_LABt %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %XYZS, XYZ0, XYZ1, DY [0000 0700 1350 2000 2650 3300 3950 4600 5250 5900 %10 %11 %12 %13 %14 %15 %16 DE*(6X)+NR 6550 7050 7550 8050 8550 9050 9550 %17 %18 %19 %20 %21 %22 CODE, L*, a*, b* % 10270 11300 11750 12200 12500] def /xpos_LABd 21 array def %x-position for LAB-data /xpos_LABd %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %XYZS, XYZ0, XYZ1, DY [0000 0700 1350 2000 2650 3300 3950 4600 5250 5900 %10 %11 %12 %13 %14 %15 %16 DE*(6X)+NR 6550 7050 7550 8050 8550 9050 9550 %17 %18 %19 %20 %21 %22 CODE, L*, a*, b*, % 10270 11150 11600 12050 12500] def %********************************************************** /XYZ_LCHt 21 array def %text for LCh*-header /XYZ_LCHt [(%XS) (YS) (ZS) (X0) (Y0) (Z0) (X1) (Y1) (Z1) (DV) (dE*ab) (dE*CH) (dE*94) (dE*CM) (dE*00) (de*85) (no.) (Code) (L*) (C*ab) (hab)] def /XYZ_LCHta 21 array def %text for header: average colour difference /XYZ_LCHta [(%XS) (YS) (ZS) (X0) (Y0) (Z0) (X1) (Y1) (Z1) (DV) (aE*ab) (aE*CH) (aE*94) (aE*CM) (aE*00) (ae*85) (no.) (Code) (L*) (C*ab) (hab)] def /XYZ_LCHt_PF 21 array def %text for LCh*-header /XYZ_LCHt_PF [(%XS) (YS) (ZS) (X0) (Y0) (Z0) (X1) (Y1) (Z1) (DV) (dE'ab) (dE'CH) (dE'94) (dE'CM) (dE'00) (de'85) (no.) (Code) (L*) (C*ab) (hab)] def /XYZ_LCHta_PF 21 array def %text for header: average colour difference /XYZ_LCHta_PF [(%XS) (YS) (ZS) (X0) (Y0) (Z0) (X1) (Y1) (Z1) (DV) (aE'ab) (aE'CH) (aE'94) (aE'CM) (aE'00) (ae'85) (no.) (Code) (L*) (C*ab) (hab)] def /xpos_LCHt 21 array def %x-position only for LCH-header /xpos_LCHt %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %XYZS, XYZ0, XYZ1, DY [0000 0700 1350 2000 2650 3300 3950 4600 5250 5900 %10 %11 %12 %13 %14 %15 %16 DE*(6X)+NR 6550 7050 7550 8050 8550 9050 9550 %17 %18 %19 %20 %21 %22 CODE, L*, C*ab, hab* % 10270 11300 11650 12100 12500] def /xpos_LCHd 21 array def %x-position for LCH-data /xpos_LCHd %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %XYZS, XYZ0, XYZ1, DY [0000 0700 1350 2000 2650 3300 3950 4600 5250 5900 %10 %11 %12 %13 %14 %15 %16 DE*(6X)+NR 6550 7050 7550 8050 8550 9050 9550 %17 %18 %19 %20 %21 %22 CODE, L*, a*, b*, % 10270 11150 11600 12050 12500] def %********************************************************** % %remark every new moveto creates a space in macps2pdf! %therefore on any line end a space is produced in macps2pdf %this space will be transferred to a line fees \r. %for macps2pdf output to ascii only " % " = " %\r" is necessary % %END PROG_03.PS 141122 %******************************************************************** %%EndProlog gsave /lanind 1 def /lantex [(G) (E) (S) (F) (I) (J) (M)] def /showde {0 lanind eq {show} {pop} ifelse} bind def /showen {1 lanind eq {show} {pop} ifelse} bind def /showes {2 lanind eq {show} {pop} ifelse} bind def /showfr {3 lanind eq {show} {pop} ifelse} bind def /showit {4 lanind eq {show} {pop} ifelse} bind def /showjp {5 lanind eq {show} {pop} ifelse} bind def /showea {1 lanind le {show} {pop} ifelse} bind def /lanindf where {pop /lanind1 lanindf def /lanind2 lanindf def /lanindd laninddf def} {/lanind1 0 def /lanind2 0 def} ifelse /colormf where {pop /colorm1 colormf def /colorm2 colormf def /colormd colormdf def} {/colorm1 0 def} ifelse /deintpf where {pop /deintp1 deintpf def /deintp2 deintpf def /deintpd deintpdf def} {/deintp1 0 def} ifelse /xcolorf where {pop /xcolor1 xcolorf def /xcolor2 xcolorf def /xcolord xcolordf def} {/xcolor1 3 def} ifelse /xchartf where {pop /xchart1 xchartf def /xchart2 xchartf def /xchartd xchartdf def /xchartm xchart2f xchart1f sub 1 add def} {/xchart1 0 def /xchartm 6 def} ifelse /xchart3f where {pop /xchart3 xchart3f def} {/xchart3 0 def} ifelse /xchart4f where {pop /xchart4 xchart4f def} {/xchart4 0 def} ifelse /pchartf where {pop /pchart1 pchartf def /pchart2 pchartf def /pchartd pchartdf def} {/pchart1 3 def} ifelse /colsepf where {pop /colsep1 colsepf def /colsep2 colsepf def /colsepd colsepdf def} {/colsep1 0 def} ifelse /pmetamf where {pop /pmetam1 pmetamf def /pmetam2 pmetamf def /pmetamd pmetamdf def} {/pmetam1 0 def} ifelse %either defaul values for xchart=0 or values for xchart=1 /lanind lanind1 def % /colorm colorm1 def % /deintp deintp1 def % /xcolor xcolor1 def % /xchart xchart1 def % /pchart pchart1 def % /colsep colsep1 def % /pmetam pmetam1 def % colorm 0 eq deintp 0 eq and {/Txx (d) def /Fxx (d) def} if %colorm=0, deintp=0 colorm 0 eq deintp 1 eq and {/Txx (e) def /Fxx (e) def} if %colorm=0, deintp=1 colorm 1 eq deintp 0 eq and {/Txx (dd) def /Fxx (d) def} if %colorm=1, deintp=0 colorm 1 eq deintp 1 eq and {/Txx (de) def /Fxx (e) def} if %colorm=1, deintp=1 xchart 0 eq {/Txx (-) def /Fxx (-) def} if %always independent of intended output %********************************************************** /iai -1 def %count d_CIELAB all /i2i -1 def %count d_CIELAB<=XX /cvishow {cvi 6 string cvs show} def %75 85 moveto %lanind cvishow (-) show %colorm cvishow %deintp cvishow %xcolor cvishow %xchart cvishow %pchart cvishow %colsep cvishow (-L) show pmetam cvishow %STOPL proc_309labdat %STOPL1 /d_CIELAB_min 99998 def /d_CIELCH_min 99998 def /d_C94LCH_min 99998 def /d_CMCLCH_min 99998 def /d_C00LCH_min 99998 def /d_C85LCH_min 99998 def /d_CM2LCH_min 99998 def /d_C77LCH_min 99998 def /d_C78LCH_min 99998 def /d_C79LCH_min 99998 def /d_CIELABm_min 99998 def /d_CIELCHm_min 99998 def /d_C94LCHm_min 99998 def /d_CMCLCHm_min 99998 def /d_C00LCHm_min 99998 def /d_C85LCHm_min 99998 def /d_CIELAB_max 0 def /d_CIELCH_max 0 def /d_C94LCH_max 0 def /d_CMCLCH_max 0 def /d_C00LCH_max 0 def /d_C85LCH_max 0 def /d_CM2LCH_max 0 def /d_C77LCH_max 0 def /d_C78LCH_max 0 def /d_C79LCH_max 0 def /d_CIELABm_max 0 def /d_CIELCHm_max 0 def /d_C94LCHm_max 0 def /d_CMCLCHm_max 0 def /d_C00LCHm_max 0 def /d_C85LCHm_max 0 def %iim x 21 data for CIELAB/CIELCH=1 0 1 iim {/i exch def %i=0,iim /i10 i 10 mul def /i21 i 21 mul def /XW XYZ i21 0 add get 0.001 mul def %XW /YW XYZ i21 1 add get 0.001 mul def %YW /ZW XYZ i21 2 add get 0.001 mul def %ZW /X0 XYZ i21 3 add get 0.001 mul def %X0 /Y0 XYZ i21 4 add get 0.001 mul def %Y0 /Z0 XYZ i21 5 add get 0.001 mul def %Z0 /X1 XYZ i21 6 add get 0.001 mul def %X1 /Y1 XYZ i21 7 add get 0.001 mul def %Y1 /Z1 XYZ i21 8 add get 0.001 mul def %Z1 /DV XYZ i21 9 add get 0.001 mul def %DV %STOPP %defines all d_CIELABi and others up to d_C85LCHi (i=0,308) proc_coldiff proc_colcode proc_minmax xchart3 0 eq {%xchart3=0 XYZ i21 10 add d_CIELABi i get 1000 mul put %d_CIELAB XYZ i21 11 add d_CIELCHi i get 1000 mul put %d_CIELCH XYZ i21 12 add d_C94LCHi i get 1000 mul put %d_CIE94 XYZ i21 13 add d_CMCLCHi i get 1000 mul put %d_CMC(l:c=1:1) XYZ i21 14 add d_C00LCHi i get 1000 mul put %d_CIEDE2000 XYZ i21 15 add d_C85LCHi i get 1000 mul put %d_LABJND } if %xchart3=0 xchart3 1 eq {%xchart3=1 XYZ i21 10 add d_CIELABi i get 1000 mul put %d_CIELAB XYZ i21 11 add d_CIELCHi i get 1000 mul put %d_CIELCH XYZ i21 12 add d_CM2LCHi i get 1000 mul put %d_CM2(l:c=1:2) XYZ i21 13 add d_C77LCHi i get 1000 mul put %d_LABHNU_1977 XYZ i21 14 add d_C78LCHi i get 1000 mul put %d_LABHNU1_1978 XYZ i21 15 add d_C79LCHi i get 1000 mul put %d_LABHNU2_1979 } if %xchart3=1 xchart3 2 eq {%xchart3=2 XYZ i21 10 add d_CIELABmi i get 1000 mul put %d_CIELAB XYZ i21 11 add d_CIELCHmi i get 1000 mul put %d_CIELCH XYZ i21 12 add d_C94LCHmi i get 1000 mul put %d_CIE94m XYZ i21 13 add d_CMCLCHmi i get 1000 mul put %d_CMCm(l:c=1:1) XYZ i21 14 add d_C00LCHmi i get 1000 mul put %d_CIEDE2000m XYZ i21 15 add d_C85LCHmi i get 1000 mul put %d_LABJNDm } if %xchart3=2 } for %i=0,iim %now i=iim %all data XYZ (iim x 21 data available %************************************************************** % second part for delta_visual=1 %0 1 xcmax {/xchart exch def %xcmax=0,x gsave 5 /Times-ISOL1 FS 175 85 moveto (WG280-7N) show 72 90 translate /yhoe 8500 def 0.02 MM dup scale 15 setlinewidth 0.0 0.0 0.0 0.0 setcmyk_olvcolor 0 0 moveto 12700 0 rlineto 0 yhoe rlineto -12700 0 rlineto closepath fill 0.0 0.0 0.0 1.0 setcmyk_olvcolor 0 0 moveto 12700 0 rlineto 0 yhoe rlineto -12700 0 rlineto closepath stroke /i1 xchart xchart xcmax eq {1 sub} if 50 mul def xchart xcmax 1 sub lt {/i2 i1 49 add def} {/i2 i1 ii2 add def} ifelse %************************************************************* %large loop i1 1 i2 {/i exch def %i=i1,i2 /i10 i 10 mul def /i21 i 21 mul def /XW XYZ i21 0 add get 0.001 mul def %XW /YW XYZ i21 1 add get 0.001 mul def %YW /ZW XYZ i21 2 add get 0.001 mul def %ZW /X0 XYZ i21 3 add get 0.001 mul def %X0 /Y0 XYZ i21 4 add get 0.001 mul def %Y0 /Z0 XYZ i21 5 add get 0.001 mul def %Z0 /X1 XYZ i21 6 add get 0.001 mul def %X1 /Y1 XYZ i21 7 add get 0.001 mul def %Y1 /Z1 XYZ i21 8 add get 0.001 mul def %Z1 /DX1_0 X1 X0 sub def /DY1_0 Y1 Y0 sub def /DZ1_0 Z1 Z0 sub def xchart3 0 eq {%xchart3=0 xchart4 0 eq {/d_CXXLCH d_CIELCHi i get def} if xchart4 1 eq {/d_CXXLCH d_C94LCHi i get def} if xchart4 2 eq {/d_CXXLCH d_CMCLCHi i get def} if xchart4 3 eq {/d_CXXLCH d_C00LCHi i get def} if xchart4 4 eq {/d_CXXLCH d_C85LCHi i get def} if } if %xchart3=0 xchart3 1 eq {%xchart3=1 xchart4 0 eq {/d_CXXLCH d_CIELCHi i get def} if xchart4 1 eq {/d_CXXLCH d_CM2LCHi i get def} if xchart4 2 eq {/d_CXXLCH d_C77LCHi i get def} if xchart4 3 eq {/d_CXXLCH d_C78LCHi i get def} if xchart4 4 eq {/d_CXXLCH d_C79LCHi i get def} if } if %xchart3=1 xchart3 2 eq {%xchart3=2 xchart4 0 eq {/d_CXXLCH d_CIELCHmi i get def} if xchart4 1 eq {/d_CXXLCH d_C94LCHmi i get def} if xchart4 2 eq {/d_CXXLCH d_CMCLCHmi i get def} if xchart4 3 eq {/d_CXXLCH d_C00LCHmi i get def} if xchart4 4 eq {/d_CXXLCH d_C85LCHmi i get def} if } if %xchart3=2 /ivis 1 def ivis 1 eq {%ivis=1 %special visual difference, can be 1000 or different (_WI, _LE, _BF) /d_CXXLCH XYZ i21 9 add get 0.001 mul def %visual difference } if %ivis=1 xchart3 2 eq {%xchart3=2, PF inverse %d_C85LCHmi i d_C85LCHi i get b_C85LCH exp a_C85LCH mul put %UMKEHRUNG ohne a_ undeined why! %d_CXXLCHS = d_CXXLCH b_C85LCH exp a_C85LCH mul %d_CXXLCHR = d_CXXLCHS a_C85LCH div b_C85div exp xchart4 1 eq {%xchart4=1, CIE94,PF /a_C94LCH 1.41 def /b_C94LCH 0.70 def /b_C94div 1. b_C94LCH div def /d_CXXLCH d_CXXLCH b_C94div exp def } if %xchart4=1 xchart4 3 eq {%xchart4=3, CIEDE2000,PF /a_C00LCH 1.43 def /b_C00LCH 0.70 def /b_C00div 1. b_C00LCH div def /d_CXXLCH d_CXXLCH b_C00div exp def } if %xchart4=3 xchart4 4 eq {%xchart4=4, LABJND,PF /a_C85LCH 1.17 def /b_C85LCH 0.35 def /b_C85div 1. b_C85LCH div def /d_CXXLCH d_CXXLCH b_C85div exp def } if %xchart4=4 } if %xchart3=2, PF inverse DX1_0 abs FL le %less than FL=0.000001 {/DX1_0 0 def} {/DX1_0 DX1_0 d_CXXLCH FL add div def} ifelse DY1_0 abs FL le {/DY1_0 0 def} {/DY1_0 DY1_0 d_CXXLCH FL add div def} ifelse DZ1_0 abs FL le {/DZ1_0 0 def} {/DZ1_0 DZ1_0 d_CXXLCH FL add div def} ifelse /X1 X0 DX1_0 add def X1 FY lt {/X1 FY def} if %less than XYZ=0.001 /Y1 Y0 DY1_0 add def Y1 FY lt {/Y1 FY def} if /Z1 Z0 DZ1_0 add def Z1 FY lt {/Z1 FY def} if %new XYZ for d_CIEDE2000=1 XYZ i21 06 add X1 1000 mul put %new X1, may be equal for ivis=1 XYZ i21 07 add Y1 1000 mul put %new Y1 XYZ i21 08 add Z1 1000 mul put %new Z1 %STOPG proc_coldiff %STOPG0 proc_colcode %STOPG1 proc_minmax %STOPG2 xchart3 0 eq {%xchart3=0,1 XYZ i21 10 add d_CIELABi i get 1000 mul put %d_CIELAB XYZ i21 11 add d_CIELCHi i get 1000 mul put %d_CIELCH XYZ i21 12 add d_C94LCHi i get 1000 mul put %d_CIE94 XYZ i21 13 add d_CMCLCHi i get 1000 mul put %d_CMC(l:c=1:1) XYZ i21 14 add d_C00LCHi i get 1000 mul put %d_CIEDE2000 XYZ i21 15 add d_C85LCHi i get 1000 mul put %d_LABJND } if %xchart3=0 xchart3 1 eq {%xchart3=1 XYZ i21 10 add d_CIELABi i get 1000 mul put %d_CIELAB XYZ i21 11 add d_CIELCHi i get 1000 mul put %d_CIELCH XYZ i21 12 add d_CM2LCHi i get 1000 mul put %d_CM2(l:c=1:2) XYZ i21 13 add d_C77LCHi i get 1000 mul put %d_LABHNU_1977 XYZ i21 14 add d_C78LCHi i get 1000 mul put %d_LABHNU1_1978 XYZ i21 15 add d_C79LCHi i get 1000 mul put %d_LABHNU2_1979 } if %xchart3=0,1 xchart3 2 eq {%xchart3=2 XYZ i21 10 add d_CIELABmi i get 1000 mul put %d_CIELABm XYZ i21 11 add d_CIELCHmi i get 1000 mul put %d_CIELCHm XYZ i21 12 add d_C94LCHmi i get 1000 mul put %d_CIE94m XYZ i21 13 add d_CMCLCHmi i get 1000 mul put %d_CMCm(l:c=1:1) XYZ i21 14 add d_C00LCHmi i get 1000 mul put %d_CIEDE2000m XYZ i21 15 add d_C85LCHmi i get 1000 mul put %d_LABJNDm } if %xchart3=2 XYZ i21 16 add XYZ i21 16 add get i add put %add sample number CBSK /xp0 0050 def /xp1 6650 def /xdel 620 def /xdel0 650 def /xdel1 550 def /ydel 160 def /yhot yhoe ydel 1 mul sub def /cvi9show {cvi 9 string cvs show} def xchart xcmax lt {%xchart