【发布时间】:2023-03-11 21:07:01
【问题描述】:
我创建了一个绘制 PNG 图像的 Java sample code 的 Clojure 实现。我的 Clojure 版本如下。它可以工作,但如果我不将drawString() 的参数强制转换为整数,Clojure 编译器会抛出错误。 API 文档显示 Graphics2D.drawString() 接受浮点参数,但其超类 Graphics.drawString() 不接受。如何说服/欺骗/提示 Clojure 使用 drawString() 的浮动版本?
(defn render-image [message]
(let [width 200 height 200
bi (java.awt.image.BufferedImage. width height java.awt.image.BufferedImage/TYPE_INT_ARGB)
font (java.awt.Font. "TimesRoman" java.awt.Font/BOLD 20)
ig (doto ^java.awt.Graphics2D (.createGraphics bi) (.setFont font))
metrics (.getFontMetrics ig)
str-width (.stringWidth metrics message)
str-height (.getAscent metrics)]
(doto ig
(.setPaint java.awt.Color/BLACK)
;; Compiler complains if x- and y-arguments to .drawString
;; are not integers. Why?
(.drawString message
(int (/ (- width str-width) 2))
(int (+ (/ height 2) (/ str-height 4)))))
bi))
(defn -main [filename]
(-> (render-image "Hello world")
(javax.imageio.ImageIO/write "PNG" (java.io.File. filename))))
【问题讨论】:
标签: java clojure graphics2d