~ubuntu-branches/ubuntu/jaunty/gimp/jaunty-security

« back to all changes in this revision

Viewing changes to plug-ins/script-fu/scripts/hsv-graph.scm

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Holbach
  • Date: 2007-05-02 16:33:03 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20070502163303-bvzhjzbpw8qglc4y
Tags: 2.3.16-1ubuntu1
* Resynchronized with Debian, remaining Ubuntu changes:
  - debian/rules: i18n magic.
* debian/control.in:
  - Maintainer: Ubuntu Core Developers <ubuntu-devel@lists.ubuntu.com>
* debian/patches/02_help-message.patch,
  debian/patches/03_gimp.desktop.in.in.patch,
  debian/patches/10_dont_show_wizard.patch: updated.
* debian/patches/04_composite-signedness.patch,
  debian/patches/05_add-letter-spacing.patch: dropped, used upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
10
10
; ************************************************************************
11
11
;;; Code:
12
12
 
13
 
(if (not (symbol-bound? 'script-fu-hsv-graph-scale (the-environment)))
 
13
(if (not (symbol-bound? 'script-fu-hsv-graph-scale (current-environment)))
14
14
    (define script-fu-hsv-graph-scale 1))
15
 
(if (not (symbol-bound? 'script-fu-hsv-graph-opacity (the-environment)))
 
15
(if (not (symbol-bound? 'script-fu-hsv-graph-opacity (current-environment)))
16
16
    (define script-fu-hsv-graph-opacity 100))
17
 
(if (not (symbol-bound? 'script-fu-hsv-graph-bounds? (the-environment)))
 
17
(if (not (symbol-bound? 'script-fu-hsv-graph-bounds? (current-environment)))
18
18
    (define script-fu-hsv-graph-bounds? TRUE))
19
 
(if (not (symbol-bound? 'script-fu-hsv-graph-left2right? (the-environment)))
 
19
(if (not (symbol-bound? 'script-fu-hsv-graph-left2right? (current-environment)))
20
20
    (define script-fu-hsv-graph-left2right? FALSE))
21
 
(if (not (symbol-bound? 'script-fu-hsv-graph-beg-x (the-environment)))
 
21
(if (not (symbol-bound? 'script-fu-hsv-graph-beg-x (current-environment)))
22
22
    (define script-fu-hsv-graph-beg-x 0))
23
 
(if (not (symbol-bound? 'script-fu-hsv-graph-beg-y (the-environment)))
 
23
(if (not (symbol-bound? 'script-fu-hsv-graph-beg-y (current-environment)))
24
24
    (define script-fu-hsv-graph-beg-y 0))
25
 
(if (not (symbol-bound? 'script-fu-hsv-graph-end-x (the-environment)))
 
25
(if (not (symbol-bound? 'script-fu-hsv-graph-end-x (current-environment)))
26
26
    (define script-fu-hsv-graph-end-x 1))
27
 
(if (not (symbol-bound? 'script-fu-hsv-graph-end-y (the-environment)))
 
27
(if (not (symbol-bound? 'script-fu-hsv-graph-end-y (current-environment)))
28
28
    (define script-fu-hsv-graph-end-y 1))
29
29
 
30
30
(define (script-fu-hsv-graph img drawable scale opacity bounds?
31
 
                             left2right? beg-x beg-y end-x end-y)
 
31
                           left2right? beg-x beg-y end-x end-y)
32
32
  (define (floor x) (- x (fmod x 1)))
33
33
  (define *pos* #f)
34
34
  (define (set-point! fvec index x y)
35
35
    (aset fvec (* 2 index) x)
36
36
    (aset fvec (+ (* 2 index) 1) y)
37
 
    fvec)
 
37
    fvec
 
38
  )
38
39
 
39
40
  (define (plot-dot img drawable x y)
40
 
    (gimp-pencil drawable 1 (set-point! *pos* 0 x y)))
 
41
    (gimp-pencil drawable 1 (set-point! *pos* 0 x y))
 
42
  )
41
43
 
42
44
  (define (rgb-to-hsv rgb hsv)
43
 
    (let* ((red (floor (nth 0 rgb)))
44
 
           (green (floor (nth 1 rgb)))
45
 
           (blue (floor (nth 2 rgb)))
46
 
           (h 0.0)
47
 
           (s 0.0)
48
 
           (minv (min red (min green blue)))
49
 
           (maxv (max red (max green blue)))
50
 
           (v maxv)
51
 
           (delta 0))
 
45
    (let* (
 
46
          (red (floor (nth 0 rgb)))
 
47
          (green (floor (nth 1 rgb)))
 
48
          (blue (floor (nth 2 rgb)))
 
49
          (h 0.0)
 
50
          (s 0.0)
 
51
          (minv (min red (min green blue)))
 
52
          (maxv (max red (max green blue)))
 
53
          (v maxv)
 
54
          (delta 0)
 
55
          )
52
56
      (if (not (= 0 maxv))
53
 
          (set! s (/ (* (- maxv minv) 255.0) maxv))
54
 
          (set! s 0.0))
 
57
          (set! s (/ (* (- maxv minv) 255.0) maxv))
 
58
          (set! s 0.0)
 
59
      )
55
60
      (if (= 0.0 s)
56
 
          (set! h 0.0)
57
 
          (begin
58
 
            (set! delta (- maxv minv))
59
 
            (cond ((= maxv red)
60
 
                   (set! h (/ (- green blue) delta)))
61
 
                  ((= maxv green)
62
 
                   (set! h (+ 2.0 (/ (- blue red) delta))))
63
 
                  ((= maxv blue)
64
 
                   (set! h (+ 4.0 (/ (- red green) delta)))))
65
 
            (set! h (* 42.5 h))
66
 
            (if (< h 0.0)
67
 
                (set! h (+ h 255.0)))
68
 
            (if (< 255 h)
69
 
                (set! h (- h 255.0)))))
 
61
          (set! h 0.0)
 
62
          (begin
 
63
            (set! delta (- maxv minv))
 
64
            (cond ((= maxv red)
 
65
                   (set! h (/ (- green blue) delta)))
 
66
                  ((= maxv green)
 
67
                   (set! h (+ 2.0 (/ (- blue red) delta))))
 
68
                  ((= maxv blue)
 
69
                   (set! h (+ 4.0 (/ (- red green) delta)))))
 
70
            (set! h (* 42.5 h))
 
71
            (if (< h 0.0)
 
72
                (set! h (+ h 255.0)))
 
73
            (if (< 255 h)
 
74
                (set! h (- h 255.0))))
 
75
      )
70
76
      (set-car! hsv (floor h))
71
77
      (set-car! (cdr hsv) (floor s))
72
 
      (set-car! (cddr hsv) (floor v))))
 
78
      (set-car! (cddr hsv) (floor v))
 
79
    )
 
80
  )
73
81
 
74
82
  ;; segment is
75
83
  ;;   filled-index (integer)
76
84
  ;;   size as number of points (integer)
77
85
  ;;   vector (which size is 2 * size)
78
86
  (define (make-segment length x y)
79
 
    (if (< 64 length)
80
 
        (set! length 64))
81
 
    (if (< length 5)
82
 
        (set! length 5))
83
 
    (let ((vec (cons-array (* 2 length) 'double)))
84
 
      (aset vec 0 x)
85
 
      (aset vec 1 y)
86
 
      (list 1 length vec)))
 
87
    (if (< 64 length) (set! length 64))
 
88
    (if (< length 5)  (set! length 5))
 
89
    (let (
 
90
         (vec (cons-array (* 2 length) 'double)))
 
91
         (aset vec 0 x)
 
92
         (aset vec 1 y)
 
93
         (list 1 length vec)
 
94
    )
 
95
  )
87
96
 
88
97
  ;; accessors
89
98
  (define (segment-filled-size segment) (car segment))
91
100
  (define (segment-strokes segment) (caddr segment))
92
101
 
93
102
  (define (fill-segment! segment new-x new-y)
 
103
 
94
104
    (define (shift-segment! segment)
95
105
      (let ((base 0)
96
 
            (size (cadr segment))
97
 
            (vec (caddr segment))
98
 
            (offset 2))
99
 
        (while (< base offset)
100
 
               (aset vec (* 2 base)
101
 
                     (aref vec (* 2 (- size (- offset base)))))
102
 
               (aset vec (+ (* 2 base) 1)
103
 
                     (aref vec (+ (* 2 (- size (- offset base))) 1)))
104
 
               (set! base (+ base 1)))
105
 
        (set-car! segment base)))
 
106
            (size (cadr segment))
 
107
            (vec (caddr segment))
 
108
            (offset 2))
 
109
        (while (< base offset)
 
110
               (aset vec (* 2 base)
 
111
                     (aref vec (* 2 (- size (- offset base)))))
 
112
               (aset vec (+ (* 2 base) 1)
 
113
                     (aref vec (+ (* 2 (- size (- offset base))) 1)))
 
114
               (set! base (+ base 1)))
 
115
        (set-car! segment base))
 
116
    )
 
117
 
106
118
    (let ((base (car segment))
107
 
          (size (cadr segment))
108
 
          (vec (caddr segment)))
 
119
          (size (cadr segment))
 
120
          (vec (caddr segment)))
109
121
      (if (= base 0)
110
 
          (begin
111
 
            (shift-segment! segment)
112
 
            (set! base (segment-filled-size segment))))
 
122
          (begin
 
123
            (shift-segment! segment)
 
124
            (set! base (segment-filled-size segment))))
113
125
      (if (and (= new-x (aref vec (* 2 (- base 1))))
114
 
               (= new-y (aref vec (+ (* 2 (- base 1)) 1))))
115
 
          #f
116
 
          (begin
117
 
            (aset vec (* 2 base) new-x)
118
 
            (aset vec (+ (* 2 base) 1) new-y)
119
 
            (set! base (+ base 1))
120
 
            (if (= base size)
121
 
                (begin
122
 
                  (set-car! segment 0)
123
 
                  #t)
124
 
                (begin
125
 
                  (set-car! segment base)
126
 
                  #f))))))
 
126
               (= new-y (aref vec (+ (* 2 (- base 1)) 1))))
 
127
          #f
 
128
          (begin
 
129
            (aset vec (* 2 base) new-x)
 
130
            (aset vec (+ (* 2 base) 1) new-y)
 
131
            (set! base (+ base 1))
 
132
            (if (= base size)
 
133
                (begin
 
134
                  (set-car! segment 0)
 
135
                  #t)
 
136
                (begin
 
137
                  (set-car! segment base)
 
138
                  #f))))
 
139
    )
 
140
  )
127
141
 
128
142
  (define (draw-segment img drawable segment limit rgb)
129
143
    (gimp-context-set-foreground rgb)
130
 
    (gimp-airbrush drawable 100 (* 2 limit) (segment-strokes segment)))
 
144
    (gimp-airbrush drawable 100 (* 2 limit) (segment-strokes segment))
 
145
  )
131
146
 
132
147
  (define red-color '(255 10 10))
133
148
  (define green-color '(10 255 10))
142
157
 
143
158
  (define (fill-dot img drawable x y segment color)
144
159
    (if (fill-segment! segment x y)
145
 
        (begin
146
 
          (gimp-context-set-foreground color)
147
 
          (draw-segment img drawable segment (segment-max-size segment) color)
148
 
          #t)
149
 
        #f))
 
160
        (begin
 
161
          (gimp-context-set-foreground color)
 
162
          (draw-segment img drawable segment (segment-max-size segment) color)
 
163
          #t)
 
164
        #f)
 
165
  )
150
166
 
151
167
  (define (fill-color-band img drawable x scale x-base y-base color)
152
168
    (gimp-context-set-foreground color)
153
169
    (gimp-rect-select img (+ x-base (* scale x)) 0 scale y-base CHANNEL-OP-REPLACE FALSE 0)
154
170
    (gimp-edit-bucket-fill drawable FG-BUCKET-FILL NORMAL-MODE 100 0 FALSE 0 0)
155
 
    (gimp-selection-none img))
 
171
    (gimp-selection-none img)
 
172
  )
156
173
 
157
174
  (define (plot-hsv img drawable x scale x-base y-base hsv)
158
175
    (let ((real-x (* scale x))
159
 
          (h (car hsv))
160
 
          (s (cadr hsv))
161
 
          (v (caddr hsv)))
 
176
          (h (car hsv))
 
177
          (s (cadr hsv))
 
178
          (v (caddr hsv)))
162
179
      (fill-dot img drawable (+ x-base real-x) (- y-base h)
163
 
                hue-segment red-color)
 
180
                hue-segment red-color)
164
181
      (fill-dot img drawable (+ x-base real-x) (- y-base s)
165
 
                saturation-segment green-color)
 
182
                saturation-segment green-color)
166
183
      (if (fill-dot img drawable (+ x-base real-x) (- y-base v)
167
 
                    value-segment blue-color)
168
 
          (gimp-displays-flush))))
 
184
                    value-segment blue-color)
 
185
          (gimp-displays-flush)))
 
186
  )
169
187
 
170
188
  (define (plot-rgb img drawable x scale x-base y-base hsv)
171
189
    (let ((real-x (* scale x))
172
 
          (h (car hsv))
173
 
          (s (cadr hsv))
174
 
          (v (caddr hsv)))
 
190
          (h (car hsv))
 
191
          (s (cadr hsv))
 
192
          (v (caddr hsv)))
175
193
      (fill-dot img drawable (+ x-base real-x) (- y-base h)
176
 
                red-segment red-color)
 
194
                red-segment red-color)
177
195
      (fill-dot img drawable (+ x-base real-x) (- y-base s)
178
 
                green-segment green-color)
 
196
                green-segment green-color)
179
197
      (if (fill-dot img drawable (+ x-base real-x) (- y-base v)
180
 
                    blue-segment blue-color)
181
 
          (gimp-displays-flush))))
 
198
                    blue-segment blue-color)
 
199
          (gimp-displays-flush)))
 
200
  )
182
201
 
183
202
  (define (clamp-value x minv maxv)
184
203
    (if (< x minv)
185
 
        (set! x minv))
 
204
        (set! x minv))
186
205
    (if (< maxv x)
187
 
        (set! x maxv))
188
 
    x)
 
206
        (set! x maxv))
 
207
    x
 
208
  )
189
209
 
190
210
  ;; start of script-fu-hsv-graph
191
211
  (if (= TRUE bounds?)
192
212
      (if (= TRUE (car (gimp-selection-bounds img)))
193
 
          (let ((results (gimp-selection-bounds img)))
194
 
            (set! beg-x (nth (if (= TRUE left2right?) 1 3) results))
195
 
            (set! beg-y (nth 2 results))
196
 
            (set! end-x (nth (if (= TRUE left2right?) 3 1) results))
197
 
            (set! end-y (nth 4 results)))
198
 
          (let ((offsets (gimp-drawable-offsets drawable)))
199
 
            (set! beg-x (if (= TRUE left2right?)
200
 
                            (nth 0 offsets)
201
 
                            (- (+ (nth 0 offsets)
202
 
                                  (car (gimp-drawable-width drawable)))
203
 
                               1)))
204
 
            (set! beg-y (nth 1 offsets))
205
 
            (set! end-x (if (= TRUE left2right?)
206
 
                            (- (+ (nth 0 offsets)
207
 
                                  (car (gimp-drawable-width drawable)))
208
 
                               1)
209
 
                            (nth 0 offsets)))
210
 
            (set! end-y (- (+ (nth 1 offsets)
211
 
                              (car (gimp-drawable-height drawable)))
212
 
                           1))))
 
213
          (let ((results (gimp-selection-bounds img)))
 
214
            (set! beg-x (nth (if (= TRUE left2right?) 1 3) results))
 
215
            (set! beg-y (nth 2 results))
 
216
            (set! end-x (nth (if (= TRUE left2right?) 3 1) results))
 
217
            (set! end-y (nth 4 results)))
 
218
          (let ((offsets (gimp-drawable-offsets drawable)))
 
219
            (set! beg-x (if (= TRUE left2right?)
 
220
                            (nth 0 offsets)
 
221
                            (- (+ (nth 0 offsets)
 
222
                                  (car (gimp-drawable-width drawable)))
 
223
                               1)))
 
224
            (set! beg-y (nth 1 offsets))
 
225
            (set! end-x (if (= TRUE left2right?)
 
226
                            (- (+ (nth 0 offsets)
 
227
                                  (car (gimp-drawable-width drawable)))
 
228
                               1)
 
229
                            (nth 0 offsets)))
 
230
            (set! end-y (- (+ (nth 1 offsets)
 
231
                              (car (gimp-drawable-height drawable)))
 
232
                           1))))
213
233
      (let ((offsets (gimp-drawable-offsets drawable)))
214
 
        (set! beg-x (clamp-value beg-x 0
215
 
                                 (+ (nth 0 offsets)
216
 
                                    (car (gimp-drawable-width drawable)))))
217
 
        (set! end-x (clamp-value end-x 0
218
 
                                 (+ (nth 0 offsets)
219
 
                                    (car (gimp-drawable-width drawable)))))
220
 
        (set! beg-y (clamp-value beg-y 0
221
 
                                 (+ (nth 1 offsets)
222
 
                                    (car (gimp-drawable-height drawable)))))
223
 
        (set! end-y (clamp-value end-y 0
224
 
                                 (+ (nth 1 offsets)
225
 
                                    (car (gimp-drawable-height drawable)))))))
 
234
        (set! beg-x (clamp-value beg-x 0
 
235
                                 (+ (nth 0 offsets)
 
236
                                    (car (gimp-drawable-width drawable)))))
 
237
        (set! end-x (clamp-value end-x 0
 
238
                                 (+ (nth 0 offsets)
 
239
                                    (car (gimp-drawable-width drawable)))))
 
240
        (set! beg-y (clamp-value beg-y 0
 
241
                                 (+ (nth 1 offsets)
 
242
                                    (car (gimp-drawable-height drawable)))))
 
243
        (set! end-y (clamp-value end-y 0
 
244
                                 (+ (nth 1 offsets)
 
245
                                    (car (gimp-drawable-height drawable)))))))
226
246
  (set! opacity (clamp-value opacity 0 100))
227
247
  (let* ((x-len (- end-x beg-x))
228
 
         (y-len (- end-y beg-y))
229
 
         (limit (pow (+ (pow x-len 2) (pow y-len 2)) 0.5))
230
 
         (gimg-width (* limit scale))
231
 
         (gimg-height 256)
232
 
         (gimg (car (gimp-image-new (+ (* 2 border-size) gimg-width)
233
 
                                    (+ (* 2 border-size) gimg-height) RGB)))
234
 
         (bglayer (car (gimp-layer-new gimg
235
 
                                       (+ (* 2 border-size) gimg-width)
236
 
                                       (+ (* 2 border-size) gimg-height)
237
 
                                       1 "Background" 100 NORMAL-MODE)))
238
 
         (hsv-layer (car (gimp-layer-new gimg
239
 
                                       (+ (* 2 border-size) gimg-width)
240
 
                                       (+ (* 2 border-size) gimg-height)
241
 
                                      RGBA-IMAGE "HSV Graph" 100 NORMAL-MODE)))
242
 
         (rgb-layer (car (gimp-layer-new gimg
243
 
                                       (+ (* 2 border-size) gimg-width)
244
 
                                       (+ (* 2 border-size) gimg-height)
245
 
                                      RGBA-IMAGE "RGB Graph" 100 NORMAL-MODE)))
246
 
         (clayer (car (gimp-layer-new gimg gimg-width 40 RGBA-IMAGE
247
 
                                       "Color Sampled" opacity NORMAL-MODE)))
248
 
         (rgb '(255 255 255))
249
 
         (hsv '(254 255 255))
250
 
         (x-base border-size)
251
 
         (y-base (+ gimg-height border-size))
252
 
         (index 0))
 
248
         (y-len (- end-y beg-y))
 
249
         (limit (pow (+ (pow x-len 2) (pow y-len 2)) 0.5))
 
250
         (gimg-width (* limit scale))
 
251
         (gimg-height 256)
 
252
         (gimg (car (gimp-image-new (+ (* 2 border-size) gimg-width)
 
253
                                    (+ (* 2 border-size) gimg-height) RGB)))
 
254
         (bglayer (car (gimp-layer-new gimg
 
255
                                       (+ (* 2 border-size) gimg-width)
 
256
                                       (+ (* 2 border-size) gimg-height)
 
257
                                       1 "Background" 100 NORMAL-MODE)))
 
258
         (hsv-layer (car (gimp-layer-new gimg
 
259
                                       (+ (* 2 border-size) gimg-width)
 
260
                                       (+ (* 2 border-size) gimg-height)
 
261
                                      RGBA-IMAGE "HSV Graph" 100 NORMAL-MODE)))
 
262
         (rgb-layer (car (gimp-layer-new gimg
 
263
                                       (+ (* 2 border-size) gimg-width)
 
264
                                       (+ (* 2 border-size) gimg-height)
 
265
                                      RGBA-IMAGE "RGB Graph" 100 NORMAL-MODE)))
 
266
         (clayer (car (gimp-layer-new gimg gimg-width 40 RGBA-IMAGE
 
267
                                       "Color Sampled" opacity NORMAL-MODE)))
 
268
         (rgb '(255 255 255))
 
269
         (hsv '(254 255 255))
 
270
         (x-base border-size)
 
271
         (y-base (+ gimg-height border-size))
 
272
         (index 0))
253
273
 
254
274
    (gimp-context-push)
255
275
 
279
299
    (gimp-display-new gimg)
280
300
    (while (< index limit)
281
301
      (set! rgb (car (gimp-image-pick-color img drawable
282
 
                                            (+ beg-x (* x-len (/ index limit)))
283
 
                                            (+ beg-y (* y-len (/ index limit)))
284
 
                                            TRUE FALSE 0)))
 
302
                                            (+ beg-x (* x-len (/ index limit)))
 
303
                                            (+ beg-y (* y-len (/ index limit)))
 
304
                                            TRUE FALSE 0)))
285
305
      (fill-color-band gimg clayer index scale x-base 40 rgb)
286
306
      (rgb-to-hsv rgb hsv)
287
307
      (plot-hsv gimg hsv-layer index scale x-base y-base hsv)
290
310
    (mapcar
291
311
     (lambda (segment color)
292
312
       (if (< 1 (segment-filled-size segment))
293
 
        (begin
294
 
          (gimp-context-set-foreground color)
295
 
          (draw-segment gimg hsv-layer segment (segment-filled-size segment)
296
 
                        color))))
 
313
        (begin
 
314
          (gimp-context-set-foreground color)
 
315
          (draw-segment gimg hsv-layer segment (segment-filled-size segment)
 
316
                        color))))
297
317
     (list hue-segment saturation-segment value-segment)
298
318
     (list red-color green-color blue-color))
299
319
    (mapcar
300
320
     (lambda (segment color)
301
321
       (if (< 1 (segment-filled-size segment))
302
 
        (begin
303
 
          (gimp-context-set-foreground color)
304
 
          (draw-segment gimg rgb-layer segment (segment-filled-size segment)
305
 
                        color))))
 
322
        (begin
 
323
          (gimp-context-set-foreground color)
 
324
          (draw-segment gimg rgb-layer segment (segment-filled-size segment)
 
325
                        color))))
306
326
     (list red-segment green-segment blue-segment)
307
327
     (list red-color green-color blue-color))
308
328
    (gimp-context-set-foreground '(255 255 255))
309
329
    (let ((text-layer (car (gimp-text-fontname gimg -1 0 0
310
 
                                      "Red: Hue, Green: Sat, Blue: Val"
311
 
                                      1 1 12 PIXELS
312
 
                                      "Sans")))
313
 
          (offset-y (- y-base (car (gimp-drawable-height clayer)))))
 
330
                            "Red: Hue, Green: Sat, Blue: Val"
 
331
                            1 1 12 PIXELS
 
332
                            "Sans")))
 
333
          (offset-y (- y-base (car (gimp-drawable-height clayer)))))
314
334
      (gimp-layer-set-mode text-layer DIFFERENCE-MODE)
315
335
      (gimp-layer-translate clayer 0 offset-y)
316
336
      (gimp-layer-translate text-layer border-size (+ offset-y 15)))
328
348
    (set! script-fu-hsv-graph-end-y end-y)
329
349
    (gimp-displays-flush)
330
350
 
331
 
    (gimp-context-pop)))
 
351
    (gimp-context-pop)
 
352
  )
 
353
)
332
354
 
333
355
(script-fu-register "script-fu-hsv-graph"
334
 
                    _"Draw _HSV Graph..."
335
 
                    "Draph the graph of H/S/V values on the drawable"
336
 
                    "Shuji Narazaki <narazaki@InetQ.or.jp>"
337
 
                    "Shuji Narazaki"
338
 
                    "1997"
339
 
                    "RGB*"
340
 
                    SF-IMAGE       "Image to analyze"    0
341
 
                    SF-DRAWABLE    "Drawable to analyze" 0
342
 
                    SF-ADJUSTMENT _"Graph scale" (cons script-fu-hsv-graph-scale '(0.1 5 0.1 1 1 1))
343
 
                    SF-ADJUSTMENT _"BG opacity"  (cons script-fu-hsv-graph-opacity '(0 100 1 10 0 1))
344
 
                    SF-TOGGLE     _"Use selection bounds instead of belows" script-fu-hsv-graph-bounds?
345
 
                    SF-TOGGLE     _"From top-left to bottom-right" script-fu-hsv-graph-left2right?
346
 
                    SF-ADJUSTMENT _"Start X" (cons script-fu-hsv-graph-beg-x '(0 5000 1 10 0 1))
347
 
                    SF-ADJUSTMENT _"Start Y" (cons script-fu-hsv-graph-beg-y '(0 5000 1 10 0 1))
348
 
                    SF-ADJUSTMENT _"End X" (cons script-fu-hsv-graph-end-x '(0 5000 1 10 0 1))
349
 
                    SF-ADJUSTMENT _"End Y" (cons script-fu-hsv-graph-end-y '(0 5000 1 10 0 1)))
 
356
  _"Draw _HSV Graph..."
 
357
  _"Create a graph of the Hue, Saturation, and Value distributions"
 
358
  "Shuji Narazaki <narazaki@InetQ.or.jp>"
 
359
  "Shuji Narazaki"
 
360
  "1997"
 
361
  "RGB*"
 
362
  SF-IMAGE       "Image to analyze"    0
 
363
  SF-DRAWABLE    "Drawable to analyze" 0
 
364
  SF-ADJUSTMENT _"Graph scale"         '(1 0.1 5 0.1 1 1 1)
 
365
  SF-ADJUSTMENT _"BG opacity"          '(100 0 100 1 10 0 1)
 
366
  SF-TOGGLE     _"Use selection bounds instead of values below" TRUE
 
367
  SF-TOGGLE     _"From top-left to bottom-right"                FALSE
 
368
  SF-ADJUSTMENT _"Start X"             '(0 0 5000 1 10 0 1)
 
369
  SF-ADJUSTMENT _"Start Y"             '(0 0 5000 1 10 0 1)
 
370
  SF-ADJUSTMENT _"End X"               '(1 0 5000 1 10 0 1)
 
371
  SF-ADJUSTMENT _"End Y"               '(1 0 5000 1 10 0 1)
 
372
)
350
373
 
351
374
(script-fu-menu-register "script-fu-hsv-graph"
352
 
                         _"<Image>/Script-Fu/Utils")
 
375
                         "<Image>/Colors/Info")