2

我想通过将图像的顶部移动到底部来删除图像的一条(宽度方向)。目前我正在这样做,但我认为也许有一种更有效的方法可以在不创建新的 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;
...

提前致谢。

4

2 回答 2

0

对我来说看起来很有效:你真的确定这里有性能问题吗?

如果你真的想避免创建一个新的缓冲图像,你可以使用 myImage 作为目标,即:

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

我认为这在您的情况下可以正常工作,尽管您需要进行测试(当源和目标区域重叠时可能会出现一些奇怪的效果!)

于 2012-05-07T17:31:11.220 回答
0

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

您可以使用CropImageFilter来获取您的图像。

    Toolkit toolkit = Toolkit.getDefaultToolkit();
    CropImageFilter cropFilter = new CropImageFilter
            (x, y, imageWidth, imageHeight);
    Image croppedImage = toolkit.createImage(new FilteredImageSource
            (image.getSource(), cropFilter));
于 2012-05-07T17:23:55.290 回答