diff clojure/com/aurellem/run/image.clj @ 499:8b8053ccb33c

generated graphical representation of the gb color map.
author Robert McIntyre <rlm@mit.edu>
date Tue, 12 Jun 2012 03:36:47 -0500
parents 554883a95de0
children 0273c08cd2ff
line wrap: on
line diff
     1.1 --- a/clojure/com/aurellem/run/image.clj	Mon Jun 11 10:07:01 2012 -0500
     1.2 +++ b/clojure/com/aurellem/run/image.clj	Tue Jun 12 03:36:47 2012 -0500
     1.3 @@ -192,5 +192,83 @@
     1.4             "," ",\n")]
     1.5        (println out-str))))
     1.6  
     1.7 -(defn-memo gb-color-map []
     1.8 -  (read-string (slurp gb-color-map-file)))
     1.9 \ No newline at end of file
    1.10 +(def gb-color-map 
    1.11 +  (read-string (slurp gb-color-map-file)))
    1.12 +
    1.13 +(import javax.imageio.stream.FileImageOutputStream)
    1.14 +(import '(javax.imageio ImageWriteParam IIOImage ImageIO))
    1.15 +
    1.16 +
    1.17 +(defn gen-gb-color-image! []
    1.18 +  (let [im (BufferedImage. 181 182 BufferedImage/TYPE_INT_RGB)
    1.19 +        pix (vec
    1.20 +
    1.21 +             (reduce
    1.22 +              concat
    1.23 +              (map (partial
    1.24 +                    sort-by
    1.25 +                    (fn [[r g b]]
    1.26 +                      (let [s (max r g b)
    1.27 +                            det
    1.28 +                            (cond
    1.29 +                             (= s r)
    1.30 +                             (+ -1000 (- g) b)
    1.31 +                             (= s b)
    1.32 +                             (+ (- r) g)
    1.33 +                             (= s g)
    1.34 +                             (+ 1000 (- b) r))]
    1.35 +                        det)))
    1.36 +                   (partition
    1.37 +                    181 181 []
    1.38 +                    (sort-by
    1.39 +                     (fn euclidean-distance [[r g b]]
    1.40 +                       (Math/sqrt (+ (* r r) (* g g) (* b b))))
    1.41 +                     (vals gb-color-map))))))
    1.42 +        view (cortex.sense/view-image)
    1.43 +        target (File. user-home "proj/vba-clojure/gb-color-map.png")]
    1.44 +    (dorun (for [x (range 181) y (range 182)]
    1.45 +             (let [[r g b] (get pix (+ x (* 181 y)) [0 0 0])
    1.46 +                   rgb (+ (bit-shift-left r 16)
    1.47 +                          (bit-shift-left g 8)
    1.48 +                          b)]
    1.49 +             (.setRGB im x y rgb))))
    1.50 +    (view im)
    1.51 +    (doto
    1.52 +        (.next (ImageIO/getImageWritersByFormatName "png"))
    1.53 +      (.setOutput (FileImageOutputStream. target))
    1.54 +      (.write (IIOImage. im nil nil))
    1.55 +      (.dispose))
    1.56 +    im))
    1.57 +          
    1.58 +(defn gen-gb-color-image*! []
    1.59 +  (let [im (BufferedImage. 213 213 BufferedImage/TYPE_INT_RGB)
    1.60 +        squares
    1.61 +        (vec
    1.62 +         (for [r (range 32)]
    1.63 +           (vec
    1.64 +            (for [b (range 32) g (range 32)]
    1.65 +              (gb-color-map [r g b])))))
    1.66 +        view (cortex.sense/view-image)
    1.67 +        target (File. user-home "proj/vba-clojure/gb-color-map.png")]
    1.68 +
    1.69 +    (dorun
    1.70 +     (for [s-index (range 32)]
    1.71 +       (dorun
    1.72 +        (for [x (range 32) y (range 32)]
    1.73 +          
    1.74 +          (let [[r g b] ((squares s-index) (+ x (* 32 y))) 
    1.75 +                rgb (+ (bit-shift-left r 16)
    1.76 +                       (bit-shift-left g 8)
    1.77 +                       b)]
    1.78 +            (.setRGB im
    1.79 +                     (+ 3 (* 35 (rem s-index 6)) x)
    1.80 +                     (+ 3 (* 35 (int (/ s-index 6))) y)
    1.81 +                     rgb))))))
    1.82 +    (view im)
    1.83 +    (doto
    1.84 +        (.next (ImageIO/getImageWritersByFormatName "png"))
    1.85 +      (.setOutput (FileImageOutputStream. target))
    1.86 +      (.write (IIOImage. im nil nil))
    1.87 +      (.dispose))
    1.88 +    im))
    1.89 +  
    1.90 \ No newline at end of file