2013-03-11 36 views
0

這是一個問題,我使用的方式是否正確。我的意思是,正確的方式是否有更高效的內存管理方式?是否乘以BufferedImage設置亮度是正確的?

我使用1個圖像源:

String imgurl = "imgreadertest8.png"; 
    BufferedImage loadedimage = ImageIO.read(getClass().getResource(imgurl)); 
    BufferedImage image = ImageIO.read(getClass().getResource(imgurl)); 

我繪製圖像中的油漆()方法。但有時我需要設置亮度:

public void setBrightness(float brightness) 
{ 
    RescaleOp rescaleOp = new RescaleOp(brightness, 15, null); 
    rescaleOp.filter(loadedimage, image); 
} 

所以我讀了兩次相同的圖像。一個有一個'final'BufferedImage(它不是最終的......但是我不能在這個上下文中使用final,因爲它需要在構造函數之外使用(在這裏你看不到,但它是)),這是用作模板,一個用於編輯和繪製。

更多信息:前嘗試這種方式,我這樣做:

String imgurl = "imgreadertest8.png"; 
    BufferedImage loadedimage = ImageIO.read(getClass().getResource(imgurl)); 
    BufferedImage image = loadedimage; 

但是,當我編輯的圖像,它編輯loadedimage爲好。非常多,因爲它們是同一個對象。

那麼...有沒有另外一種方法來設置這個圖像的亮度,而不是兩次加載相同的圖像?

回答

0

以下將複製圖像。

public static BufferedImage copy(BufferedImage img) { 
    Hashtable<?,?> properties = new Hashtable<>(); 
    for (String propertyName : img.getPropertyNames()) { 
     properties.put(propertyName, img.getProperty(propertyName)); 
    } 
    return new BufferedImage(img.getColorModel(), 
      img.copyData(null), 
      img.isAlphaPremultiplied(), properties); 

} 

同樣的事情就可以實現速度較慢,但​​simplier通過創建一個空的圖像,在它的createGraphics(不要忘記處置)繪製。如果你需要一個Graphics2D來處理圖像,那也可能是一個選項。