2013-03-11 1 views
0

이것은 올바른 방법으로 사용하고있는 질문입니다. 그리고 올바른 방법으로 말입니다. 메모리를 효율적으로 사용하는 방법이 있습니까? 페인트() 메소드BufferedImage를 곱하여 밝기를 올바르게 설정 했습니까?

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

I 그릴 이미지 :

I는 1 이미지 소스를 사용한다. 하지만 때로는 밝기를 설정해야합니다.

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

그래서 같은 이미지를 두 번 읽습니다. 하나는 '최종'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); 

} 

같은 일이 느리지 만 더 간단 그것의 createGraphics (처분을 잊지되지 않음)에 그리기, 빈 이미지를 생성함으로써 달성 될 수있다. 이미지를 처리하기 위해서 Graphics2D가 필요한 경우는 옵션일지도 모릅니다.