2012-05-07 4 views
2

이미지의 윗부분을 아래쪽으로 이동하여 이미지의 스트립 (폭)을 제거하고 싶습니다. 현재이 작업을 수행하고 있지만 새로운 BufferedImage를 만들지 않고도이 작업을 효율적으로 수행 할 수있는 방법이 있다고 생각합니다.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

새 이미지를 만들어야하지만 직접 페인트하지 않아도됩니다.

CropImageFilter을 사용하여 이미지를 얻을 수 있습니다.

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

매우 효율적입니다. 성능에 문제가 있는지 정말 궁금하십니까? 당신이 정말로 새로운 BufferedImage를 만들지 않도록하려면

, 당신은, 즉 바로 수행 대상으로 myimage을 사용할 수 있습니다 :

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

나는 테스트 할 필요가 있지만,이, 귀하의 경우 확인을 작동합니다 생각 (소스 영역과 대상 영역이 겹칠 때 약간의 효과가있을 수 있습니다!)

관련 문제