我正在尝试使用clojure的Scalr java图像大小调整库:
[org.imgscalr/imgscalr-lib "4.2"]当我导入它并尝试使用它时,它失败了,因为每个方法都需要可变数量的参数:
(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]我在这里做错了什么?谢谢!
发布于 2012-04-24 05:13:18
您可能没有像预期的那样获取图像。这对我很有效……
*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> 发布于 2012-04-24 05:10:01
into-array调用看起来没问题,但是找到的方法签名接受一个java.lang.Integer,在Clojure中,默认情况下你的200是一个java.lang.Long。
如何强制转换为int类型:
(Scalr/resize image (int 200) (into-array BufferedImageOp []))https://stackoverflow.com/questions/10288187
复制相似问题