切割BufferedImage条带的有效方法

时间:2012-05-07 17:04:14

标签: java bufferedimage java-2d

我想通过将图像的顶部移动到底部来移除图像的条带(宽度)。目前我正在这样做,但我认为可能有一种更有效的方法来实现这一点,而无需创建新的BufferedImage。

代码段:

BufferedImage myImage = ...;
...
BufferedImage imgPart_1 = myImage.getSubimage(0, 0, myImage.getWidth(), (myImage.getHeight()/2)-50);
BufferedImage imgPart_2 = myImage.getSubimage(0, myImage.getHeight()/2, myImage.getWidth(), myImage.getHeight()/2);
BufferedImage newImage = new BufferedImage(myImage.getWidth(), myImage.getHeight(), BufferedImage.TYPE_INT_ARGB);

Graphics g = newImage.createGraphics();
g.drawImage(imgPart_1, 0, 0, null);
g.drawImage(imgPart_2, 0, imgPart_1.getHeight(), null);

myImage = newImage;
...

提前致谢。

2 个答案:

答案 0 :(得分:0)

您必须创建一个新图像,但您不必自己绘制它。

您可以使用CropImageFilter来获取图片。

    Toolkit toolkit = Toolkit.getDefaultToolkit();
    CropImageFilter cropFilter = new CropImageFilter
            (x, y, imageWidth, imageHeight);
    Image croppedImage = toolkit.createImage(new FilteredImageSource
            (image.getSource(), cropFilter));

答案 1 :(得分:0)

对我来说效率很高:你真的确定这里存在性能问题吗?

如果你真的想避免创建一个新的bufferedimage,你可以使用myImage作为目的地,即只需:

Graphics g = myImage.createGraphics();
g.drawImage(imgPart_1, 0, 0, null);
g.drawImage(imgPart_2, 0, imgPart_1.getHeight(), null);

我认为这样可以在你的情况下正常工作,虽然你需要测试(当源和目标区域重叠时会有一些奇怪的效果!)