Scala 十二只猴子是否提供图像裁剪功能?

Scala 十二只猴子是否提供图像裁剪功能?,scala,imgscalr,twelvemonkeys,Scala,Imgscalr,Twelvemonkeys,我正在尝试使用十二只猴子库来进行图像处理;但是找不到类似于org.imgscalr.crop(BuffereImage src,int x,int y,int width,int height,BuffereImage Op…ops)的方法。根据x,y,width,height参数裁剪输入图像。在Java中裁剪图像不需要任何特殊的库。只需使用普通Java2D和以下方法: buffereImage图像=。。。 BuffereImage裁剪=image.getSubimage(x,y,宽度,高度);

我正在尝试使用十二只猴子库来进行图像处理;但是找不到类似于org.imgscalr.crop(BuffereImage src,int x,int y,int width,int height,BuffereImage Op…ops)的方法。根据
x,y,width,height
参数裁剪输入图像。

在Java中裁剪图像不需要任何特殊的库。只需使用普通Java2D和以下方法:

buffereImage图像=。。。
BuffereImage裁剪=image.getSubimage(x,y,宽度,高度);
但是,请注意,JavaDoc中的一部分说:

返回的
buffereImage
与原始图像共享相同的数据数组

这意味着一个图像中的任何修改都将反映在另一个图像中。如果您希望避免这种情况,或者能够释放较大图像的内存,您可以执行以下操作来制作副本:

ColorModel cm=cropped.getColorModel();
BuffereImage copy=新的BuffereImage(cm,cropped.getData(),cm.isAlphaPremultiplied(),null);
这里的技巧是
BufferedImage.getData()
创建
光栅的副本


或者,如果您根本不需要整个图像,您可以直接读取所需图像的区域。这是
javax.imageio
API的标准特性,由TwelveMonkeys插件支持。这样做通常可以节省时间和内存:

try(ImageInputStream输入=ImageIO.createImageInputStream(文件)){
ImageReader=ImageIO.getImageReaders(input).next();//TODO:不处理读取器案例
reader.setInput(输入);
//如果需要,使用reader.getNumImages(布尔值)获取输入中的图像数
//使用reader.getWidth(int)/reader.getHeight(int)获取图像的尺寸
ImageReadParam param=reader.getDefaultReadParam();
参数设置资源区域(新矩形(x、y、宽度、高度));
BuffereImage image=reader.read(0,param);//读取第一个图像
}

PS:我的代码示例都是Java,因为Java是Java2D的“本机语言”,但我相信您可以轻松地将其转换为Scala。

@haraldK我最近才接触该项目,没有多少背景经验;原始代码使用了
imgscalr
库,我想用
twevemonkeys
库更新它;我查看了一些
tweelvemonkeys
库源代码,但找不到符合我要求的实用程序。我刚才尝试了
BufferImage.getSubimage
方法,结果证明其功能类似于
imgscalr.crop
。谢谢,伙计。