2012-04-23 38 views
1

我試圖使用Scalr java的圖像縮放庫從Clojure的:當我將其導入,並嘗試使用它,它失敗Clojure的:調用帶有可變ARGS一個Java類的靜態方法

[org.imgscalr/imgscalr-lib "4.2"] 

,因爲args來可變數量的每個方法都需要:

(import 'org.imgscalr.Scalr) 
(def image (*acquire BufferedImage instance*)) 
(Scalr/resize image 200) 

這給了我這個錯誤:

No matching method: resize 

這是因爲(我已經想通了)調整大小作爲其最後一個參數可變數量的BufferedImageOps。於是,我嘗試在Java數組這些經過:

(import 'java.awt.image.BufferedImageOp) 
(Scalr/resize image 200 (into-array BufferedImageOp [])) 

但這種失敗

No message. 
[Thrown class java.lang.ClassCastException] 

我在做什麼錯在這裏?謝謝!

回答

1

也許你不獲取圖像預期。 例如這適用於我....

*clojure-version* 
{:major 1, :minor 3, :incremental 0, :qualifier nil} 
user> (import 'java.awt.image.BufferedImageOp) 
java.awt.image.BufferedImageOp 
user> (import 'java.awt.image.BufferedImage) 
java.awt.image.BufferedImage 
user> (Scalr/resize (BufferedImage. 10 10 BufferedImage/TYPE_INT_ARGB) 200 (into-array BufferedImageOp [])) 
#<BufferedImage [email protected]: type = 2 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000 IntegerInterleavedRaster: width = 200 height = 200 #Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0> 
user> 
+0

謝謝!圖像正在返回地圖中,我不得不去(圖像:圖像)。我的錯。 – prismofeverything 2012-04-23 21:27:03

+0

沒問題。你應該注意到對於地圖''(:關鍵字地圖)''是慣用的而不是''(地圖:關鍵字)''。這裏討論:http://stackoverflow.com/questions/7034803/idiomatic-clojure-map-lookup-by-keyword – sw1nn 2012-04-23 21:31:19

0

into-array調用看起來不錯,但該方法的簽名發現here需要java.lang.Integer中,並用Clojure你200將是一個java.lang.Long中的默認。

如何鑄造爲int:

(Scalr/resize image (int 200) (into-array BufferedImageOp [])) 
+0

仍然失敗,同樣的錯誤。 – prismofeverything 2012-04-23 21:11:21

相關問題