CS 330 Lecture 36 – GIMP example, macros
Agenda
- program this
- GIMP Script-Fu floodfilling example
Program this
Sketch out the pseudocode for implementing a paintbucket operation in an image editor.
Script-Fu template
(script-fu-register
"floodfill"
"Hackbucket"
"Performs the hackbucket operation very slowly"
"Chris Johnson"
"You wrote this code, not me."
"May 2, 2012"
""
ARGS
...
)
(script-fu-menu-register "floodfill" "<Image>/CS330")
Code
hackbucket.scm
(define floodfill
(lambda (image color x y)
(let
((layer (car (gimp-image-get-active-layer image)))
(fill-color (cons-array 3 'byte)))
; check for fill != init
(floodfill-helper layer (car (cdr (gimp-drawable-get-pixel layer x y))) fill-color x y))))
(define floodfill-helper
(lambda (layer init-color fill-color x y)
(cond
; check for canvas drop off
((< x 0) '())
((< y 0) '())
; TODO
((not (equal? (car (cdr (gimp-drawable-get-pixel layer x y))) init-color)) '())
; general case
(else
(begin
(color-pixel-at layer fill-color x y)
(floodfill-helper layer init-color fill-color (+ x 1) y)
(floodfill-helper layer init-color fill-color (- x 1) y)
(floodfill-helper layer init-color fill-color x (+ y 1))
(floodfill-helper layer init-color fill-color x (- y 1)))))))
(define color-pixel-at
(lambda (layer color x y)
(gimp-drawable-set-pixel layer x y 3 color)
(gimp-displays-flush)
(gimp-drawable-update layer x y 1 1)))
(script-fu-register
"floodfill"
"Hackbucket"
"Performs the hackbucket operation very slowly"
"Chris Johnson"
"You wrote this code, not me."
"May 2, 2012"
""
SF-IMAGE "Image" 0
SF-COLOR "Color" '(0 0 0)
SF-VALUE "X" "0"
SF-VALUE "Y" "0"
)
(script-fu-menu-register "floodfill" "<Image>/CS330")
Haiku
Plugins tweak software.
But what about appliances?
Blenders need Whip-Fu.
But what about appliances?
Blenders need Whip-Fu.