好吧,所以我有一點搜索,並找不到任何問題,所以希望它不是重複。Java getSubimage()行爲
我有這個程序,只是應該重新排列圖像,使每個角落移動到對面的角落。這裏有一個例證: The Expected Behavior
這裏的Java代碼,我試圖:
//TL
BufferedImage b1 = (b.getSubimage(0, 0, w/2, h/2));
//TR
BufferedImage b2 = (b.getSubimage(w/2, 0, w/2, h/2));
//BL
BufferedImage b3 = (b.getSubimage(0, h/2, w/2, h/2));
//BR
BufferedImage b4 = (b.getSubimage(w/2, h/2, w/2, h/2));
Graphics2D g2d = b.createGraphics();
//New TL
g2d.drawImage(b4, 0, 0, null);
//New TR
g2d.drawImage(b3, w/2, 0, null);
//New BL
g2d.drawImage(b2, 0, h/2, null);
//New BR
g2d.drawImage(b1, w/2, h/2, null);
當b爲我試圖重新排列位圖。此代碼產生以下結果:
我管理通過添加一個額外的行作爲這種修復代碼:
BufferedImage bTest = new BufferedImage(b.getWidth(), b.getHeight(),BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bTest.createGraphics();
,然後使用,而不是b BTEST。
所以我想我的問題是,getSubImage實際上做了什麼?從我可以告訴它只是作爲對原始BufferedImage的引用,而不是在調用它時複製它。
我想有一個工作版本,它不需要中間BufferedImage。
如果任何人都可以提供一些幫助,這將不勝感激。謝謝。
我認爲你的第一個子圖像有不正確的寬度和高度參數,你不需要向它們添加x和y –
在這種情況下,x和y都是0,而w和h是整個圖像的寬度和高度。我會修復帖子,謝謝。 –
方法'getSubimage'返回新的'BufferedImage',它使用與原始圖像相同的數據數組ColorModel屬性 –