我想通过将图像的顶部移动到底部来移除图像的条带(宽度)。目前我正在这样做,但我认为可能有一种更有效的方法来实现这一点,而无需创建新的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;
...
提前致谢。
答案 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);
我认为这样可以在你的情况下正常工作,虽然你需要测试(当源和目标区域重叠时会有一些奇怪的效果!)