source: trunk/SRC/ToBeReviewed/POSTSCRIPT/chcolps.pro @ 72

Last change on this file since 72 was 16, checked in by pinsard, 18 years ago

upgrade of POSTSCRIPT/Postscript according to cerbere.lodyc.jussieu.fr: /usr/home/smasson/SAXO_RD/ : files

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 3.5 KB
Line 
1PRO chcolps, n1, n2, file, PALIT1 = palit1, PALIT2 = palit2
2;;
3;; Modifie les couleurs d''un fichier postscript
4;;
5;; Creation : G. Roullet 1999
6;;
7;
8; recupere les palettes
9;
10    lct, n1
11    IF keyword_set(palit1) THEN palit, palit1
12    tvlct, red, green, blue, /get
13
14    lct, n2
15    IF keyword_set(palit2) THEN palit, palit2
16    tvlct, red1, green1, blue1, /get
17;
18;
19;
20    filein = file
21    fileout = file+'.new'
22   
23    openr, numin, filein, /get_lun
24    openw, numout, fileout, /get_lun
25    ligne = ''
26    nl = 0
27    colortab = 0
28;
29; Scan le fichier
30;
31    WHILE NOT(eof(numin)) DO BEGIN
32          readf, numin, ligne, format = '(A)'
33          nl = nl+1
34;
35; Replace setrgbcolor statements
36;
37          pos = strpos(ligne, 'setrgbcolor')
38          IF pos NE -1 THEN BEGIN
39                r = round(float(strmid(ligne, pos-18, 6))*255)
40                g = round(float(strmid(ligne, pos-12, 6))*255)
41                b = round(float(strmid(ligne, pos-6, 6))*255)         
42                ind = where(r EQ red AND g EQ green AND b EQ blue)
43                ind = ind[0]
44                IF ind[0] NE -1 THEN BEGIN
45                      r1 = red1[ind]/255.
46                      g1 = green1[ind]/255.
47                      b1 = blue1[ind]/255.
48                      color = string(r1, g1, b1, format = '(3(F5.3,:,X))')
49                      strput, ligne, color, pos-18
50                ENDIF ELSE BEGIN
51;                      print, 'erreur ligne :', nl
52                      dist = abs(r-red)+abs(g-green)+abs(b-blue)
53                      ind = (where(dist EQ min(dist)))[0]
54                      ind = ind[0]
55;                      print, 'je trouve            ', long([r, g, b])
56;                      print, 'je remplace par ', [red[ind], green[ind], blue[ind]]
57                      r1 = red1[ind]/255.
58                      g1 = green1[ind]/255.
59                      b1 = blue1[ind]/255.
60                      color = string(r1, g1, b1, format = '(3(F5.3,:,X))')
61                      strput, ligne, color, pos-18
62                ENDELSE
63          ENDIF           
64;
65; Replace COLORTAB
66;
67          pos = strpos(ligne, '/COLORTAB')
68          IF pos NE -1 THEN BEGIN
69                build_table, table
70                n = 0
71                colortab = 1
72          ENDIF
73
74          IF colortab THEN BEGIN
75                ligne = table[n]
76                n = n+1
77                IF n EQ 24 THEN colortab = 0
78          ENDIF
79;
80; Ecrit le fichier de sorti
81;
82          printf, numout, ligne, format = '(A)'
83    ENDWHILE
84    close, numin
85    close, numout
86    free_lun, numin
87    free_lun, numout
88
89    spawn, 'gs '+fileout
90
91END
92
93PRO build_table, tableout
94;
95; Fabrique le bloc de colortable
96;
97
98    format_colortable_hexa, table
99
100
101    tableout = strarr(25)
102
103    tableout[0] = '/COLORTAB < '
104    FOR k = 0, 8 DO tableout[0] = tableout[0]+table[k]+' '
105    FOR i = 1, 22 DO BEGIN
106          FOR k = 11*i-2, 11*i+8 DO tableout[i] = tableout[i]+table[k]+' '
107    ENDFOR
108    FOR k = 251, 255 DO tableout[i] = tableout[i]+table[k]+' '
109    tableout[i] = tableout[i]+'> def'
110   
111END
112
113
114PRO format_colortable_hexa, table
115
116    tvlct, r, g, b, /get
117
118    z = strarr(256)
119    y = strarr(256)
120    for k=0,255 do z[k]='00'+strtrim(string(r[k], format = '(Z)'),2)
121    for k=0,255 do y[k]=y[k]+strmid(z[k],strlen(z[k])-2,2)
122
123    for k=0,255 do z[k]='00'+strtrim(string(g[k], format = '(Z)'),2)
124    for k=0,255 do y[k]=y[k]+strmid(z[k],strlen(z[k])-2,2)
125
126    for k=0,255 do z[k]='00'+strtrim(string(b[k], format = '(Z)'),2)
127    for k=0,255 do y[k]=y[k]+strmid(z[k],strlen(z[k])-2,2)
128   
129    table =  strlowcase(y)
130
131END
132
133
134
135
136
137
Note: See TracBrowser for help on using the repository browser.