我正在尝试使用clojure中的Scalr 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
这是因为(正如我所知)resize将最后一个参数作为可变数量的BufferedImageOps。所以,我尝试传入一个java数组:
(import 'java.awt.image.BufferedImageOp)
(Scalr/resize image 200 (into-array BufferedImageOp []))
但是
失败了No message.
[Thrown class java.lang.ClassCastException]
我在这里做错了什么?谢谢!
答案 0 :(得分: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 BufferedImage@ccfe446: 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>
答案 1 :(得分:0)
into-array
调用看起来没问题,但找到的方法签名here需要java.lang.Integer,而在Clojure中,200
默认为java.lang.Long
如何转换为int:
(Scalr/resize image (int 200) (into-array BufferedImageOp []))