1

我正在尝试使用来自 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]

我在这里做错了什么?谢谢!

4

2 回答 2

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> 
于 2012-04-23T21:13:17.827 回答
0

into-array调用看起来不错,但这里找到的方法签名采用 java.lang.Integer,在 Clojure200中,默认情况下您将是 java.lang.Long。

如何转换为 int:

(Scalr/resize image (int 200) (into-array BufferedImageOp []))
于 2012-04-23T21:10:00.820 回答