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 を取り、Clojureではデフォルトで java.lang.Long になります。200

intへのキャストはどうですか:

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