2014-12-23 129 views
1

我試圖裁剪500×500圖像僅在中心的300x300的矩形,像這樣:如何使用drawImage()來裁剪圖像?

Original Image    
+-------------------+  +-------------------+ 
|  500 x 500  |  |  Crop Area  | 
|     |  | +-----------+ | 
|     |  | | 300 x 300 | | 
|     |  | |   | | 
|     |  | |   | | 
|     |  | +-----------+ |  
|     |  |     | 
+-------------------+  +-------------------+ 

我看到Graphics.drawImage() with 8 int parameters說,它將繪製圖像的某個區域,這似乎適合僅繪製圖像的裁剪區域,但是當我嘗試image.getGraphics().drawImage(image, 0, 0, 500, 500, 100, 100, 400, 400, null);時,它沒有正確裁剪圖像。

我應該給drawImage哪些參數裁剪我的圖像?

+0

我可能會更易於使用子圖像,但是這只是我... – MadProgrammer

回答

2

前四個int參數代表要繪製的圖像的矩形部分(目標圖像),最後四個代表您正在繪製的圖像(源圖像)的矩形部分。如果這些矩形大小不一樣,源圖像將被重新縮放(增大或縮小)以適合目標圖像。您嘗試使用drawImage(image, 0, 0, 500, 500, 100, 100, 400, 400, null)不太合適,因爲在獲得圖像的正確區域後,您會將其放大以適合整個圖像。因爲您想剪裁圖像 - 更改其尺寸 - 所以您必須創建一個尺寸適合剪裁區域的新圖像,然後在該圖像上繪製。

下面是存儲在一個BufferedImage你裁剪圖像的例子:

//enter the appropriate type of image for TYPE_FOO 
BufferedImage cropped = new BufferedImage(300, 300, BufferedImage.TYPE_FOO); 
cropped.getGraphics().drawImage(image, 
     0, 0, 300, 300, //draw onto the entire 300x300 destination image 
     100, 100, 400, 400, //draw the section of the image between (100, 100) and (400, 400) 
     null); 
image = cropped;