2013-04-08 5 views
1

몇 시간 전에 검색했지만 내 질문에 대한 답변을 찾을 수 없습니다.Java Graphics2D Color 문제

방법 1 : method 1 http://img713.imageshack.us/img713/3558/tcg6.jpg

방법 2 : 나는이 비교 사진을 보여 드리겠습니다

먼저 method 2 http://img716.imageshack.us/img716/2755/tcg7.jpg

방법 1은 나에게 어떤 문제를 주어진 적이 있지만, 최근 것을 발견 간단하게 너무 오래 걸리고, 방법 2는 그것을 고정시켰다.

코드 방법 1 :

private void drawDefaultOrientation() { 
    for (int x = 0; x < width; x++) { 
     for (int y = 0; y < height; y++) { 
      int dx = Math.min(x, width - 1 - x); 
      int dy = Math.min(y, height - 1 - y); 
      if (dx < borderSize || dy < borderSize) { 
       inBorder(dx, dy); 
      } 
      else { 
       outBorder(dx, dy); 
      } 
      bufferedImage.setRGB(xOffset + x, yOffset + y, color.getRGB()); 
     } 
    } 
}  

코드 방법 2 :

private void drawDefaultOrientation() { 
    DataBufferInt buffer = (DataBufferInt)bufferedImage.getRaster().getDataBuffer(); 
    int[] pixelArray = buffer.getData(); 
    for (int x = 0; x < width; x++) { 
     for (int y = 0; y < height; y++) { 
      int dx = Math.min(x, width - 1 - x); 
      int dy = Math.min(y, height - 1 - y); 
      if (dx < borderSize || dy < borderSize) { 
       inBorder(dx, dy); 
      } 
      else { 
       outBorder(dx, dy); 
      } 
      pixelArray[(xOffset + x) + ((yOffset + y) * bufferedImage.getWidth())] = color.getRGB(); 
     } 
    } 
} 

은주의하시기 바랍니다 inBorder (DX, DY); 및 outBorder (dx, dy); 색상 변수를 빨강, 녹색, 파랑 및 알파 값이있는 색상으로 설정하십시오.

수신자 코드 : 정말 색상 차이는 여기에 이유에 분실하고

new CustomRectangle(bufferedImage, 220, 90, 15, 245, 5, defaultOrientation) { 
     @Override 
     public void inBorder(final int dx, final int dy) { 
      setColor(new Color(red, green, blue, 255 - Math.min(dx, dy))); 
     } 

     @Override 
     public void outBorder(final int dx, final int dy) { 
      setColor(new Color(red, green, blue, 128 - Math.min(dx, dy))); 
     } 
    }.draw(); 

.

나는 정말로 저 밖에있는 누군가가 나를 도울 수 있기를 바랍니다. 처음에는 알파 값과 관련이 있다고 생각했지만 알 수 있듯이 알파 변이는 방법 2와 함께 계속 존재합니다.

감사합니다.

+0

무작위 추측 : 다른 색상 공간? http://en.wikipedia.org/wiki/RGB_color_space –

+0

색상이 정말로 매우 다른 경우 동의 할 수 있습니다 ... 그러나 색상이 서로 떨어져 있지 않기 때문에 어떤 일이 일어나는지 확신 할 수 없습니다. – skiwi

+0

차이점은 주로 광도입니다. 또 다른 이유는 RGB 값을 왜곡하는 추가 오프셋 또는 압축 일 수 있습니다. 'bufferedImage.setRGB (...)'는 무엇을 하는가? –

답변

0

"단순한"(상자, 도형, 그라디언트 등을 포함하여) Java2D API를 직접 사용하는 것이 좋습니다. 더 효율적이고 간단하게 작성할 수 있습니다. 예를 들어

은 컬러와 이미지의 사각형을 채우기 위해 : 당신이해야 할로

public void rectangle(Color color, float x1, float y1, float w, float h) { 
    Graphics2D g = bufferedImage.createGraphics(); 
    g.setColor(color); 
    g.fill(new Rectangle2D.Float(x1, y1, w, h)); 
    g.dispose(); // optional but releases the resource earlier 
} 

또한 많은 일들을 그립니다 "g"를 사용할 수 있습니다.