2011-08-07 46 views
4

如何生成簡單的BufferedImage並將其保存爲Clojure中的png文件?在clojure中生成並保存.png圖像

+2

你可以看看[rinzelight(https://github.com/Serabe/rinzelight),圖像庫我寫來回的Clojure。 – Serabe

+0

啊,太棒了!你已經救了我幾個小時的工作! – claj

+0

很高興聽到它!讓我知道是否有什麼我可以添加到它。 – Serabe

回答

9

我已經做了一些這樣的方式,簡要如下:

(def bi (BufferedImage. 16 16 BufferedImage/TYPE_INT_ARGB)) 
(def g (.createGraphics bi)) 
;; use g 
(.drawLine g 0 0 10 10) 
(.drawLine g 0 15 15 0) 
;; save: 
(ImageIO/write bi "png" (File. "test.png")) 

BufferedImage服務於Graphics2D背景g我們用ImageIO做保存。從我的一個項目

例子:

(ns minemap.graphics 
    (require minemap.core) 
    (import java.io.File) 
    (import java.awt.Color) 
    (import java.awt.image.BufferedImage) 
    (import javax.imageio.ImageIO)) 

(defn draw-png 
    "Take width, height, and the map of mines. Save to a file. 
    Supposed to take a generate-random-map{,-perc} mapping." 
    [width height minemap file] 
    (let [block 5 ;block size 
     bi (BufferedImage. (* block width) (* block height) BufferedImage/TYPE_INT_ARGB) 
     g (.createGraphics bi)] 
    (do 
     (.setColor g (*colors* :background)) 
     (.fillRect g 0 0 (* block width) (* block height)) 
     (doseq [[[x y] high] minemap] 
     (.setColor g (*colors* high)) 
     (.fillRect g (* block x) (* block y) block block)) 
     (ImageIO/write bi "png" (File. file))))) 
+0

謝謝!十分優雅! – claj